之前总结了聚类算法,然后我们这一课来简单学习一下降维算法,常用的降维算法有PCA算法。
主成分分析
Principal Component Analysis,简称PCA,通常用于高位数据集的降维和可视化,还可以用数据压缩和数据降维等,可用于数据压缩和预处理。
相关术语:
1.方差:是各个样本和样本均值的差的平方和的均值,用来度量一组
数据的分散程度。
2.协方差:用于度量两个变量之间的线性相关性程度,若两个变量的
协方差为0,则可认为二者线性无关。
3.协方差矩阵:由变量的协方差值构成的矩阵
4.特征向量和特征值:矩阵的特征向量是描述数据集结构的非零向量,并满足如下公式:Av = λv,A是方阵, v是特征向量,λ是特征值。
原理:
矩阵的主成分就是其协方差矩阵对应的特征向量,按照对应的特征值大小进行排序,最大的特征值就是第一主成分,其次是第二主成分,以此类推。
算法过程:
目标:
已知鸢尾花数据是4维的,共三类样本。使用PCA实现对鸢尾花数据进行降维,实现在二维平面上的可视化。
具体算法:
#-*- coding:utf-8 -*-
import matplotlib.pyplot as plt#加载matplotlib用于数据的可视化
from sklearn.decomposition import PCA#加载PCA算法包
from sklearn.datasets import load_iris#加载鸢尾花数据集导入函数
data=load_iris()#以字典形式加载鸢尾花数据集
x=data.data#使用X表示数据集中的属性数据
y=data.target#使用y表示数据集中的标签
pca=PCA(n_components=2)#加载PCA算法,设置降维后主成分数目为2
reduce_x=pca.fit_transform(x)#对原始数据进行降维,保存在reduced_X中
red_x,red_y=[],[] #第一类数据点
blue_x,blue_y=[],[] #第二类数据点
green_x,green_y=[],[] #第三类数据点
# print(reduce_x[:][:])
for i in range(len(reduce_x)):
if y[i]==0:
red_x.append(reduce_x[i][0]) #将分类后的鸢尾花数据加入到不同的列表中
red_y.append(reduce_x[i][1])
elif y[i]==1:
blue_x.append(reduce_x[i][0])
blue_y.append(reduce_x[i][1])
else:
green_x.append(reduce_x[i][0])
green_y.append(reduce_x[i][1])
plt.scatter(red_x,red_y,c='r',marker='X') #画出散点图
plt.scatter(blue_x,blue_y,c='b',marker='D')
plt.scatter(green_x,green_y,c='g',marker='.')
plt.show()