干货——为什么降维和降维实例
参考资料
https://www.scipy-lectures.org/packages/scikit-learn/auto_examples/plot_tsne.html
http://colah.github.io/posts/2014-10-Visualizing-MNIST/
为什么要对数据进行降维
实际应用中的数据一般是高维的,比如手写的数字,如果我们缩放到28×28的图片大小,那么它的维度就是28×28=784维。
下图是手写的1及其对应的图像二维矩阵,数据已经被规范化到[0,1]范围内。
降维的目的有二,一个是为了对数据进行可视化,以便对数据进行观察和探索。另外一个目的是简化机器学习模型的训练和预测。
我们很难对高维数据具有直观的认识,如果把数据的维度降低到2维或者3维,并且保持数据点的关系,与原高维空间里的关系,保持不变或者近似,我们就可以进行可视化,肉眼来观察数据。
数据经过降维以后,如果保留了原有数据的主要信息,那么我们就可以用降维的数据进行机器学习模型的训练和预测,由于数据量大大缩减,训练和预测的时间效率将大为提高。
降维实例
下面的python代码,把digits数据集进行了tsne降维,并且显示出来。读者可以拷贝代码到Jupyter notebook里面运行。
from sklearn import datasets digits = datasets.load_digits() # Take the first 500 data points: it's hard to see 1500 points X = digits.data[:500] y = digits.target[:500] from sklearn.manifold import TSNE tsne = TSNE(n_components=2, random_state=0) |
X_2d = tsne.fit_transform(X) target_ids = range(len(digits.target_names))
from matplotlib import pyplot as plt plt.figure(figsize=(6, 5)) colors = 'r', 'g', 'b', 'c', 'm', 'y', 'k', 'w', 'orange', 'purple' for i, c, label in zip(target_ids, colors, digits.target_names): plt.scatter(X_2d[y == i, 0], X_2d[y == i, 1], c=c, label=label) plt.legend() plt.show() |
程序的执行结果如下
关于tsne降维方法的介绍,请读者参考《数据科学概论》(覃雄派、陈跃国、杜小勇)或其他资料。
链接:《数据科学概论》网上资源