zl程序教程

您现在的位置是:首页 >  后端

当前栏目

快速入门Python机器学习(十)

2023-06-13 09:11:03 时间

6.2 K邻近回归算法(KNeighbors Regressor)

class sklearn.neighbors.KNeighborsRegressor(n_neighbors=5, *, weights='uniform', algorithm='auto', leaf_size=30, p=2, metric='minkowski', metric_params=None, n_jobs=None, **kwargs)

参数

参数

解释

n_neighbors

int, optional (默认= 5),默认情况下用于kneighbors查询的邻居数。

algorithm

: {'auto','ball_tree','kd_tree','brute'}, optional。用于计算最近邻居的算法:•'ball_tree' 用于BallTree•'kd_tree'用于KDTree•'brute'用于强力搜查.•'auto'将尝试根据传递给fit方法的值来决定最合适的算法注意:使用强力拟合稀疏输入将覆盖此参数的设置。

属性

属性

解释

effective_metric_

str or callable要使用的距离度量。如果度量参数设置为'minkowski',p参数设置为2,则它将与度量参数或其同义词相同,例如'euclidean'。度量函数的其他关键字参数。

effective_metric_params_

dict对于大多数度量,都将与metric_params参数相同,但如果metric_params属性设置为'minkowski',则也可能包含p参数值。

n_samples_fit_

int拟合数据中的样本数

方法

方法

解释

fit(X, y)

从训练数据集中拟合k近邻回归。

get_params([deep])

获取此估计器的参数。

kneighbors([X, n_neighbors, return_distance])

找到点的K邻域。

kneighbors_graph([X, n_neighbors, mode])

计算X上点的k邻域(加权)图

predict(X)

根据提供的数据预测目标

score(X, y[, sample_weight])

返回预测的确定系数R2。

set_params(**params)

设置此估计器的参数。

6.2.1 K邻近算法分析无噪音make_regression数据集

def KNeighborsRegressor_for_make_regression():
    myutil = util()
    X,y = make_regression(n_samples=100,n_features=1,n_informative=2,random_state=8)
    X_train,X_test,y_train,y_test = train_test_split(X, y, random_state=8,test_size=0.3)
    clf = KNeighborsRegressor().fit(X,y)
    title = "K邻近算法分析make_regression数据集(无噪音)"
    myutil.draw_line(X[:,0],y,clf,title)
    myutil.plot_learning_curve(KNeighborsRegressor(),X,y,title)
    myutil.show_pic(title)

6.2.2 K邻近算法分析有噪音make_regression数据集

def KNeighborsRegressor_for_make_regression_add_noise():
    myutil = util()
    X,y = make_regression(n_samples=100,n_features=1,n_informative=2,noise=50,random_state=8)
    X_train,X_test,y_train,y_test = train_test_split(X, y, random_state=8,test_size=0.3)
    clf = KNeighborsRegressor().fit(X,y)
    title = "K邻近算法分析make_regression数据集(有噪音)"
    myutil.draw_line(X[:,0],y,clf,title)
    myutil.plot_learning_curve(KNeighborsRegressor(),X,y,title)
    myutil.show_pic(title)

6.2.2 K邻近算法分析乳腺癌数据集

def KNeighborsRegressor_for_for_diabetes():
    myutil = util()
    X,y = datasets.load_diabetes().data,datasets.load_diabetes().target
    X_train,X_test,y_train,y_test = train_test_split(X, y, random_state=8,test_size=0.3)
    clf = KNeighborsRegressor().fit(X_train,y_train)
    title = " K邻近回归算法分析糖尿病数据数据"
    myutil.print_scores(clf,X_train,y_train,X_test,y_test,title)
    myutil.plot_learning_curve(KNeighborsRegressor(),X,y,title)
    myutil.show_pic(title)

输出:

K邻近回归算法分析糖尿病数据:
60.66%
K邻近回归算法分析糖尿病数据:
38.87%

