前言:

最近做的任务与降维分类有关,于是乎就将机器学习中的“四大元老”——降维、聚类、分类、回归给弄混了。。。。。因此,用了很长时间去理解这“四大元老”的具体概念。并借此机会,趁热打铁得记录一下。

1.机器学习

什么是机器学习?

机器学习是一帮科学家想让计算机像人一样思考所研发出来的一套计算机理论。它包含了多种算法,涉及到概率论,数理统计、线性代数、矩阵论等多个学科。

机器学习已经深入到了我们生活的方方面面,为我们提供了很多便捷。比如:我们的邮箱会对我们所有到的邮件进行筛选,将垃圾邮件放入垃圾箱;我们所使用的购物软件,会按照我们平时的购物习惯,商品浏览信息等,对我们进行好物推荐;我们浏览的网页,浏览器会根据我们经常关注的信息,为我们推荐新闻、娱乐、八卦等各种信息……
日常生活中,机器学习的应用,第一个提到的就是最具代表性的公司:Google,他们所研发的Google Now,Google Photos都是基于机器学习的产物;在百度,图片识别也应用到了机器学习中的视觉处理系统;与此同时,各种各样的企业都开始尝试把自己的产品往机器学习上靠拢,比如金融公司的汇率预测,股票涨跌,房地产公司的房价预测等等。

实现机器学习的方法就是我们所称的“算法”。目前所有的机器学习算法大概可以被分为4~5类。
(1)监督学习
如果在学习过程中,我们不断的向计算机提供数据和这些数据所对应的值(这里的“值”就是“标签”,label),比如给计算机看猫和狗的照片,告诉计算机哪些照片是猫,哪些照片是狗,然后通过这种指引的方式,让计算机去学习如何将照片对应上照片所代表的物体(猫或狗),从而再遇到照片时,它能自己判断照片是猫还是狗。这就叫“监督学习(supervised learning)”。这里的“照片”就是我们给计算机提供的数据;这里的“猫或狗”,就是这些数据所对应的值,也就是标签。

监督学习中的“标签”就是起到一个监督的作用。预测房屋的价格,股票的涨停就可以使用监督学习实现。

(2)非监督学习
如果同样在上述的学习过程中,我们只给计算机提供猫和狗的照片,并不告诉计算机哪些照片是猫,哪些照片是狗,让计算机自己去判断和分类,总结出这两种类型照片的不同之处。这就是“非监督学习(un-supervised learning)”。

非监督学习中,不用提供数据所对应的标签信息,计算机通过观察各种数据之间的特性,会发现这些特性背后的规律,这些规律也就是非监督方法所学习到的东西。

(3)半监督学习
有一种方法综合了监督学习和非监督学习的特征,这种方法叫“半监督学习(semi-supervised learning)”。它主要考虑如何使用少量的 有标签样本 和 大量的没有标签的样本 进行训练和分类。

(4)强化学习
在规划机器人的行为准则方面,一种机器学习方法叫做“强化学习(reinforcement learning)”。就是把计算机丢到一个对于它来说是一个完全陌生的环境 或者 让它完成一项从未接触过的任务,它会尝试各种手段,最后让自己成功适应这一个陌生环境。Google开发的AlphaGO就是应用了这一种学习方式。

(5)遗传算法
有一种和强化学习类似的学习方法,叫做“遗传算法(Genetic algorithm)”。这种方法是模拟我们所熟知的进化理论,淘汰弱者,适者生存。通过这种淘汰机制去选择最优的设计或模型。比如,开发者开发计算机学会玩“超级玛丽”,最开始的玛丽1代可能不久就牺牲了,不过系统会基于1代的玛丽随机生成玛丽2代,然后再保存这些代中最厉害的玛丽,淘汰掉比较弱的玛丽。然后再次基于强者“繁衍和变异”,生成更强的玛丽。这就是遗传算法的基本思想。

今天我主要总结的概念是:降维、聚类、分类、回归。上面我们大概了解了机器学习的相关内容。我们来看看这“四大元老”之间的关系。
话不多说,请看图:
四大元老关系图
下图简要说明了四者:
算法简介

2.降维

什么是降维?

