zoukankan      html  css  js  c++  java
  • 聊聊机器学习中的无监督学习

    机器学习分为监督式机器学习、无监督式机器学习和半监督式机器学习。其划分的标准是训练样本是否包含人为标注的结果。

    (1)监督式机器学习:从给定的训练数据集中学习出一个函数,当新的数据到来时,可以根据这个函数预测结果。监督学习的训练集要求是包括输入和输出,也可以说是特征和目标。训练集中的目标是由人标注的。常见的监督学习算法包括回归分析和统计分类。 
    (2)无监督式机器学习:与监督学习相比,训练集没有人为标注的结果。常见的无监督学习算法有聚类。 
    (3)半监督式机器学习:是监督学习和无监督学习相结合的一种学习方法。它主要考虑如何利用少量的样本标注和大量的未标注样本进行训练和分类的问题。半监督学习对于减少标注代价,提高学习机器性能具有非常大的实际意义。 

    今天,就来聊聊无监督式机器学习:

    首先从大家熟悉的聚类分析开始吧,聚类分析是无监督式机器学习的一个典型应用,也是探索性数据挖掘中的一种常用方法。

    利用聚类分析能够将看似无序的对象进行分组、归类,以达到更好地理解研究对象的目的。聚类样本要求组内对象相似性较高,组间对象相似性较低。

    聚类分析的流程大致可以分为四步,如下图所示。
    首先,需要对数据集进行预处理,通常包括数据降维、特征选择或抽取等;
    第二步,根据数据集的特点进行聚类算法的设计或选择;
    第三步,聚类算法的测试与评估;
    第四步,聚类结果的展示与解释,通过聚类分析从数据集中获得有价值的知识。

    1.png

    http://attach.dataguru.cn/attachments/forum/201405/18/201159jf01073j3rsjffr3.png

    其中,聚类算法设计主要包括:设计样本相似性度量标准及聚类过程的终止条件、聚类数目的选取等。通常的做法是先抽样一小批量的样本,来进行算法设计、测试、同时能够对数据的概貌有一定的认识,得到比较好的效果后在推广到全量的样本上进行分析实验。

    具体的聚类分析方法有很多,在此就不做介绍了。

    接下来聊聊无监督式机器学习的第二大应用方向:Autoencoder,中文亦成自动编码器。

    做机器学习时首先会遇到的问题就是特征选取的问题,如何选取出对原始数据具有良好表达能力的特征成为机器学习实践过程中一个让人头疼的问题。如256*256的灰度图对应于一个 65,000 的输入向量,换句话说,我们要解决一个 65,000 维空间上的问题。高维数的数据不仅需要收集更多的样本数据,同时需要更多的计算资源和存储资源。很明显,一副图像并不需要如此过的原始特征来进行分类,我们可以进行人工的特征选取来对原始特征进行降维。但这样不仅需要研究人员对原始数据进行长时间的观察研究,很多起到作用的特征并不容易被发现,同时,特征选取的推广性变得很差。

    那么,有没有办法能够从原始信息中抽取中信息量最大的特征呢,答案是肯定的,通过一种无监督式机器学习方法:Autoencoder,即可在一定程度上解决我们的问题。

    Autoencoder 是一种无监督机器学习技术,使用了一个神经网络来产生一个高维输入的低维表示。传统的维度下降依赖于线性方法,如 PCA,找出高维数据中最大的方差的方向。通过选择这些方向,PCA 本质上刻画了包含了最终信息的方向。所以我们可以找到一个较小的维度的数目来作为降维的结果。然而,PCA 方法的线性性也是导致自身可以抽取出的特征维度类型上的很大限制。Autoencoder通过引入神经网络天生的非线性性克服这些限制。

    Autoencoder包含两个主要的部分,encoder 和 decoder 网络(编码网络和解码网络)。encoder 网络在训练和部署时候使用,而 decoder 网络只在训练的时候用。encoder 网络的作用是用来发现给定数据的压缩表示。

    其基本结构:

    2.jpg

    http://img.my.csdn.net/uploads/201304/09/1365439745_1862.jpg

    Autoencoder结构图

    我们将input输入一个encoder编码器,就会得到一个code,这个code也就是输入的一个表示,那么我们怎么知道这个code表示的就是input呢?我们加一个decoder解码器,这时候decoder就会输出一个信息,那么如果输出的这个信息和一开始的输入信号input是很像的(理想情况下就是一样的),那很明显,我们就有理由相信这个code是靠谱的。所以,我们就通过调整encoder和decoder的参数,使得重构误差最小,这时候我们就得到了输入input信号的第一个表示了,也就是编码code了。因为是无标签数据,所以误差的来源就是直接重构后与原输入相比得到。

    http://img.my.csdn.net/uploads/201304/09/1365439780_9725.jpg

    3.jpg

    stackedautoencoders:多个autoencoder的级联表示

    通常,为了获得原始数据更为抽象的特征,我们会将多个autoencoder级联,构成stacked autoencoders。

    stacked autoencoders具有更强大的表达能力及深度网络的所有优点,第一层可以学习到一阶特征,第二层可以学到二阶特征等等,对于图像而言,第一层可能学习到边,第二层可能学习到如何去组合边形成轮廓、点,更高层可能学习到更形象且更有意义的特征,学到的特征方便我们更好地处理图像,比如对图像分类、检索等等。

    如果在autoencoder的输出项上加一个正则项。则得到了Sparse AutoEncoder稀疏自动编码器,其是一种在图像处理和NLP领域一种非常好的降维方法。如SVM处理文本分类时,使用TF_IDF 对原始文本进行编码,这里TF_IDF 可以看作一种人工的编码器,能够取得很好的效果。

    那么,AutoEncoder等这类自动编码方法和传统的线性降维方法有什么优势呢?

    以AutoEncoder的 2 维表示和 PCA 的 2 维表示在知名图像数据集MNIST 手写数字数据集上的表现为例:

    //upload-images.jianshu.io/upload_images/42741-74f0cbe4fe91b8af.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240

    4.png

    AutoEncoder右,PCA 左

    可以看到,AutoEncoder的降维结果相对于PCA的结果更具有可区分性,也就是说AutoEncoder编码降维的结果对原始数据更具表达性、包含更多的原始信息。

    Autoencoder是无监督式机器学习的一个新方向,对于机器学习在复杂问题中的应用提供了非常好的数据建模方法。

    无监督式机器学习的两大类问题:聚类问题和Autoencoder问题,聚类问题解决的其实是模糊分类的问题,针对复杂数据的特征构造、选取、降维及原始数据的压缩表示方面,Autoencoder是一个很好的切入点。

    本文同时也在知加(zhijia.io)发表。

    以上图片,均出自其他博客或者论文,在此一一谢过。

  • 相关阅读:
    离线计算框架 MapReduce
    Hadoop概述
    Linux之rpm/yum
    Linux之磁盘分区
    利用CMD合并多个VOB文件
    android中的simple_list_item
    jquery中的跨域-jsonp格式
    安卓代码中设置ImageView属性
    Android中常用的Adapter的种类和用法
    C#导入excel文件到oracle的方法
  • 原文地址:https://www.cnblogs.com/cl1024cl/p/6205019.html
Copyright © 2011-2022 走看看