机器学习--无监督学习(一)

一、无监督学习(unsupervised learning)

(一) 聚类(Clustering)

聚类是一种典型的无监督学习,是把物理对象或抽象对象的集合分组为由彼此类似的对象组成的多个类的分析过程。
根据给出的数据集(已经做出标记labels)(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m)),学习出假设函数,对数据集进行决策分界。


image.png

相反无监督学习中并未给出具体的标记y(m),仅有数据集x(1),x(2),...,x(m),算法对同一类的进行划分。


image.png

对于聚类在实际的应用中亦是非常广泛的,如:市场细分(Market segmentation)、社交圈分析(social network analysis)、集群计算(organize computing clusters)、天体数据分析(astronomical data analysis)
image.png

在聚类分析中,我们希望能有一种算法能够自动的将相同元素分为紧密关系的子集或簇,K均值算法(K-mean)为最广泛的一种算法。

1. K-均值聚类(K-means)算法

初始数据集如下图所示,数据集未做任何标记labels,


image.png

​ 要求将其分为两簇,K均值算法的操作原理为:


image.png

随机挑选两个点作为聚类中心(cluster centroids),K-均值算法是一个迭代过程,分为两部分,第一为簇分类,第二为移动聚类中心。
​ 所谓的的簇分类是将图中所有的绿色样本点根据其距离蓝色、红色中心点距离,分配到簇中。
image.png

接下来将染色的点计算它们的平均值(平均下来的位置)此时将相应的聚类中心移动到这个均值处。


image.png

最终结果

此时继续迭代,聚类中心将不会再做改变。
​ K-均值算法,输入有两个部分:
K(聚类的个数):number of clusters,
训练集x(1),x(2),...,x(m) 。
对于不同身高、体重的人群衬衫的尺寸是相差很多的,若你是一家服装设计公司,利用k均值进行聚类分析,形成3个簇,即三种类,可以为尺寸设计方便很多,这也是市场细分--Market segmentation的一个隔离。
image.png
20180228115245278.gif

1).目标优化--Optimization Objective

2)随机初始化--Random Initialization

3)选择适当的聚类数--the number of Clusters

2.均值漂移聚类

均值漂移聚类是基于滑动窗口的算法,来找到数据点的密集区域。这是一个基于质心的算法,通过将中心点的候选点更新为滑动窗口内点的均值来完成,来定位每个组/类的中心点。然后对这些候选窗口进行相似窗口进行去除,最终形成中心点集及相应的分组。
具体步骤:

  1. 确定滑动窗口半径r,以随机选取的中心点C半径为r的圆形滑动窗口开始滑动。均值漂移类似一种爬山算法,在每一次迭代中向密度更高的区域移动,直到收敛。
  2. 每一次滑动到新的区域,计算滑动窗口内的均值来作为中心点,滑动窗口内的点的数量为窗口内的密度。在每一次移动中,窗口会想密度更高的区域移动。
  3. 移动窗口,计算窗口内的中心点以及窗口内的密度,知道没有方向在窗口内可以容纳更多的点,即一直移动到圆内密度不再增加为止。
  4. 步骤一到三会产生很多个滑动窗口,当多个滑动窗口重叠时,保留包含最多点的窗口,然后根据数据点所在的滑动窗口进行聚类。
    均值漂移聚类的计算步骤:


    2018022816141991.gif

    下面显示了所有滑动窗口从头到尾的整个过程。每个黑点代表滑动窗口的质心,每个灰点代表一个数据点。


    201802281615434.gif

    优点:
    (1)不同于K-Means算法,均值漂移聚类算法不需要我们知道有多少类/组。
    (2)基于密度的算法相比于K-Means受均值影响较小。

3. 基于密度的聚类方法(DBSCAN)

与均值漂移聚类类似,DBSCAN也是基于密度的聚类算法。
具体步骤:

  1. 首先确定半径r和minPoints. 从一个没有被访问过的任意数据点开始,以这个点为中心,r为半径的圆内包含的点的数量是否大于或等于minPoints,如果大于或等于minPoints则改点被标记为central point,反之则会被标记为noise point。
  2. 重复1的步骤,如果一个noise point存在于某个central point为半径的圆内,则这个点被标记为边缘点,反之仍为noise point。重复步骤1,知道所有的点都被访问过。
    优点:不需要知道簇的数量
    缺点:需要确定距离r和minPoints

4. 用高斯混合模型(GMM)的最大期望(EM)聚类

K-Means的缺点在于对聚类中心均值的简单使用。下面的图中的两个圆如果使用K-Means则不能作出正确的类的判断。同样的,如果数据集中的点类似下图中曲线的情况也是不能正确分类的。


image.png