试想一下现在有n个对象a1,a2,……,an,每个对象有多个属性x1,x2,……,xm。当我们用矩阵表示这些对象时,便是一个An×m的矩阵。举个实例:假设我们有5只猫,每只猫的毛色、体型、身高、体重、年龄、性别等特征各不相同。这里的猫就是我们的对象;“猫”这个称呼是这个对象的标签;毛色、体型、体重等特征就是我们所说的对象的属性。在实际的图像识别过程中,我们可能有大批数量的猫、狗的图片,所需的对象的属性也是多个,这些属性的个数就是我们所说的维数。维数越多,信息量数据量越大,占用的磁盘空间和内存较多。实际上我们在实际中有时候并用不到这么多的信息,所以就需要降维。
降维是试图压缩维度,并尽可能地保留分布信息。我们可以将其视为数据压缩,或者特征选择。
在实际生活中,我们对样本做数据处理,图像处理等操作时,希望模型的精度比较高,或者说泛化误差率较小,那么我们希样本的采样密度足够大(密采样)。首先我们要明白的是,维数越高,样本在空间上分布得越稀疏(若不明白,请看图:二维降到一维时,样本点的密度增加。可见更高维度的样本点之间密度更稀疏)。
二维降到一维图
降维在图像处理中叫图像压缩、特征提取。重在最优分区(可分离性);
降维在模式识别中叫做特征选择。重在最有描述(保真性)。

为什么要降维?

(1)维数越多,信息量越大,数据冗余,为了得到我们想要的信息,或者方便数据处理等操作,我们就需要进行降维。
(2)数据维度高,我们将无法借助自己领域的知识无法构建有效特征。
(3)维度超过三维时,人便无法肉眼观察特征。降维后,我们便可以在低维(一维、二维或三维)空间中可视化高维数据。
(4)克服维数灾难。通过某种数据变换,将原始高维属性空间转变为一个低维“子空间”,在这个子空间中,样本密度大幅度提高,距离计算(也是样本间相似度计算,欧几里得距离等来刻画相似度)也将变得容易;降维要保持原始空间中样本之间的距离在低维空间中得以保持,且在低维子空间中更容易学习。

PS:维数灾难
维数灾难是在给定精度下,准确的对某些变量的函数进行估计,所需的样本数量会随着样本的位数的增加而成指数增长。
假设所有的样本在其属性上归一化,对于 δ \delta δ=0.001,仅考虑单个属性,则需要1000各样本点平均分布在其取值范围内,可以保证所有样本在其附近0.001范围内总能找到一个训练样本。但是如果维数增大时,假定属性维数为20,若满足密采样的要求,则至少需要有 ( 1 0 3 ) 20 = 1 0 60 (10^3)^{20}=10^{60} (103)20=1060个样本。
高维情况下出现的样本稀疏、距离计算困难等问题,就是机器学习中面临的严重障碍——“维数灾难”。

降维的意义

(1)克服维数灾难,获取本质特征,节省存储空间,去除无用的噪声,实现数据可视化。
(2)在原始的高维空间中,包含有冗余的信息以及噪声信息,通过降维减少冗余信息所造成的误差,提高识别的精度,通过降维算法也能寻找数据内部的本质结构特征。

降维的方法

(1)线性降维方法
  PCA主成分分析
  LDA判别分析
  MDS多尺度分析
(2)非线性降维方法
  流形学习
  ISOMAP等距特征映射
  LLE局部线性嵌入
总结什么时候用哪种降维技术
降维技术
缺少值比率(Missing Value Ratio):如果数据集缺少的值太多,我们使用这种方法来减少变量的数量。我们可以删除其中有大量缺失值的变量.

低方差过滤器(Low Variance Filter):我们应用这种方法来识别和删除数据集中的常量变量。目标变量不受低方差变量的过度影响,因此可以安全地删除这些变量。

高相关滤波器(High Correlation filter):一对具有高相关性的变量增加了数据集中的多重共线性。因此,我们可以使用这种技术找到高度相关的特征并相应地删除它们。

随机森林(Random Forest):这是最常用的技术之一,它告诉我们数据集中存在的每个特性的重要性。我们可以发现每个特征的重要性,并保持最顶层的特征,从而减少维度。

