数据集介绍
鸢尾花数据集有三个类别,每个类别有50个样本。其中一个类别与另外两个线性可分,另外两个不能线性可分。
PCA主成分分析
1.基本原理
在统计学中,主成分分析PCA是一种简化数据集的技术。它是一个线性变换。这个变换把数据变换到一个新的坐标系统中,使得任何数据投影的第一大方差在第一个坐标(称为第一主成分)上,第二大方差在第二个坐标(第二主成分)上,依次类推。主成分分析经常用于减少数据集的维数,同时保持数据集的对方差贡献最大的特征。这是通过保留低阶主成分,忽略高阶主成分做到的。这样低阶成分往往能够保留住数据的最重要方面。
具体步骤见: https://baike.baidu.com/item/pca%E6%8A%80%E6%9C%AF/10408698?fr=aladdin
2.代码实现
# 鸢尾花数据集-PCA降维
# 特征之间是线性相关的,此时用到PCA
import pandas as pd
from sklearn.decomposition import PCA
from matplotlib.colors import ListedColormap
import matplotlib as mpl
import matplotlib.pyplot as plt
if __name__ == '__main__':
# pd.set_option('参数名', 参数值)设置相关显示选项,
# display.width:数据显示区域的总宽度,以总字符数计算。
pd.set_option('display.width', 200)
# 一、获得数据
# 设置列名
columns = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'type']
data = pd.read_csv('./iris.data', header=None, names=columns)
# pd.Categorical(series),得到分类的对象,使用categories或者codes进行查看
# pd.Categorical( list ).codes 这样就可以直接得到原始数据的对应的序号列表,通过这样的处理可以将类别信息转化成数值信息
# pd.Categorical( list ).categories可以查看具体类别
data['type'] = pd.Categorical(data['type']).codes
# print(data)
# 二、数据处理
# 特征值与目标值
x = data.loc[:, columns[:-1]]
y = data['type']
# 三、特征工程
# PCA降维
# _components:组分的个数选择; whiten:白化; random_state=0:伪随机数发生器种子
pca = PCA(n_components=2, whiten=True, random_state=0)
x = pca.fit_transform(x)
# pca降维后,前两个组分在所有数据中所占信息的比例,一般来说80%的比例,说明已经具有较大的代表性。
print('各方向方差:', pca.explained_variance_)
print('方差所占比例:', pca.explained_variance_ratio_)
# print(x)
# 绘图
# 颜色选择
cm_light = ListedColormap(['#77E0A0', '#FF8080', '#A0A0FF'])
cm_dark = ListedColormap(['g', 'r', 'b'])
# 在代码中指定中文字体,解决了matplotlib中中文无法显示的问题
mpl.rcParams['font.sans-serif'] = u'SimHei'
mpl.rcParams['axes.unicode_minus'] = False
plt.figure(facecolor='w')
# s:点的尺寸 c:色彩或颜色序列 marker:散点的形状 cmap: 包含三列矩阵的色彩映射,色盘的意思
plt.scatter(x[:, 0], x[:, 1], s=30, c=y, marker='o', cmap=cm_dark)
# 参数:b:是否显示网格线的意思。ls(li