sklearn—总结(1) PCA、k-邻近分类及决策边界
import lxml import numpy as np import pandas as pd import matplotlib.patches as pch from matplotlib.colors import ListedColormap from mpl_toolkits.mplot3d import Axes3D from sklearn import datasets import matplotlib.pyplot as plt from sklearn.decomposition import PCA from sklearn.neighbors import KNeighborsClassifier # 数据显示设置 plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签 plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号 # 加载iris数据 ir=datasets.load_iris() # print(ir.data) # 萼片长度、宽度,花瓣长度、宽度 # print(ir.target) # 花卉种类编号 # print(ir.target_names) # 花卉种类 # 绘图设置 fig = plt.figure(figsize=(12, 6)) # 定义图并设置画板尺寸 fig.set(alpha=0.2) # 设定图表颜色alpha参数 plt.subplots_adjust(bottom=0.06, top=0.94, left=0.08, right=0.94, wspace=0.36, hspace=0.5) # 设置作图范围、子图间距 # 不同萼片尺寸的花卉种类-散点图 x1=ir.data[:,0] # 萼片长度数据 y1=ir.data[:,1] # 萼片宽度数据 ax1=fig.add_subplot(221) ax1.set_title("Iris Dataset - Classification By Sepal Sizes",size=10) ax1.set_xlabel("Sepal length") ax1.set_ylabel("Sepal width") ax1.axis([x1.min()-0.5,x1.max()+0.5,y1.min()-0.5,y1.max()+0.5]) ax1.set_xticks(()) ax1.set_yticks(()) ax1.scatter(x1,y1,c=ir.target) # 散点颜色根据花卉种类编号划分 # 主成分分析-3D散点图 ax2=fig.add_subplot(222,projection='3d') # 子图2 x2=ir.data[:,1] # 萼片宽度数据 y2=ir.data[:,2] # 花瓣长度数据 x_reduced=PCA(n_components=3).fit_transform(ir.data) # 主成分分析,降为三维 ax2.set_title("Iris Datasets by PCA",size=14) ax2.set_xlabel("First eigenvector") ax2.set_ylabel("Second eigenvector") ax2.set_zlabel("Third eigenvector") ax2.w_xaxis.set_ticklabels(()) ax2.w_yaxis.set_ticklabels(()) ax2.w_zaxis.set_ticklabels(()) ax2.scatter(x_reduced[:,0],x_reduced[:,1],x_reduced[:,2],c=ir.target) # k-邻近分类 x3=ir.data y3=ir.target i=np.random.permutation(len(ir.data)) # 返回np.array(arange(0,len(ir.data)))的随机排列 x3_train=x3[i[:-10]] # 训练数据属性序列 y3_train=y3[i[:-10]] # 训练数据分类 x3_test=x3[i[-10:]] # 测试数据属性序列 y3_test=y3[i[-10:]] # 测试数据分类 knc3=KNeighborsClassifier() # 定义一个k-邻近分类器 knc3.fit(x3_train,y3_train) # 进行训练 knc3.predict(x3_test) # 进行预测 # 画出决策边界 ax4=fig.add_subplot(224) x4=ir.data[:,:2] y4=ir.target xx4,yy4=np.meshgrid(np.arange(x4[:,0].min()-0.5,x4[:,0].max()+0.5,0.2),np.arange(x4[:,1].min()-0.5,x4[:,1].max()+0.5,0.2)) knc4=KNeighborsClassifier() knc4.fit(x4,y4) Z4=knc4.predict(np.c_[xx4.ravel(),yy4.ravel()]) Z4=Z4.reshape(xx4.shape) cmap_light=ListedColormap(["#AAAAFF","#AAFFAA","#FFAAAA"]) # 决策区域要使用的颜色 ax4.pcolormesh(xx4,yy4,Z4,cmap=cmap_light) # 绘制决策边界 plt.show()