使用高斯混合模型(GMM)做聚类首先假设数据点是呈高斯分布的,相对应K-Means假设数据点是圆形的,高斯分布(椭圆形)给出了更多的可能性。我们有两个参数来描述簇的形状:均值和标准差。所以这些簇可以采取任何形状的椭圆形,因为在x,y方向上都有标准差。因此,每个高斯分布被分配给单个簇。
所以要做聚类首先应该找到数据集的均值和标准差,我们将采用一个叫做最大期望(EM)的优化算法。下图演示了使用GMMs进行最大期望的聚类过程。


20180301110131231.gif

具体步骤:
  1. 选择簇的数量(与K-Means类似)并随机初始化每个簇的高斯分布参数(均值和方差)。也可以先观察数据给出一个相对精确的均值和方差。
  2. 给定每个簇的高斯分布,计算每个数据点属于每个簇的概率。一个点越靠近高斯分布的中心就越可能属于该簇。
  3. 基于这些概率我们计算高斯分布参数使得数据点的概率最大化,可以使用数据点概率的加权来计算这些新的参数,权重就是数据点属于该簇的概率。
  4. 重复迭代2和3直到在迭代中的变化不大。
    GMMs的优点:(1)GMMs使用均值和标准差,簇可以呈现出椭圆形而不是仅仅限制于圆形。K-Means是GMMs的一个特殊情况,是方差在所有维度上都接近于0时簇就会呈现出圆形。
    (2)GMMs是使用概率,所有一个数据点可以属于多个簇。例如数据点X可以有百分之20的概率属于A簇,百分之80的概率属于B簇。也就是说GMMs可以支持混合资格。

5. 凝聚层次聚类

层次聚类算法分为两类:自上而下和自下而上。凝聚层级聚类(HAC)是自下而上的一种聚类算法。HAC首先将每个数据点视为一个单一的簇,然后计算所有簇之间的距离来合并簇,知道所有的簇聚合成为一个簇为止。


20180301171047257.gif

具体步骤:

  1. 首先我们将每个数据点视为一个单一的簇,然后选择一个测量两个簇之间距离的度量标准。例如我们使用average linkage作为标准,它将两个簇之间的距离定义为第一个簇中的数据点与第二个簇中的数据点之间的平均距离。
  2. 在每次迭代中,我们将两个具有最小average linkage的簇合并成为一个簇。
  3. 重复步骤2知道所有的数据点合并成一个簇,然后选择我们需要多少个簇。
    层次聚类优点:(1)不需要知道有多少个簇
    (2)对于距离度量标准的选择并不敏感
    缺点:效率低

6. 图团体检测(Graph Community Detection)

当我们的数据可以被表示为网络或图是,可以使用图团体检测方法完成聚类。在这个算法中图团体(graph community)通常被定义为一种顶点(vertice)的子集,其中的顶点相对于网络的其他部分要连接的更加紧密。下图展示了一个简单的图,展示了最近浏览过的8个网站,根据他们的维基百科页面中的链接进行了连接。


image.png

二、监督式机器学习

1. 支持向量机(Support Vector Machine)

支持向量机(SVM)为监督式机器学习方法的一种,广泛地应用于统计分类、回归分析、二类问题(binary classification)的模式识别中,其最大特点是既能够最小化经验损失(也叫做经验风险、或者经验误差),同时又能够最大化几何间距(分类器的置信度),因此SVM又被称为最大边缘区(间距)的分类器。
​ 机的意思就是算法,机器学习领域里面常常用“机”这个字表示算法。支持向量意思就是数据集种的某些点,位置比较特殊,我们找这条直线的时候,一般就看聚集在一起的两类数据,它们各自的最边缘位置的点,也就是最靠近划分直线的那几个点,而其他点对这条直线的最终位置的确定起不了作用,故称这些点为“支持点”(即有用的点),但是在数学上,没这种说法,数学里的点,又可以叫向量,比如二维点(x,y)就是二维向量,三维度的就是三维向量(x,y,z)。所以“支持点”改叫“支持向量”。

三、神经网络优化算法

    神经网络与普通的分类器不同,其是一个巨大的网络,最后一层的输出与每一层的神经元都有关系。而神经网络的每一层,与下一层之间,都存在一个参数矩阵。我们需要通过优化算法求出每一层的参数矩阵,对于一个有 K 层的神经网络,我们共需要求解出 K−1 个参数矩阵。因此我们无法直接对目标函数进行梯度的计算来求解参数矩阵。
  对于神经网络的优化算法,主要需要两步:前向传播(Forward Propagation)与反向传播(Back Propagation)

(一)前向传播

前向传播就是从输入层到输出层,计算每一层每一个神经元的激活值。也就是先随机初始化每一层的参数矩阵,然后从输入层开始,依次计算下一层每个神经元的激活值,一直到最后计算输出层神经元的激活值。


前向传播

(二)反向传播

反向传播总的来说就是根据前向传播计算出来的激活值,来计算每一层参数的梯度,并从后往前进行参数的更新。


反向传播

四、梯度下降

四、激活函数

五、损失函数

(一)均方误差损失

(二)交叉熵损失

(三)svm合页损失

(四)Smooth L1损失

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容