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

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

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

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

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

from time import time
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import offsetbox
from sklearn import manifold, datasets, decomposition, ensemble,discriminant_analysis, random_projection
from mpl_toolkits.mplot3d import Axes3D
digits = datasets.load_digits(n_class=5)
X = digits.data
Y = digits.target
print ('样本个数: ',X.shape[0],'样本维度: ',X.shape[1])
n_img_per_row = 20
img = 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个分类的:

再看10个分类的:

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

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

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

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

  1. 人工智障学习笔记——机器学习(15)t-SNE降维

    一.概念 t-SNE(t分布随机邻域嵌入)是一种用于探索高维数据的非线性降维算法.它将多维数据映射到适合于人类观察的两个或多个维度. t-SNE主要包括两个步骤:第一.t-SNE构建一个高维对象之间的 ...

  2. 人工智障学习笔记——机器学习(12)LDA降维

    一.概念 LDA:Linear Discriminant Analysis (也有叫做Fisher Linear Discriminant).与PCA一样,是一种线性降维算法.不同于PCA只会选择数据 ...

  3. 人工智障学习笔记——机器学习(11)PCA降维

    一.概念 Principal Component Analysis(PCA):主成分分析法,是最常用的线性降维方法,它的目标是通过某种线性投影,将高维的数据映射到低维的空间中表示,即把原先的n个特征用 ...

  4. 人工智障学习笔记——机器学习(5)朴素贝叶斯

    一.概念 1.1贝叶斯定理:假设H[1],H[2]-,H[n]互斥且构成一个完全事件,已知它们的概率P(H[i]),i=1,2,-,n,现观察到某事件A与H[1],H[2]-,H[n]相伴随机出现,且 ...

  5. 人工智障学习笔记——机器学习(4)支持向量机

    一.概念 支持向量机(Support Vector Machine),简称SVM.是常见的一种判别方法.在机器学习领域,是一个有监督的学习模型,通常用来进行模式识别.分类以及回归分析. SVM的主要思 ...

  6. 人工智障学习笔记——机器学习(1)特征工程

    一.概念 学习过Machine Learning的一定听过这句话:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已. 所谓特征工程,做的就是[ 最大限度地从原始数据中提取特征点以供算法 ...

  7. 人工智障学习笔记——机器学习(9)最大期望算法

    一.概念 最大期望算法,也就是著名的em算法,他起源于一条dog 没错,就是这个 好吧不扯蛋了,em算法(Expectation Maximization Algorithm,又译期望最大化算法),是 ...

  8. 人工智障学习笔记——机器学习(3)决策树

    一.概念 决策树(Decision Tree)是一种十分常用的分类方法.也是监督学习的一种,是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可 ...

  9. 人工智障学习笔记——机器学习(8)K均值聚类

    一.概念 K均值聚类(K-means)是硬聚类算法,是典型的基于原型的目标函数聚类方法的代表,它是数据点到原型的某种距离作为优化的目标函数,利用函数求极值的方法得到迭代运算的调整规则.K-means算 ...

最新文章

  1. 空值排序(oracle/sqlserver)
  2. jboss7 Java API for RESTful Web Services (JAX-RS) 官方文档
  3. leetcode 刷题 119. 杨辉三角II
  4. powderdesinger显示中英文表名
  5. AutoFDO自动反馈式优化
  6. opencv-api draw
  7. 【异常:Could not resolve】react-native run-android
  8. 了解GDAL的图像处理/Python
  9. 用栈实现计算器c语言报告,利用栈实现c语言计算器
  10. 计算机操作系统期末考试试题及答案,计算机操作系统期末复习题(带答案)
  11. 计算机文件右击怎么显示打开方式,怎么删除Win10文件右键菜单打开方式中已卸载程序选项?...
  12. blos硬盘启动台式计算机,惠普台式机bios设置硬盘启动操作步骤
  13. 关于word2vec词向量化
  14. SSM框架中 出现的406 (Not Acceptable)
  15. C++实践 极简版本贪吃蛇小游戏
  16. 视频数据集 | 视频动作识别video recognition常用数据集整理
  17. uniapp获取用户信息(登录及个人中心页面的实现)
  18. 关于freemarker(网上收集资料)
  19. java实现高德地图app,Android 高德地图入门demo,最新高德地图实现方法,附源码及apk...
  20. 求二维整数数组中最大子数组的和(结对作业)

热门文章

  1. c语言程序设计报告调试分析,C语言程序设计情况分析报告资料.doc
  2. java项目 导出_Java项目的导入和导出
  3. java程序算法实例_java编程算法经典案例
  4. openwrt 19 overlay 空间不足_【邯郸】2020年度市级科技企业孵化器和众创空间拟认定名单公示...
  5. 学习OpenVINO笔记之Inference Engine Device Query API
  6. [Matlab] 符号积分求对流扩散方程在给定初始条件下的一维解
  7. emacs python 缩进问题_Emacs python mode的问题
  8. 计算机图形数学知识,平面----计算机图形学的基础几何知识
  9. 打不开mysql exe文件怎么打开文件_exe文件打不开怎么办?
  10. python元素分类_Python练习 - 元素分类