机器学习利用PCA完成鸢尾花数据集的降维与分类

作业

利用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完成鸢尾花数据集的降维与分类_第1张图片

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

结果

机器学习利用PCA完成鸢尾花数据集的降维与分类_第2张图片

问题

如何将四个属性值在二维平面展示

解决

这里所谓的降维, 更为准确的说应该是主成分分析, 而不是四维数据投影至一个平面上与二维数据比较。就是初始数据集,随机选两个属性,绘图,之后提取主成分分析后的两个属性,再绘制图。

心得体会

主成分分析, 数据之间的距离相对增大, 等有利于进行数据聚类分析, 准确率也有所提高。

原创不易
转载请标明出处
如果对你有所帮助 别忘啦点赞支持哈
在这里插入图片描述

你可能感兴趣的:(机器学习作业,机器学习,分类,python)