看来,用这个方法分析糖尿病数据是非常差的。

6.2.4 K邻近算法分析波士顿房价数据集

def KNeighborsRegressor_for_for_boston():
    myutil = util()
    X,y = datasets.load_boston().data,datasets.load_boston().target
    X_train,X_test,y_train,y_test = train_test_split(X, y, random_state=8,test_size=0.3)
    clf = KNeighborsRegressor().fit(X_train,y_train)
    title = " K邻近回归算法分析波士顿房价数据"
    myutil.print_scores(clf,X_train,y_train,X_test,y_test,title)
    myutil.plot_learning_curve(KNeighborsRegressor(),X,y,title)
    myutil.show_pic(title)

输出

K邻近回归算法分析波士顿房价数据:
71.71%
K邻近回归算法分析波士顿房价数据:
45.91%

看来,用这个方法分析波士顿房价数据是也非常差的

7 朴素贝叶斯

7.1 概念

天气预报有雨P(A):50%、堵车概率P(B): 80%、下雨后堵车概率P(A|B): 40%;那么堵车后下雨的概率P(B|A)是多少,根据朴素贝叶斯定律:

P(A|B) = P(A) · P(B|A) / P(B)

其中:P (A)> P(A|B)、 P (B)> P(B|A)

P(B|A)= P(B) · P(A|B) / P(A)=50%·40%/80%=25%

看看我们如何用Python来实现朴素贝叶斯定律

7.2 用Python程序来实现

一周 [1,0,0,1,0,1,0]下情况,1表示下雨,0表示不下雨。[1,0,0,1,0,1,0]表示周1、4、6下雨,周2、3、5、日不下雨。下面我们改进下。

[1,1,0,1],表示一天内的数据,第1个数据表示是否刮风:1刮,0不刮;第2个数据表示是否闷热:1闷,0不闷;第3个数据表示是否多云:1多云,0不是多云表示和第4个数据表示预报有雨:1预报有雨,0预报没雨。所以[1,1,0,1]表示刮风、闷热、不是多云且预报有雨。[[1,1,0,1],[0,1,1,0],[1,0,0,1],[0,1,0,0],[1,0,1,0],[0,1,0,0],[0,0,1,0]]这个是一周内的实际数据,我们用X来表示。

X=[[1,1,0,1],[0,1,1,0],[1,0,0,1],[0,1,0,0],[1,0,1,0],[0,1,0,0],[0,0,1,0]]

用y值表示实际是否下雨了

y=[1,1,0,0,1,0,1]
def my_BernoulliNB():
        X = np.array([[1,1,0,1],[0,1,1,0],[1,0,0,1],[0,1,0,0],[1,0,1,0],[0,1,0,0],[0,0,1,0]])
        y = np.array([1,1,0,0,1,0,1])
        counts={}
        for label in np.unique(y):
                counts[label] = X[y==label].sum(axis=0)
        print("特性统计:\n{}".format(counts))

输出:

特性统计:
{0: array([1, 2, 0, 1]), 1: array([2, 2, 3, 1])}

说明

实际没雨的日子:1天刮风,2天闷热,0天多云,1天预报有雨

实际下雨的日子:2天刮风,2天闷热,3天多云,1天预报有雨

        clf = BernoulliNB()
        clf.fit(X,y)
        #明天多云
        Next_Day = [[0,0,1,0]]
        pre1 = clf.predict(Next_Day)
        print(pre1)
        #另一天刮风、闷热、预报有雨
        Another_Day = [[1,1,0,1]]
        pre2 = clf.predict(Another_Day)
        print(pre2)
        print(clf.predict_proba(Next_Day))
        print(clf.predict_proba(Another_Day))

输出

[1]
[0]
[[0.16275954 0.83724046]]
[[0.67464862 0.32535138]]

说明

第一天有雨 没雨概率16%,有雨概率84%

第二条没有雨 没雨概率67%,有雨概率32%