可以发现黄色和绿色分的不太开,可以更换切片方式
使用后两个明显分得更开,实验效果应该会更好,但因为官网使用前两个,所以我们仍旧使用前两个
还有另一种处理测试数据的方法(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)



