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()


  

posted @ 2018-08-19 12:39  todaynowind  阅读(286)  评论(0编辑  收藏  举报