可以发现黄色和绿色分的不太开,可以更换切片方式
使用后两个明显分得更开,实验效果应该会更好,但因为官网使用前两个,所以我们仍旧使用前两个
还有另一种处理测试数据的方法(ravel)
关于这个函数,还有个更直观的例子
用的是c = y_由系统自动根据y_来调配颜色,其实也可以指定颜色
可以根据自己喜好更改颜色
除了使用scatter来画图。还可以使用countourf来画图
跟上面相比,它耗费的时间会相对短一点儿(画轮廓面跟散点图比起来,当然是轮廓面更快一点)
全部代码:
import numpy as np
import matplotlib,pylab as pyb
%matplotlib inline
from sklearn.neighbors import KNeighborsClassifier
from sklearn import datasets
###加载数据,数据降维(画图)
X,y = datasets.load_iris(True)
#4个属性 4维空间,4维的数据
#150代表样本的数量
X.shape
#降维,切片:简单粗暴的方式(信息量变少了)
X = X[:,:2]
X.shape
#训练数据shape
#测试数据也应是这个形状(?,2)
pyb.scatter(X[:,0],X[:,1],c = y)
#c表示更改颜色,等于y是指根据不同y值分配颜色
###KNN算法训练数据
knn = KNeighborsClassifier(n_neighbors=5)
#使用150个样本点作为训练数据
knn.fit(X,y)
###meshgrid提取测试数据(8000个测试样本)
#获取测试数据
#横坐标4--8;纵坐标2--4.5
#背景点,取出来,meshgrid
x1 = np.linspace(4,8,100)
y1 = np.linspace(2,4.5,80)
X1,Y1 = np.meshgrid(x1,y1)
display(X1.shape,Y1.shape)
#处理测试数据,使其shape类似于训练数据
# X1 = X1.reshape(-1,1)
# Y1 = Y1.reshape(-1,1)
# X_test = np.concatenate([X1,Y1],axis = 1)
# X_test.shape
#平铺,一维化,reshape
X_test = np.c_[X1.ravel(),Y1.ravel()]
X_test.shape
###使用训练数据进行预测
%%time
#查看执行时间,一个%只控制一行,因为下面进行了换行,所以用两个%%
y_ = knn.predict(X_test)
#或者可以这样写
#%time y_ = knn.predict(X_test)
#注意%time一般放在第一行,放在第二行可能报错
from matplotlib.colors import ListedColormap
lc = ListedColormap(['#FFAAAA','#AAFFAA','#AAAAFF'])
lc2 = ListedColormap(['#FF0000','#00FF00','#0000FF'])
pyb.scatter(X_test[:,0],X_test[:,1],c = y_,cmap = lc)
pyb.scatter(X[:,0],X[:,1],c = y,cmap = lc2)
pyb.contourf(X1,Y1,y_.reshape(80,100),cmap = lc)
pyb.scatter(X[:,0],X[:,1],c = y,cmap = lc2)