后向特征消除(Backward feature elimination)和前向特征选择(Forward feature selection)技术都需要大量的计算时间,因此通常用于较小的数据集。

因素分析(Factor analysis):这项技术最适合我们有高度相关的变量集的情况。它根据变量之间的相关性将变量分为不同的组,并用一个因子表示每个组。

主成分分析(Principal component analysis):这是处理线性数据最广泛使用的技术之一。它将数据分为一组组件,这些组件试图解释尽可能多的差异。

独立分量分析(Independent Component analysis):我们可以用独立分量分析将数据转换成独立分量,用较少的分量描述数据。

等值线图(ISOMAP):当数据是强非线性时,我们使用这种方法。

T-SNE:当数据是强非线性时,这种技术也能很好地工作。它对可视化效果也非常好。

UMAP:这种技术对高维数据很有效。它的运行时间比T-SNE短。

3.聚类

什么是聚类

聚类尝试在没有训练的条件下,对一些没有标签的数据进行归纳分类。根据相似性对数据进行分组,以便对数据进行概括。没有标签是指我们事先不知道任何样本的类别标号,希望通过某种算法把这一组位置类别的样本划分成若干类别,聚类的时候,并不关心某一类是什么,实现的只是将相似的东西聚在一起。

总的来说,聚类就是对大量未知标注的数据集,按数据内在的相似性将数据集划分为多个类别,使类别内的数据相似度较大而类别间的数据相似度较小。是无监督的分类方式。

聚类的目标

同一类中,类内对象是相似的(或是相关的);不同类中的对象是不同的(不相关的)。

聚类方法好坏的判定:

(1)产生高质量的聚类结果——簇。簇内有高相似性,簇间有低的相似性。
(2)取决于聚类方法采用的相似性评估方法以及该方法的具体实现。
(3)取决于聚类方法能否发现某些/所有的隐含模式。

常见的聚类算法

(1)划分聚类:K-means算法、K-medoids算法、K-pototypes算法、CLARANS算法;
(2)层次聚类:BIRCH算法、CURE算法;
(3)密度聚类:DBSCAN算法、OPTICS算法、DENCLUE算法
(4)网格聚类:STING算法、CLIQUE算法、WAVE-CLUSTER算法
(5)混合聚类:高斯混合模型、CLIQUE(综合密度和网格的算法)
聚类算法对比

4.分类

什么是分类

在机器学习中,分类属于监督分类的范畴,根据一些给定的已知类别的样本(即有标签的数据),使计算机能够未知类别的样本进行分类。分类要求必须事先明确知道各类别的信息,并且是一种对离散型随机变量建模或预测的监督学习算法。

分类有以下几种说法,但表达意思是相同的:

  • 分类(classification):分类任务就是通过学习得到一个目标函数f,把每个属性集x映射到一个预先定义的类别标号中去。
  • 分类是根据一些给定的已知类别标号的样本,训练某种学习机器(即得到某种函数),使它能够对未知类别的样本进行分类。这属于supervised learning(监督学习)。
  • 分类:通过学习来得到样本属性与类标号之间的关系。用自己的话说,就是我们根据已知的一些样本(包括这些样本的类别label与属性)来得到分类模型(即得到样本属性与label之间的函数),然后通过这个目标函数来对只包含属性的样本数据进行分类。
分类算法的局限

分类作为一种监督学习,要求必须事先明确指导各个类别的信息,并且所有待分类样本都要有一个类别与之对应。但是很多时候这些条件并不能满足,尤其是在处理海量数据时,如果通过预处理使得数据满足分类算法的要求,代价会非常大,这时候可以考虑使用聚类算法。

聚类与分类的区别

首先呢,聚类是非监督学习,分类是监督学习。二者的本质区别就是对于聚类来说,是不知道样本的类别信息的,只能凭借样本在特征空间的分布来分析样本的属性;而对于分类来说,知道样本的类别信息是必要的,根据已知训练样本的类别信息,让计算机自己学着知道每个类别的特点,然后对未知类别的数据进行分类。

常用的分类算法
  • 决策树分类法
  • 基于规则的分类器
  • 朴素的贝叶斯分类算法(native Bayesian classifier)
  • 基于支持向量机(SVM)的分类器
  • 神经网络法
  • k-最邻近法(K-nearest neighbor,KNN)
  • 模糊分类法

