主成分分析的设计实现

内容概要:
利用sklearn和NumPy两种方法设计实现主成分分析。将设计的主成分分析对鸢尾花数据集进行处理,将数据降维为二维,并在平面中画出样本点的分布。

主成分分析:

PCA(principal components analysis)即主成分分析技术,又称主分量分析,旨在利用降维的思想,把多指标转化为少数几个综合指标。

该数据集中原来有五个特征,故为五维。降维算法中的“降维”,指的是降低特征矩阵中特征的数量。降维的目的是为了让算法运算更快,效果更好,但其实还有另一种需求:数据可视化。图像和特征矩阵的维度是可以相互对应的,即一个特征对应一个特征向量,对应一条坐标轴。所以,三维及以下的特征矩阵,是可以被可视化的,这可以帮助我们很快地理解数据的分布,而三维以上特征矩阵的则不能被可视化,数据的性质也就比较难理解。

import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.decomposition import PCA
import numpy as np

# 获取鸢尾花的数据
iris = datasets.load_iris()
iris_Y = iris.target
iris_X = iris.data

# 创建PCA对象,指定降维后的主成分数目为2
pca = PCA(n_components=2)

# 对数据进行PCA降维(Scikit-learn方法)
iris_X_pca = pca.fit_transform(iris_X)

# 标准化数据(将数据的均值调整为0,方差调整为1)
mean = np.mean(iris_X, axis=0)
std_dev = np.std(iris_X, axis=0)
iris_X_std = (iris_X - mean) / std_dev

# 计算协方差矩阵
cov_matrix = np.cov(iris_X_std.T)

# 计算特征值和特征向量
eigenvalues, eigenvectors = np.linalg.eig(cov_matrix)

# 将特征值和特征向量按特征值降序排列
sorted_indices = np.argsort(eigenvalues)[::-1]
eigenvalues = eigenvalues[sorted_indices]
eigenvectors = eigenvectors[:, sorted_indices]

# 选择前两个特征向量作为新的特征空间
top_eigenvectors = eigenvectors[:, :2]

# 通过特征向量将数据投影到新的特征空间(NumPy方法)
iris_X_pca_manual = np.dot(iris_X_std, top_eigenvectors)

# 创建一个图形
plt.figure(figsize=(12, 5))

# 在图形中创建子图
plt.subplot(1, 2, 1)
plt.scatter(iris_X_pca[:, 0], iris_X_pca[:, 1], c=iris_Y, cmap='viridis')
plt.xlabel('Principal Component 1 (Scikit-learn)')
plt.ylabel('Principal Component 2 (Scikit-learn)')
plt.title('PCA of Iris Dataset (Scikit-learn)')
plt.colorbar(label='Iris Species')

plt.subplot(1, 2, 2)
plt.scatter(iris_X_pca_manual[:, 0], iris_X_pca_manual[:, 1], c=iris_Y, cmap='viridis')
plt.xlabel('Principal Component 1 (Manual)')
plt.ylabel('Principal Component 2 (Manual)')
plt.title('PCA of Iris Dataset (Manual)')
plt.colorbar(label='Iris Species')

plt.tight_layout()
plt.show()

解析:

iris_Y = iris.target # 鸢尾花的目标标签

iris_X = iris.data # 鸢尾花的特征数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值