干货——为什么降维和降维实例

参考资料

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降维方法的介绍,请读者参考《数据科学概论》(覃雄派、陈跃国、杜小勇)或其他资料。


    链接:《数据科学概论》网上资源