5.回归

什么是回归

与分类相似,回归也是监督学习的一种算法,因此也需要先向计算机输入数据的训练样本让计算机学习。与分类的区别是:
  回归方法是一种对数值型连续随机变量进行预测和建模的监督学习算法,产生的结果一般也是数值型的。使用案例一般包括房价预测、股票走势或测试成绩等连续变化的案例。

回归任务的特点是标注的数据集具有数值型的目标变量。也就是说,每一个观察样本都有一个数值型的标注真值以监督算法。

* 常用的回归算法*
  • (1)线性回归
    线性回归是处理回归任务最常用的算法之一。该算法的形式十分简单,它期望使用一个超平面拟合数据集(只有两个变量的时候就是一条直线)。如果数据集中的变量存在线性关系,那么其就能拟合地非常好。

    优点:线性回归的理解与解释都十分直观,并且还能通过正则化来降低过拟合的风险。另外,线性模型很容易使用随机梯度下降和新数据更新模型权重。

    缺点:线性回归在变量是非线性关系的时候表现很差。并且其也不够灵活以捕捉更复杂的模式,添加正确的交互项或使用多项式很困难并需要大量时间。
    Python实现

  • (2)回归树(集成方法)
    回归树(决策树的一种)通过将数据集重复分割为不同的分支而实现分层学习,分割的标准是最大化每一次分离的信息增益。这种分支结构让回归树很自然地学习到非线性关系。

    集成方法,如随机森林(RF)或梯度提升树(GBM)则组合了许多独立训练的树。这种算法的主要思想就是组合多个弱学习算法而成为一种强学习算法,不过这里并不会具体地展开。在实践中 RF 通常很容易有出色的表现,而 GBM 则更难调参,不过通常梯度提升树具有更高的性能上限。

    优点:决策树能学习非线性关系,对异常值也具有很强的鲁棒性。集成学习在实践中表现非常好,其经常赢得许多经典的(非深度学习)机器学习竞赛。

    缺点:无约束的,单棵树很容易过拟合,因为单棵树可以保留分支(不剪枝),并直到其记住了训练数据。集成方法可以削弱这一缺点的影响。
    随机森林Python实现
    梯度提升树Python实现

  • (3)深度学习
    深度学习是指能学习极其复杂模式的多层神经网络。该算法使用在输入层和输出层之间的隐藏层对数据的中间表征建模,这也是其他算法很难学到的部分。

    深度学习还有其他几个重要的机制,如卷积和 drop-out 等,这些机制令该算法能有效地学习到高维数据。然而深度学习相对于其他算法需要更多的数据,因为其有更大数量级的参数需要估计。

    优点:深度学习是目前某些领域最先进的技术,如计算机视觉和语音识别等。深度神经网络在图像、音频和文本等数据上表现优异,并且该算法也很容易对新数据使用反向传播算法更新模型参数。它们的架构(即层级的数量和结构)能够适应于多种问题,并且隐藏层也减少了算法对特征工程的依赖。

    缺点:深度学习算法通常不适合作为通用目的的算法,因为其需要大量的数据。实际上,深度学习通常在经典机器学习问题上并没有集成方法表现得好。另外,其在训练上是计算密集型的,所以这就需要更富经验的人进行调参(即设置架构和超参数)以减少训练时间。
    Python资源

  • (4)最近邻算法
    最近邻算法是「基于实例的」,这就意味着其需要保留每一个训练样本观察值。最近邻算法通过搜寻最相似的训练样本来预测新观察样本的值。

    而这种算法是内存密集型,对高维数据的处理效果并不是很好,并且还需要高效的距离函数来度量和计算相似度。在实践中,基本上使用正则化的回归或树型集成方法是最好的选择。

6.简单的判别方法

给定一个样本特征,我们希望预测其对应的属性值,如果是离散的,那么就是分类问题。反之,如果是连续的数据,就是回归问题。

给定一组样本特征,我们没有对应的属性值,而是想发觉这组样本的空间分布,比如分析哪些样本靠的更近,那些样本之间里的很远,这就是聚类问题。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