主成分分析(PCA降维)
算法原理
主成分分析是一种统计方法,通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。
主成分分析(PCA)又称为Karhunen-Loeve或K-L方法,用于搜索k个能代表数据的n维正交向量,是最常用的一种降维方法。PCA的主要目的是找出数据中最主要的方面代替原始数据。
具体地,假如数据集是n维的,共有m个数据,希望将m个数据从n维降到n’维,使这m个n’维的数据集尽可能代表原始数据集。
PCA算法
输入:n维样本集D = (x(1),x(2),...,x(m)),要降维到的维数n'
输出:降维后的样本集D'
方法:
1.对所有的样本进行中心化:
2. 计算样本的协方差矩阵;
3. 对协方差矩阵进行特征值分解;
4.取出最大的n’个特征值对应的特征向量,将所有的特征向量标准化后,组成特征向量矩阵;
5.将样本集中的每一个样本转化为新的样本;
6.得到输出样本集。
鸢尾花数据降维
1.导入所需库及数据集
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
2.加载数据
iris = load_iris()
y = iris.target
x = iris.data
# x.shape
3.PCA降维
pca = PCA(n_components=2)
pca = pca.fit(x)
reduced_X = pca.transform(x)
reduced_X.shape
4.可视化
red_x, red_y = [], []
blue_x, blue_y = [], []
green_x, green_y = [], []
for i in range(len(reduced_X)):
if y[i] == 0:
red_x.append(reduced_X[i][0])
red_y.append(reduced_X[i][1])
elif y[i] == 1:
blue_x.append(reduced_X[i][0])
blue_y.append(reduced_X[i][1])
else:
green_x.append(reduced_X[i][0])
green_y.append(reduced_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='o')
plt.show()
运行结果如下: