KNN入门学习笔记

一:了解数据集
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
from sklearn import datasets

iris=datasets.load_iris()
x=iris.data[:,2] #x轴为数据集的第三列花瓣的数据

y=iris.data[:,3] #可以查看他所包含的数据
species=iris.target #可以查看他所包含的种类

x_min,x_max=x.min()-.5,x.max()+.5
y_min,y_max=y.min()-.5,y.max()+.5

plt.figure() #自定义画布大小
plt.title(‘Iris Datasets - Classification By Petal Sizes’,size=14)
plt.scatter(x,y,c=species)
plt.xlabel(‘Petal length’)
plt.ylabel(‘Petal width’)
plt.xlim(x_min,x_max)
plt.ylim(y_min,y_max)
plt.xticks(()) # 设置x轴刻度的表现方式
plt.yticks(())
plt.plot()
plt.savefig(‘鸢尾花分类预测_根据花瓣长宽.png’) #保存数据
plt.show()
KNN入门学习笔记_第1张图片

二:进行KNN数据预测
import numpy as np
from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier
np.random.seed(0) #seed() 方法改变随机数生成器的种子,可以在调用 #其他随机模块函数之前调用此函数。random.seed(0)每次生成相同的随机数;当我们设置相同的#seed,每次生成的随机数相同。如果不设置seed,则每次会生成不同的随机数。
iris=datasets.load_iris()
x=iris.data
y=iris.target
i=np.random.permutation(len(iris.data))#random.permutation()打乱数据集所有的元素
x_train=x[i[:-10]] #选择前140个数据作为训练集
y_train=y[i[:-10]]
x_test=x[i[-10:]] #选择后10个数据集作为测试集
y_test=y[i[-10:]]

knn=KNeighborsClassifier()
knn.fit(x_train,y_train)

在可控制台进行数据预测与y_test进行比较
*#knn.predict(x_test)

三、画出决策边界
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier
iris=datasets.load_iris()
x=iris.data[:,:2]
y=iris.target

x_min,x_max=x[:,0].min()-.5,x[:,0].max()+.5
y_min,y_max=x[:,1].min()-.5,x[:,0].max()+.5

cmap_light=ListedColormap([‘#AAAAFF’,’#AAFFAA’,’#FFAAAA’])
h=.02
xx,yy=np.meshgrid(np.arange(x_min,x_max,h),np.arange(y_min,y_max,h))
*#meshgrid函数用两个坐标轴上的点在平面上画格[X,Y]=meshgrid(x,y)
#h代表步长
knn=KNeighborsClassifier()
knn.fit(x,y)
z=knn.predict(np.c_[xx.ravel(),yy.ravel()])
*#xx.ravel() 和 yy.ravel() 是将两个矩阵(二维数组)都变成一维数组的意思
#np.c_[] 函数组合成一个二维数组
z=z.reshape(xx.shape)
plt.figure()
plt.pcolormesh(xx,yy,z,cmap=cmap_light)

#显示训练样本
plt.scatter(x[:,0],x[:,1],c=y)
plt.xlim(xx.min(),xx.max())
plt.ylim(yy.min(),yy.max())

plt.plot()
plt.savefig(‘鸢尾花分类决策边界.png’)
plt.show()
KNN入门学习笔记_第2张图片

实践:
from numpy import *
import numpy as np
import operator
f=open(r’F:***\python-ML code\KNN\datingTestSet2.txt’)
arraylines=f.readlines()
numberOfLines=len(arraylines)
returnMat=zeros((numberOfLines,3))

classLabelVector=[]
index=0
for line in arraylines:
line=line.strip()
listFromLine=line.split(‘\t’)

returnMat[index,:]=listFromLine[0:3]
classLabelVector.append(int(listFromLine[-1]))
index +=1

#return returnMat,classLabelVector
f.close()
np.random.seed(0)
x=returnMat
y=classLabelVector
#i=np.random.permutation(len(z))

x_train=x[:-10]
y_train=y[:-10]
x_test=x[-10:]
y_test=y[-10:]

from sklearn.neighbors import KNeighborsClassifier
knn=KNeighborsClassifier()
knn.fit(x_train,y_train)

print(knn.predict(x_test),y_test)

实验结果:[3 2 2 2 2 2 1 3 1 1]
[3, 2, 2, 2, 2, 2, 1, 3, 3, 3]
正确率达到80%。

你可能感兴趣的:(KNN入门学习笔记)