作业
利用PCA,完成鸢尾花数据集的降维与分类(分类算法自己挑选,并给出比较),并给出所选算法与分类准确率直接的可视化对比图(曲线或柱状图均可)。
代码
原始(未降维)
# 读取数据
df = pd.read_csv('iris.csv')
def get_xycs(df):
# 平面坐标系的位置只能表示2维数据
x = df['sepal.length'] # x 轴坐标
y = df['sepal.width'] # y 轴坐标
c = df['petal.length'].map({'Setosa':'r','Versicolor':'g','Virginica':'b'}) # 颜色color
s = df['petal.width'] # 大小size
return x, y, c, s
# 根据X,Y值画散点图, 用颜色的深浅表示花萼的长度,用大小表示花萼的宽度, 每组数据只能是一种点样式
plt.figure(figsize=(5, 5), dpi=100)
# plt.scatter(x,y, c=c, s=50) # 可以是标量,那么所有的点都一样
for sp in df['species'].unique():
x, y, c, s = get_xycs(df[df['species'] == sp])
plt.scatter(x, y, s=s * 30, cmap=plt.cm.seismic, label=sp)
plt.legend()
plt.show()
结果
利用PCA降维与分类
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import load_iris
X, y = load_iris().data, load_iris().target
pca = PCA(n_components = 2)
x = StandardScaler().fit_transform(X)
pca_iris = pca.fit_transform(x)
pca_df = pd.DataFrame(pca_iris, columns=['pca1', 'pca2'])
pca_df['target'] = y
x = StandardScaler().fit_transform(X)
fig = plt.figure(figsize = (8,8))
ax = fig.add_subplot(1,1,1)
ax.set_xlabel('Principal Component 1', fontsize = 15)
ax.set_ylabel('Principal Component 2', fontsize = 15)
ax.set_title('2 component PCA', fontsize = 20)
targets = [0, 1, 2]
colors = ['r', 'g', 'b']
for target, color in zip(targets,colors):
indicesToKeep = pca_df['target'] == target
ax.scatter(pca_df.loc[indicesToKeep, 'pca1']
, pca_df.loc[indicesToKeep, 'pca2']
, c = color
, s = 50)
ax.legend(targets)
ax.grid()
结果
问题
如何将四个属性值在二维平面展示
解决
这里所谓的降维, 更为准确的说应该是主成分分析, 而不是四维数据投影至一个平面上与二维数据比较。就是初始数据集,随机选两个属性,绘图,之后提取主成分分析后的两个属性,再绘制图。
心得体会
主成分分析, 数据之间的距离相对增大, 等有利于进行数据聚类分析, 准确率也有所提高。
原创不易
转载请标明出处
如果对你有所帮助 别忘啦点赞支持哈