大家好,我是一名Python数据分析师,希望通过我的经验分享,帮助大家在人工智能领域取得进步。因此,我编写了一系列教程,分别是《15天学会Python编程》、《每天10分钟,用Python学数据分析》、《Python数据可视化实战》和《33天搞定机器学习》。
在开始之前,我想说一些话。我收到了一些反馈,提到我的专栏更新速度较慢。实际上,作为一名技术博主,我深知持续创作的难度。尤其是作为一名技术博主,还需要格外严谨,以免误导读者。
这个专栏的文章都是现写的,每一篇文章都经历了选题、构思、实践和撰写的过程,每周按时更新已经相当不易。因此,我特别感谢那些订阅我的读者给予的支持和信任。
接下来,我们来讨论一下数据降维。
在上一篇文章中,我们探讨了特征选择的相关知识。有些读者可能不太清楚特征选择与数据降维的区别。这两个概念虽然不同,但目标是一致的:减少数据集中特征的数量。
数据降维的好处在于能减少计算量,从而提高计算效率。这种方法在文本处理、人脸识别、图像识别以及自然语言处理等领域应用广泛。
数据降维的方法有很多种,本文主要介绍经典的PCA方法。
主成分分析(PCA)是一种常用的无监督降维方法,它通过正交变换将线性相关变量表示的数据转换为少数几个线性无关变量表示的数据。这些线性无关的变量被称为“主成分”,其数量通常少于原始变量的数量,这样就实现了高维特征到低维特征的映射。
关于主成分的另一种理解方式是:主成分就是协方差矩阵对应的特征向量,按照特征值的大小进行排序,最大特征值对应的第一主成分,依次类推。
如果想详细了解PCA的数学推导,可以参考李航老师的《统计学习方法》第十六章。由于专栏不支持LaTeX公式,这里不再详细介绍。
关于PCA,我曾看过一个独特的解释,即台大李宏毅教授将其比作一个具有隐藏层的神经网络。有兴趣深入了解的读者可以查看李教授的相关课程,特别是关于主成分分析的部分。
PCA算法的主要步骤参考了周志华教授的《机器学习》第十章第三节。简而言之,求得样本集的协方差矩阵的前k个特征值对应的特征向量矩阵W,然后对每个样本x(i)进行如下变换:Z(i)=W^T * x^(i),从而实现降维的目的。
在scikit-learn库中,与PCA相关的类位于sklearn.decomposition包中。为了方便大家理解和使用,我已经整理了一份详细的速查表。如有需要,可以私信我获取高清大图。
我们以sklearn库内置的鸢尾花数据集为例,演示如何将原本四维的数据降维为二维。
```python import matplotlib.pyplot as plt from sklearn import datasets from sklearn.decomposition import PCA
iris = datasets.load_iris() X = iris.data[:, :2] y = iris.target
plt.figure(2, figsize=(8, 6)) plt.clf() plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Set1, edgecolor='k') plt.xlabel('Sepal length') plt.ylabel('Sepal width') plt.xlim(X[:, 0].min() - .5, X[:, 0].max() + .5) plt.ylim(X[:, 1].min() - .5, X[:, 1].max() + .5) plt.xticks(()) plt.yticks(()) plt.show()
pca = PCA(ncomponents=2) Xr = pca.fit_transform(X)
plt.figure() colors = ['navy', 'turquoise', 'darkorange'] lw = 2
for color, i, targetname in zip(colors, [0, 1, 2], iris.targetnames): plt.scatter(Xr[y == i, 0], Xr[y == i, 1], color=color, alpha=.8, lw=lw, label=target_name) plt.legend(loc='best', shadow=False, scatterpoints=1) plt.title('PCA of IRIS dataset') plt.show() ```
希望这些内容对大家有所帮助。