快速入门Python机器学习(十)
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%
相关文章
- 快速入门Python机器学习(36)
- 快速入门Python机器学习(20)
- 快速入门Python机器学习(17)
- 快速入门Python机器学习(34)
- 快速入门Python机器学习(26)
- 快速入门Python机器学习(29)
- 快速入门Python机器学习(27)
- Python学习系列:PyCharm CE 安装与测试
- 快速入门Python机器学习(31)
- 快速入门Python机器学习(22)
- 快速入门Python机器学习(35)
- 快速入门Python机器学习(13)
- 快速入门Python机器学习(23)
- 快速入门Python机器学习(九)
- 快速入门Python机器学习(21)
- 快速入门Python机器学习(15)
- 快速入门Python机器学习(19)
- 快速入门Python机器学习(32)
- Python 学习记录(五)Pycharm导入包
- Python 学习笔记 列表 for 循环 xxx XXX