学习scikit—learn机器学习的书上面的的k值近邻算法
并对这些算法加上自己的一些注解,为了以后能够快速的复习
以下是生成数据,没有分训练集和测试集,因为这只是个K值邻近算法的思想演示
至于k值邻近算法的思想就是在预测点附近找k个离它最近的点对它进行投票,
然后划分类别。
from sklearn.datasets.samples_generator import make_blobs
import numpy as np
import matplotlib.pyplot as plt
centers=[[-2,2],[2,2],[0,4]]中心点数组
X,y=make_blobs(n_samples=60,centers=centers,random_state=0,cluster_std=0.60)
#为聚类产生数据集,一共生成60个样本,中心点为上面的中心数组
print(X.shape)#X的大小为(60,2)
plt.figure(figsize=(16,10),dpi=144)#画布大小
c=np.array(centers)#将数组进行转化
plt.scatter(X[:,0],X[:,1],c=y,s=100,cmap='cool')#散点图,画的是X[:,0]就是画布上的x,X[:,0]就是画布上的y
plt.scatter(c[:,0],c[:,1],s=100,marker='^',c='orange')#散点图,画出中心
以下是引入sklearn中的k值近邻算法
from sklearn.neighbors import KNeighborsClassifier#引入K近邻算法
k=5#这个就是K值近邻算法中的k了
clf=KNeighborsClassifier(n_neighbors=k)#实例化一个即近邻算法的对象,邻居个数为5
clf.fit(X,y)#生成分类器模型
以下是k值近邻算法的实例化
X_sample = [0, 2]#预测点
temp = np.array(X_sample).reshape((1, -1))#把X_sample转化为[[0,2]],因为clf.predict只接受2维数组
y_sample = clf.predict(temp)#用上面生成的分类器进行预测
print(y_sample)#值为零
neighbors = clf.kneighbors(temp, return_distance=False)#寻找到离预测点最近的五个点的坐标,
#给neighbors数组
print(neighbors[0])#[16 20 48 6 23],可能因为环境不同,而变化
以下是画出来的部分
plt.figure(figsize=(16, 10), dpi=144)#画布大小
plt.scatter(X[:, 0], X[:, 1], c=y, s=100, cmap='cool')#数据
plt.scatter(c[:, 0], c[:, 1], s=100, marker='^', c='k') # 中心点
plt.scatter(X_sample[0], X_sample[1], marker="x",c='r', s=100, cmap='cool')#画出预测点
for i in neighbors[0]:#5次
plt.plot([X[i][0],X_sample[0]],[X[i][1],X_sample[1]],'k--',linewidth=0.6)#生成虚线连接起来
最后的输出