为了账号安全,请及时绑定邮箱和手机立即绑定

人工智障学习笔记——机器学习(16)降维小结

标签:
机器学习

机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中。降维的本质是学习一个映射函数 f : x->y,其中x是原始数据点的表达,目前最多使用向量表达形式。 y是数据点映射后的低维向量表达,通常y的维度小于x的维度(当然提高维度也是可以的)。f可能是显式的或隐式的、线性的或非线性的。

目前大部分降维算法处理向量表达的数据,也有一些降维算法处理高阶张量表达的数据。之所以使用降维后的数据表示是因为在原始的高维空间中,包含有冗余信息以及噪音信息,在实际应用例如图像识别中造成了误差,降低了准确率;而通过降维,我们希望减少 冗余信息 所造成的误差,提高识别(或其他应用)的精度。又或者希望通过降维算法来寻找数据内部的本质结构特征。

在很多算法中,降维算法成为了数据预处理的一部分,如PCA。事实上,有一些算法如果没有降维预处理,其实是很难得到很好的效果的。


数据降维主要分为线性方法与非线性方法。其中线性方法主要有无监督PCA、有监督LDA。非线性方法有以保留局部特征为代表的基于重建权值的LLE、基于邻接图的拉普拉斯特征映射等。还有保留全局特征为代表的基于核KPCA、基于距离保持的MDS(欧式距离)极其扩展算法Isomap(测地线距离)。以及定义数据的局部和全局结构之间的软边界的t-SNE。每种算法都有其适用的应用领域,具体使用那种算法极其参数设置都需要根据具体情况进行确认。


下面以digits数字图像集为例来对比一下各大降维算法。不过也不能完全说明问题,因为有些算法并不适合处理此类数据,

from time import timeimport numpy as npimport matplotlib.pyplot as pltfrom matplotlib import offsetboxfrom sklearn import manifold, datasets, decomposition, ensemble,discriminant_analysis, random_projectionfrom mpl_toolkits.mplot3d import Axes3Ddigits = datasets.load_digits(n_class=5)X = digits.dataY = digits.targetprint ('样本个数: ',X.shape[0],'样本维度: ',X.shape[1])n_img_per_row = 20img = np.zeros((10 * n_img_per_row, 10 * n_img_per_row))for i in range(n_img_per_row):ix = 10 * i + 1for j in range(n_img_per_row):iy = 10 * j + 1img[ix:ix + 8, iy:iy + 8] = X[i * n_img_per_row + j].reshape((8, 8))plt.imshow(img, cmap=plt.cm.binary)plt.title('data')Algorithm_SET=[manifold.TSNE(n_components=3),manifold.LocallyLinearEmbedding(n_components=3),manifold.Isomap(n_components=3),manifold.MDS(n_components=3),decomposition.PCA(n_components=3),decomposition.KernelPCA(n_components=3,kernel='rbf'),decomposition.KernelPCA(n_components=3,kernel='poly'),decomposition.KernelPCA(n_components=3,kernel='sigmoid'),discriminant_analysis.LinearDiscriminantAnalysis(n_components=3)]Name_SET=['TSNE','LLE','Isomap','MDS','PCA','KPCA-rbf','KPCA-poly','KPCA-sigmoid','LDA']for i,Algorithm in enumerate(Algorithm_SET):t0 = time()X = Algorithm.fit_transform(X,Y)#坐标缩放到[0,1]区间x_min, x_max = np.min(X,axis=0), np.max(X,axis=0)X = (X - x_min) / (x_max - x_min)title = Name_SET[i]+": (time %.2fs)" %(time() - t0)fig = plt.figure(Name_SET[i])ax = Axes3D(fig)for j in range(X.shape[0]):ax.text(X[j, 0], X[j, 1], X[j,2],str(Y[j]),color=plt.cm.Set1((Y[j]+1) / 10.),fontdict={'weight': 'bold', 'size': 9})plt.title(title)plt.show()



先看5个分类的:

https://img1.sycdn.imooc.com//5b4caa210001d9c508510513.jpg

https://img1.sycdn.imooc.com//5b4caa2a000179b104920439.jpg

https://img1.sycdn.imooc.com//5b4caa3200014e9b04920440.jpg

https://img1.sycdn.imooc.com//5b4caa390001f13004880435.jpg

https://img1.sycdn.imooc.com//5b4caa400001c52104930438.jpg

https://img1.sycdn.imooc.com//5b4caa4a0001059e04930439.jpg

https://img1.sycdn.imooc.com//5b4caa510001ba2704930439.jpg

https://img1.sycdn.imooc.com//5b4caa620001f92b04990447.jpg

https://img1.sycdn.imooc.com//5b4caa6b000132bf05030450.jpg

https://img1.sycdn.imooc.com//5b4caa720001653105190464.jpg


再看10个分类的:

https://img1.sycdn.imooc.com//5b4caa790001f3b506610402.jpg


https://img1.sycdn.imooc.com//5b4caa800001ffe505070455.jpg

https://img1.sycdn.imooc.com//5b4caa8a0001a47d05220460.jpg

https://img1.sycdn.imooc.com//5b4caa910001a7d805070455.jpg

https://img1.sycdn.imooc.com//5b4caa9800010eb305090450.jpg

https://img1.sycdn.imooc.com//5b4caa9f00015f6e05130450.jpg

https://img1.sycdn.imooc.com//5b4caaa70001a8f405130453.jpg

https://img1.sycdn.imooc.com//5b4caaae0001676d05160454.jpg

https://img1.sycdn.imooc.com//5b4caabb0001f84b05060452.jpg

https://img1.sycdn.imooc.com//5b4caac30001163205070458.jpg


感觉除了时间复杂度炸裂的t_SNE,其他的都仿佛失了智一样。


至此,机器学习部分就先告一段落了,总体来说还是蛮难搞的,虽然强大的sklearn库可以提供各种API以及测试数据,不过若想深入了解其中的原理,必须要自己一步一步的推导,一步一步的实现。比如这个:

https://img1.sycdn.imooc.com//5b4caacb00014f1106550325.jpg

接下来学习Deep Learning还会面临更高的挑战,我只能说,祝大家身体健康吧- -再见!

https://img1.sycdn.imooc.com//5b4caad20001e06800780072.jpg


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消