| 完整代码见 sklearn代码3 4-KNN-iris分类  依旧使用鸢尾花实例来进行操作 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
 (150, 4)
 
 pyb.scatter(X[:,0],X[:,1],c = y)  # 横坐标0,纵坐标1 y会分配颜色 red,green 等就是改变点的颜色
 
 # 降维,最简单的降维操作就是切片  切片:简单粗暴的方式 信息量变少
X = X[:,2:]  #切片从2开始一直到最后
X.shape
 可以观察到前来前两个和后两个生成图像有很大的不同
  进行训练,可以看到结果,可训练成功 knn = KNeighborsClassifier(n_neighbors=5)
# 使用150个样本点作为训练数据
knn.fit(X,y)
 
 # 获取测试数据
# 横坐标宽度 4~8 纵坐标2~4.5
# 背景点 取出来 meshgrid x1 = np.linspace(4,8,100)   # 横坐标4~8,取一百个间隔
y1 = np.linspace(2,4.5,80)
X1,Y1 = np.meshgrid(x1,y1) display(X1.shape,Y1.shape)
 
 # 训练数据
X.shape
# 测试数据 shape(?,2)    
 # 获取测试数据
# 横坐标宽度 4~8 纵坐标2~4.5
# 背景点 取出来 meshgrid
x1 = np.linspace(4,8,100)   # 横坐标4~8,取一百个间隔
y1 = np.linspace(2,4.5,80)
X1,Y1 = np.meshgrid(x1,y1)
display(X1.shape,Y1.shape)
X1 = X1.reshape(-1,1)  #-1代表8000样本,1代表横坐标长度
X1.shape
Y1 = Y1.reshape(-1,1)
X_test = np.concatenate([X1,Y1],axis = 1)   # 对数据进行级联,将数据是组成训练样本的形式
X_test.shape
 
 # 获取测试数据
# 横坐标宽度 4~8 纵坐标2~4.5
# 背景点 取出来 meshgrid
x1 = np.linspace(4,8,100)   # 横坐标4~8,取一百个间隔
y1 = np.linspace(2,4.5,80)
X1,Y1 = np.meshgrid(x1,y1)
# display(X1.shape,Y1.shape)
X1 = X1.reshape(-1,1)  #-1代表8000样本,1代表横坐标长度
X1.shape
Y1 = Y1.reshape(-1,1)
# X_test = np.concatenate([X1,Y1],axis = 1)
# X_test.shape
# 平铺 一维化
X1.ravel().shape
  ravel使用示例
 使用前:
 a = np.random.randint(0,30,size = (3,4))
a
  使用后:
 a.ravel()  #将数据一维化
  选用ravel来进行数据整合
 # 获取测试数据
# 横坐标宽度 4~8 纵坐标2~4.5
# 背景点 取出来 meshgrid
x1 = np.linspace(4,8,100)   # 横坐标4~8,取一百个间隔
y1 = np.linspace(2,4.5,80)
X1,Y1 = np.meshgrid(x1,y1)
# display(X1.shape,Y1.shape)
# X1 = X1.reshape(-1,1)  #-1代表8000样本,1代表横坐标长度
# X1.shape
# Y1 = Y1.reshape(-1,1)
# # X_test = np.concatenate([X1,Y1],axis = 1)
# # X_test.shape
# # 平铺 一维化
X_test = np.c_[X1.ravel(),Y1.ravel()]   #与上述方法都可以实现数据整合
X_test.shape
 
 %%time  #测试时间 一个% 只控制一行,代码需要在其后面 换行执行需要两个百分号
y_ = knn.predict(X_test)   #预测数据一般都会加_来进行说明
  指定颜色来进行输出
 指定颜色需要导入相应的库
 from matplotlib.colors import ListedColormap
 lc = ListedColormap(['red','green','blue'])
 pyb.scatter(X_test[:,0],X_test[:,1],c = y_,cmap=lc)
 
 将训练样本应用于其上 lc = ListedColormap(['#FFAAAA','#AAFFAA','#AAAAFF'])
lc2 = ListedColormap(['#FF0000','#00FF00','#0000FF'])
 %%time
pyb.scatter(X_test[:,0],X_test[:,1],c = y_,cmap=lc)
pyb.scatter(X[:,0],X[:,1],c = y,cmap = lc2)
  另外一种画图方法,
  
 与上述方法相比,消耗时间更少,绘制轮廓面比绘制散点图更加省时图形更加圆滑,散点图的边界可以很明显的看到有齿状痕迹
 %%time
# 轮廓线 等高线
pyb.contourf(X1,Y1,y_.reshape(80,100),cmap=lc)
pyb.scatter(X[:,0],X[:,1],c = y,cmap = lc2)
  整体流程
 导包加载数据并对数据进行降维处理,在之后应该采用算法降维,去除不必要的属性训练数据meshgrid交叉组合 进行强关联 提取测试数据 8000个测试样本测试数据是新用户的数据使用算法进行预测 可视化
 |