目录
1 聚类
1.1 K-均值算法(K-Means)
1.2 层次聚类(Hierarchical Clustering)
1.3 基于密度聚类Mean Shift
1.4 基于密度聚类DBSCAN
1.5 高斯混合模型(GMM)与EM
1.6 基于图论聚类
2 降维
2.1 主成分分析(Principal Component Analysis,PCA)
2.2 SVD矩阵分解(Singular Value Decomposition)
2.3 独立成分分析(ICA)
2.4 t-SNE
3 自编码器(Auto-encoder)
无监督学习常常被用于数据挖掘,用于在大量无标签数据中发现些什么。它的训练数据是无标签的,训练目标是能对观察值进行分类或区分等。例如无监督学习应该能在不给任何额外提示的情况下,仅依据所有“猫”的图片的特征,将“猫”的图片从大量的各种各样的图片中将区分出来。
聚类算法就是将一堆数据进行处理,根据它们的相似性对数据进行聚类。
聚类,就像回归一样,有时候人们描述的是一类问题,有时候描述的是一类算法。聚类算法通常按照中心点或者分层的方式对输入数据进行归并。所以的聚类算法都试图找到数据的内在结构,以便按照最大的共同点将数据进行归类。常见的聚类算法包括 k-Means算法以及期望最大化算法(Expectation Maximization, EM)。
聚类算法有很多种,具体如下:中心聚类、关联聚类、密度聚类、概率聚类、降维、神经网络/深度学习。
K-means算法是硬聚类算法,是典型的基于原型的目标函数聚类方法的代表,它是数据点到原型的某种距离作为优化的目标函数,利用函数求极值的方法得到迭代运算的调整规则。K-means算法以欧式距离作为相似度测度,它是求对应某一初始聚类中心向量V最优分类,使得评价指标J最小。算法采用误差平方和准则函数作为聚类准则函数。K-means算法是很典型的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。
通常,人们根据样本间的某种距离或者相似性来定义聚类,即把相似的(或距离近的)样本聚为同一类,而把不相似的(或距离远的)样本归在其他类。
INPUT:
K(number of clusters)
Training set{x1,x2,x3,....xn} (xi belongs to R^n)
OUTPUT:
K个聚类中心
算法工作原理摘要:
通读本算法,可以发现k-means对聚心初始值非常敏感,如果初始情况不好会震荡的。这里可以采取一些措施预判聚心大致要在哪个位置,然后直接将其初始化。
另外,关于收敛的判断,可以采取多种方法。比如使用代价函数,或者F-Measure和信息熵方法。
K-means优缺点分析:
K-means:https://blog.csdn.net/weixin_39910711/article/details/102373311
顾名思义,层次聚类就是一层一层地进行聚类。既可以由下向上对小的类别进行聚合(凝聚法),也可以由上向下对大的类别进行分割(分裂法)。在应用中,使用较多的是凝聚法。
INPUT:training_set D,聚类数目或者某个条件(一般是样本距离的阈值)
OUTPUT:聚类结果
凝聚法:
跟竞赛中经常出现的并查集问题略相似,凝聚法指的是先将每个样本当做一个类簇,然后依据某种规则合并这些初始的类簇,直到达到某种条件或者减少到设定的簇数。
在算法迭代中每次均选取类簇距离最小的两个类簇进行合并。关于类簇距离的计算表示方法主要有以下几种:
(1)取两个类中距离最小的两个样本的距离作为两个集合的距离
(2)取两个类中距离最大的两个样本的距离作为两个集合的距离
(3)计算两个集合中每两两点的距离并取平均值,这种方法要略费时
(4)比(3)轻松一些,取这些两两点距的中位数
(5)求每个集合中心点,然后以中心点代表集合来计算集合距离
(6)......
迭代会在簇数减少到设定数量时结束,当然,如果设定了阈值f,那么当存在两个距离小于f的集合时则会继续迭代直到不存在这样的两个集合。
分裂法:
首先将所有样本归类到一个簇,然后依据某种规则逐渐分裂,直到达到某种条件或者增加到设定的簇数。
层次聚类和K-means作比较:
(1)K-means时间复杂度为O(N),而层次聚类时间复杂度为O(N^2),所以分层聚类不能很好地处理大批量数据,而k-means可以。
(2)K-means不允许嘈杂数据,而层次聚类可以直接使用嘈杂数据集进行聚类
(3)当聚类形状为超球形(如2D圆形,3D球形)时,k-means聚类效果更好。
层次聚类 Hierarchical Clustering:https://blog.csdn.net/weixin_39910711/article/details/104547041
基于密度的聚类——DBSCAN聚类算法:https://blog.csdn.net/weixin_39910711/article/details/104574296
主成分分析是利用正交变换将一些列可能相关数据转换为线性无关数据,从而找到主成分。PCA方法最著名的应用应该是在人脸识别中特征提取及数据降维。
PCA主要用于简单学习与可视化中数据压缩、简化。但是PCA有一定的局限性,它需要你拥有特定领域的相关知识。对噪音比较多的数据并不适用。
也叫奇异值分解(Singular Value Decomposition),是线性代数中一种重要的矩阵分解,是矩阵分析中正规矩阵酉对角化的推广。在信号处理、统计学等领域有重要应用。SVD矩阵是一个复杂的实复负数矩阵,给定一个m行、n列的矩阵M,那么M矩阵可以分解为M = UΣV。U和V是酉矩阵,Σ为对角阵。
PCA实际上就是一个简化版本的SVD分解。在计算机视觉领域,第一个脸部识别算法就是基于PCA与SVD的,用特征对脸部进行特征表示,然后降维、最后进行面部匹配。尽管现在面部识别方法复杂,但是基本原理还是类似的。
独立成分分析(Independent Component Analysis,ICA)是一门统计技术,用于发现存在于随机变量下的隐性因素。ICA为给观测数据定义了一个生成模型。在这个模型中,其认为数据变量是由隐性变量,经一个混合系统线性混合而成,这个混合系统未知。并且假设潜在因素属于非高斯分布、并且相互独立,称之为可观测数据的独立成分。
ICA与PCA相关,但它在发现潜在因素方面效果良好。它可以应用在数字图像、档文数据库、经济指标、心里测量等。
t-sne是流形学习的一种,属于非线性降维的一种,主要是保证高维空间中相似的数据点在低维空间中尽量挨得近。是从sne演化而来,sne中用高斯分布衡量高维和地位空间数据点之间的相似性,t-sne主要是为了解决sne中的“拥挤问题”,用t分布定义低维空间低维空间中点的相似性。但是t-sne不能算是一种通用的降维方法,时间复杂度也挺高的。
t-SNE 背后的思想是找到数据的一个二维表示,尽可能地保持数据点之间的距离。t-SNE 首先给出每个数据点的随机二维表示,然后尝试让在原始特征空间中距离较近的点更加靠近,原始特征空间中相距较远的点更加远离。t-SNE 重点关注距离较近的点,而不是保持距离较远的点之间的距离。换句话说,它试图保存那些表示哪些点比较靠近的信息。
t-SNE原理与推导:https://blog.csdn.net/scott198510/article/details/76099700
t-SNE和PCA介绍:https://www.jianshu.com/p/8c20b975a174
非负矩阵分解(NMF)是另一种无监督学习算法,其目的在于提取有用的特征。它的工作原理类似于 PCA,也可以用于降维。
与 PCA 相同,我们试图将每个数据点写成一些分量的加权求和。但在 PCA 中,我们想要的是正交分量,并且能够解释尽可能多的数据方差;而在 NMF 中,我们希望分量和系数均为非负,也就是说,我们希望分量和系数都大于或等于 0。因此,这种方法只能应用于每个特征都是非负的数据,因为非负分量的非负求和不可能变为负值。
将数据分解成非负加权求和的这个过程,对由多个独立源相加(或叠加)创建而成的数据特别有用,比如多人说话的音轨或包含多种乐器的音乐。在这种情况下,NMF 可以识别出组成合成数据的原始分量。总的来说,与 PCA 相比,NMF 得到的分量更容易解释,因为负的分量和系数可能会导致难以解释的抵消效应。
自编码器(Auto-encoder)(其实相当于一个神经网络,但这里不用神经网络的结构来解读)做的事情很有意思,它的基本思想就是对输入(input)编码(encode)后得到一个隐含的表征再解码(decode)并输出(output),这么看起来不是在绕圈圈吗?
这张图里的关键是中间的隐含表征(latent representation)。
自编码器的两个主要应用是降噪(denoising)和稀疏化数据(sparse)。
什么叫降噪和降维呢?
让我们用这张图来理解,图中有三层,输入、隐含和输出层,每一层的一个圈圈代表一个特征。输入层经过编码变成了中间的隐含层,隐含层解码后得到后面的输出层。可以看到,隐含层只有输入层的一半,原本的6个特征变成了3个特征,这意味着什么?如果要来表示小明的身材,输入的六个特征分别为“肉多”、“体脂率高”、“质量大”、“个子不高”、“总是心情好”、“喜欢笑”而隐含层的三个特征为“肉多”、“体脂率高”、“个子不高”,这个自编码器就是用来降噪的。
噪音(noise)指的是影响我们算法模型的不相关因素;降噪,就是用特定的方法去掉这些不相关的因素。
如果要来表示小明的主要特征,输入的六个特征还是“肉多”、“体脂率高”、“质量大”、“个子不高”、“心情好”、“喜欢看剧”而隐含层的特征变成了“胖”、“矮”和“开朗”,这个自编码器就是稀疏自编码器。
稀疏化数据,就是指将密集的浅层含义的数据(比如说:肉多这样的外在表现)表示为稀疏的更抽象的数据(将外在表现提炼为总结性的特征,比如:胖)。
完成上述两个任务,都需要构建合适的损失函数(loss function)。
隐含层的层数是可以增加的,每一层都可以作为我们需要的特征,多层的结构能够让自编码器对特征的分析更加准确和稳定,而如果这个层数再增加一些(很多很多很多层)。
(省略了后面的解码步骤)
它就是堆叠/卷积自编码器(Convolution autoencoder),可以说是一种卷积神经网络(Convolutional neural network,CNN)。
而回到最开始的图,我们刚才一直在说的是隐含层的意义和变化,那最后的输出一点用都没有吗?
这里不得不提一下生成式对抗网络(Generative adversarial networks,GAN)。
生成式对抗网络的精髓就是两个网络,一个网络生成图片,一个网络辨别图片是不是真实的,当生成图片的网络能够“欺骗”识别图片的网络的时候,我们就得到了一个能够生成足够真实图片的网络。
这是一个很有趣的模型,机器根据已有的实物创造了实际中不存在的事物,下图是从真实图片转化为生成图片的过程。
这个思想能够实现一些很神奇的事情,比如:将文字变成图像,用对抗网络来构造药品和疾病的对抗等(https://www.jiqizhixin.com/articles/2017-08-23-6)
而对抗自编码器(Adversarial Autoencoder,AAE) ,使用了最近提出的生成对抗网络(GAN),通过任意先验分布与VAE隐藏代码向量的聚合后验匹配,来实现变分推理。
简单地说,就是它把GAN和自编码器组合成了一个具有生成能力的模型,也就是对抗自编码器。AAE能够在监督、无监督的条件下,都展现出不错的识别和生成能力。
监督学习、无监督学习、强化学习,机器学习的常用算法总结:http://www.360doc.com/content/19/0211/15/16619343_814245361.shtml
从无监督学习说起:算法模型有哪几种?:http://www.woshipm.com/pmd/1082173.html