数据读取和处理
特征归一化
计算协方差矩阵
奇异值分解
Ureduce=U(:, 1:k)
import numpy as np
# 数据读取和处理
data = np.array([[1, 2], [3, 4], [5, 6]])
# 特征归一化
data = (data - data.mean(axis=0)) / data.std(axis=0)
# 计算协方差矩阵
cov = np.cov(data.T)
# 奇异值分解
U, S, V = np.linalg.svd(cov)
# Ureduce=U(:, 1:k) 选择前k个奇异向量
Ureduce = U[:, :1]
# 降维后的数据
new_data = data @ Ureduce
print(new_data)
# [[ 1.22474487]
# [ 1.22474487]
# [ 1.22474487]]
这个过程完成了:
PCA算法算是一个比较简单的无监督机器学习算法。主要作用就是用作数据样本特征降维。个人对于PCA算法的理解是通过变换坐标系,从而将高维度样本压缩到低维度,同时还尽可能的保留样本数据的大部分信息。
PCA算法在实际项目应用中的作用包括以下几个方面:
FLAG:以后相关的机器学习算法都要自己编程实现,然后和相关的库函数实现做一个对比。
回答:
PCA(Principal Component Analysis)是一种常用的数据降维技术,能提取出数据中最主要的特征成分,对于高维数据的可视化和模型构建非常有帮助。下面是使用Python实现PCA降维的具体步骤:
1.载入数据并进行预处理
首先需要载入数据并进行必要的预处理,包括数据清洗、数据缩放和数据标准化等。通常我们会选择对数据进行标准化处理,即减去均值并除以标准差,使不同特征之间的量纲统一,避免某一特征过于突出而影响降维效果。
import numpy as np from sklearn.preprocessing import StandardScaler
data = np.loadtxt('data.txt', delimiter=',')
data_scaled = StandardScaler().fit_transform(data)
2.计算协方差矩阵和特征值
PCA主要进行的是一个线性变换操作,将数据从原来的坐标系变换到一个新的正交坐标系,使得变换后的新坐标系下样本的方差最大化。因此,计算协方差矩阵是PCA的重要一步。协方差矩阵的值越大,表示两个特征之间的相关性越强。接着,需要求解协方差矩阵的特征值和特征向量。
cov_mat = np.cov(data_scaled.T)
eig_vals, eig_vecs = np.linalg.eig(cov_mat)
3.保留主成分
接下来需要将特征值进行排序并选择前k个主成分,通常可以选择保留方差贡献率大于一定阈值的主成分。可以使用np.cumsum()来计算主成分贡献率的累计和。
variance_ratio = eig_vals / np.sum(eig_vals) cumulative_ratio = np.cumsum(variance_ratio)
import matplotlib.pyplot as plt plt.plot(range(1, eig_vals.size+1), cumulative_ratio, marker='o') plt.xlabel('Number of components') plt.ylabel('Cumulative explained variance') plt.show()
可以根据折线图确定要保留的主成分个数k,比如经过观察,可以选择保留前两个主成分(保留的主成分数可以根据实际需求来决定)。
4.计算由主成分组成的新坐标系
接着,就可以将原始数据投影到选定的主成分上,从而将数据降维到k维。这里需要注意的是,PCA会将数据投影到一个新的坐标系上,而这个坐标系是由各个主成分构成的。每个主成分都是原始特征的线性组合,因此可以得到一个新的特征向量矩阵。
new_coords = np.dot(data_scaled, eig_vecs[:, :k])
5.展示降维结果
最后,可以将降维后的数据进行可视化展示,例如使用散点图或者直方图。
import matplotlib.pyplot as plt plt.figure(figsize=(8, 6)) plt.scatter(new_coords[:, 0], new_coords[:, 1]) plt.xlabel('PC1') plt.ylabel('PC2') plt.show()
这样就完成了PCA降维的具体步骤。需要注意的是,PCA降维虽然可以提高模型训练效率和可视化效果,但在实际建模时,可能会引入一定的信息损失,因此需要对降维效果进行评估和优化。
参考资料:
[1] https://blog.csdn.net/sinat_22594309/article/details/80383145
[2] https://www.datacamp.com/community/tutorials/principal-component-analysis-in-python
[3] https://zhuanlan.zhihu.com/p/32925578