【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
1. 介绍
KNN(K-Nearest Neightbors ) K最近邻算法。简单地说,K 近邻算法采用测量不同特征值之间的距离方法进行分类。 K 近邻算法的工作原理是:存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。
K这个字母的含义就是最近邻的个数,在scikit-learn中,K值是通过n_neightbors参数来进行调节的。
2. 分类示例
from sklearn.datasets import make_blobs
#Knn用于分类的模型 KNeighborsClassifier
from sklearn.neighbors import KNeighborsClassifier
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
import numpy as np
#w创建训练样子,n_samples样本数,数据类型centers
data = make_blobs(n_samples=500,centers=5,random_state=8)
X,y= data
clf =KNeighborsClassifier()
clf.fit(X,y)
x_min,x_max = X[:,0].min()-1,X[:,0].max()+1
y_min,y_max = X[:,1].min()-1,X[:,1].max()+1
##生成网格点坐标矩阵
xx,yy = np.meshgrid(np.arange(x_min,x_max,.02),np.arange(y_min,y_max,.02))
Z = clf.predict(np.c_[xx.ravel(),yy.ravel()])
Z= Z.reshape(xx.shape)
#plt.pcolormesh的作用在于能够直观表现出分类边界
plt.pcolormesh(xx,yy,Z,cmap=plt.cm.Pastel1)
plt.scatter(X[:,0],X[:,1],c=y,cmap=plt.cm.spring,edgecolor='k')
plt.xlim(xx.min(),xx.max())
plt.ylim(yy.min(),yy.max())
#把新的数据点用五角星表示出来
plt.scatter(6.75,5.82,marker='*',c = 'red',s =200)
#对新数据点分类进行判断
print('新数据点的分类是:',clf.predict([[6.75,5.82]]))
#模型正确率
print('模型正确率:{:.2f}'.format(clf.score(X,y)))
plt.show()
3.回归示例
from sklearn.datasets import make_regression
#Knn用于回归的模型 KNeighborsRegressor
from sklearn.neighbors import KNeighborsRegressor
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
import numpy as np
#生成特征数量为1,噪音为50的数据集
data = make_regression(n_features=1,n_informative=1,noise=50,random_state=8)
X,y= data
reg = KNeighborsRegressor(n_neighbors=2)
#用KNN模型拟合数据
reg.fit(X,y)
#在指定的间隔内返回均匀间隔的数字
z= np.linspace(-3,3,200).reshape(-1,1)
#用散点图将数据点进行可视化
plt.scatter(X,y,c='orange',edgecolor='k')
#plt.plot()函数的本质就是根据点连接线。根据x(数组或者列表) 和 y(数组或者列表)组成点,然后连接成线。
plt.plot(z,reg.predict(z),c='k',linewidth=2)
#模型正确率
print('模型正确率:{:.2f}'.format(reg.score(X,y)))
plt.show()
4 分析过程示例
from sklearn.datasets import load_wine
#导入训练拆分工具
from sklearn.model_selection import train_test_split
#Knn用于分类的模型 KNeighborsClassifier
from sklearn.neighbors import KNeighborsClassifier
import numpy as np
1.从sklearn 的dataset模块载入数据集
wine_dataset = load_wine()
print("红酒数据售的健:\n{}".format(wine_dataset.keys()))
#print(wine_dataset['DESCR'])
2,生成训练集和测试集
#一般用大写的X表示数据的特征,小写的y表示对应的标签
X_train,X_test,y_train,y_test = train_test_split(wine_dataset['data'],wine_dataset['target'],random_state=0)
3.使用knn建模
knn =KNeighborsClassifier(n_neighbors=1)
#使用模型对数据进行拟合
knn.fit(X_train,y_train)
4.使用模型对新样本的分类进行预测
#打印模型的评分,如果分数越高,则说明模型的预测越准确
print("测试数据集得分:{:.2f}".format(knn.score(X_test,y_test)))
#输入新的数据点
X_new= np.array([[13.4,23,4.1,2.2,830,21,322,13.4,23,4.1,2.2,830,21]])
prediction = knn.predict(X_new)
print("预测红酒的分类为:{}".format(wine_dataset['target_names'][prediction]))
来源:oschina
链接:https://my.oschina.net/pengchanghua/blog/3153551