编者按:机器学习开放课程第七课,snap软件工程师sergey korolev讲解了主成分分析降维方法和常用聚类方法。
对cifar-10应用t-sne可视化技术(l2距离)
欢迎来到开放机器学习课程的第七课!
在这节课中,我们将讨论主成分分析(pca)和聚类(clustering)这样的无监督学习方法。你将学习为何以及如何降低原始数据的维度,还有分组类似数据点的主要方法。
概览
介绍
主成分分析
直觉、理论、应用问题
用例
聚类分析
k均值
近邻传播
谱聚类
凝聚聚类
精确性测度
作业七
相关资源
介绍
和分类、回归方法相比,无监督学习算法的主要特性是输入数据是未标注过的(即没有给定的标签或分类),算法在没有任何铺助的条件下学习数据的结构。这带来了两点主要不同。首先,它让我们可以处理大量数据,因为数据不需要人工标注。其次,评估无监督算法的质量比较难,因为缺乏监督学习所用的明确的优秀测度。
无监督学习中最常见的任务之一是降维。一方面,降维可能有助于可视化数据(例如,t-sne方法);另一方面,它可能有助于处理数据的多重共线性,为监督学习方法(例如,决策树)准备数据。
主成分分析
直觉、理论、应用问题
主成分分析是最简单、最直观、最频繁使用的降维方法之一,投射数据至其正交特征子空间。
更一般地说,所有观测可以被看成位于初始特征空间的一个子空间上的椭圆,该子空间的新基底与椭圆轴对齐。这一假定让我们移除高度相关的特征,因为基底向量是正交的。在一般情况下,所得椭圆的维度和初始空间的维度相当,但假定数据位于一个维度较小的子空间让我们可以在新投影(子空间)上移除“过多的”空间。我们以“贪婪”方式达成这一点,通过识别散度最大之处循序选择每个椭圆轴。
让我们看下这一过程的数学:
为了将数据的维度从n降至k(k s(x, z)。s的一个简单例子是负平方距离s(x, y) = - ||x-y||2。
现在让我们通过两个矩阵来描述“相符程度”。其中一个矩阵ri,k将决定,相比七塔寺所有可能的“角色模型”,第k个观测是第i个观测的“角色模型”的合适程度。另一个矩阵ai,k将决定,第i个观测选择第k个观测作为“角色模型”的合适程度。这可能听起来有点困惑,但如果你自己想一个例子实际操作一下,就要好理解得多。
矩阵根据如下规则依次更新:
谱聚类
谱聚类组合了上面描述过的一些方法,创建了一种更强劲的聚类方法。
首先,该算法需要我们定义观测的相似性矩阵——邻接矩阵。这一步可以使用和近邻传播类似的方法做到,所以矩阵a将储存相应数据点之间的负平方距离。该矩阵描绘了一整张图,其中观测为顶点,每对观测之间的估计相似值为这对顶点间的边。就上面定义的测度和二维观测而言,这是相当直观的——如果两个观测之间的边最短,那么这两个观测相似。我们将把图分割为两张子图,满足以下条件:每张子图中的每个观测和这张子图中的另一个观测相似。形式化地说,这是一个normalized cuts问题;建议阅读以下论文了解具体细节:
http://people.eecs.berkeley.edu/%7emalik/papers/sm-ncut.pdf
凝聚聚类
在不使用固定聚类数目的聚类算法中,该算法是最简单、最容易理解的。
这一算法相当简单:
刚开始,每个观测自成其聚类
根据聚类中心两两距离降序排列
合并最近的两个相邻聚类,然后重新计算中心
重复第2、3步直到所有数据合并为一个聚类
搜索最近聚类有多种方法:
单链(single linkage)
全链(complete linkage)
平均链(average linkage)
中心链(centroid linkage)
其中,第三个方法是最有效率的做法,因为它不需要在每次聚类合并后重新计算距离。
凝聚聚类的结果可以可视化为美观的聚类树(树枝形结构联系图),帮助识别算法应该停止的时刻,以得到最有结果。有很多python工具可以构建这样的树枝形结构联系图。
让我们考虑之前的k均值聚类一节中所用的例子:
from scipy.cluster import hierarchy
from scipy.spatial.distance import pdist
x = np.zeros((150, 2))
np.random.seed(seed=42)
x[:50, 0] = np.random.normal(loc=0.0, scale=.3, size=50)
x[:50, 1] = np.random.normal(loc=0.0, scale=.3, size=50)
x[50:100, 0] = np.random.normal(loc=2.0, scale=.5, size=50)
x[50:100, 1] = np.random.normal(loc=-1.0, scale=.2, size=50)
x[100:150, 0] = np.random.normal(loc=-1.0, scale=.2, size=50)
x[100:150, 1] = np.random.normal(loc=2.0, scale=.5, size=50)
distance_mat = pdist(x) # pdist计算上三角距离矩阵
z = hierarchy.linkage(distance_mat, 'single') # linkage为凝聚聚类算法
plt.figure(figsize=(10, 5))
dn = hierarchy.dendrogram(z, color_threshold=0.5)
精确性测度
和分类相反,很难评估聚类所得结果的质量。这里,测度无法依赖于标签,只能取决于分割的质量。其次,当我们进行聚类时,我们通常不具备观测的真实标签。
质量测度分为内、外部。外部测度使用关于已知真实分割的信息,而内部测度不使用任何外部信息,仅基于初始数据评估聚类的质量。聚类的最优数目通常根据某些内部测度决定。
所有下面的测度都包含在sklearn.metrics中。
调整兰德指数(ari)
这里,我们假定目标的真实标签是已知的。令n为样本中的观测数,a为标签相同、位于同一聚类中的观测对数,b为标签不同、位于不同聚类中的观测数。兰德指数可由下式得出:
换句话说,兰德指数评估分割后的聚类结果和初始标签一致的比例。为了让任意观测数、聚类数的兰德指数接近零,我们有必要缩放其大小,由此得到了调整兰德指数:
这一测度是对称的,不受标签排列的影响。因此,该指数是不同样本分割距离的衡量。ari的取值范围是[-1, 1],负值意味着分割更独立,正值意味着分割更一致(ari = 1意味着分割完全一致)。
调整互信息(ami)
这一测度和ari相似。它也是对称的,不受标签的具体值及排列的影响。它由熵函数定义,将样本分割视作离散分布。mi指数定义为两个分布的互信息,这两个分布对应于样本分割聚类。直观地说,互信息衡量两个聚类分割共享的信息量,即,关于其中之一的信息在多大程度上可以降低另一个的不确定性。
ami的定义方式和ari类似。这让我们可以避免因聚类数增长而导致的mi指数增长。ami的取值范围为[0, 1]。接近零意味着分割更独立,接近1意味着分割更相似(ami = 1意味着完全一致)。
同质性、完整性、v-measure
形式化地说,这些测度同样基于熵函数和条件熵函数定义,将样本分割视作离散分布:
其中k为聚类结果,c为初始分割。因此,h评估是否每个聚类由相同分类目标组成,而c评估相同分类买的物品分属聚类的匹配程度。这些测度不是对称的。两者的取值范围均为[0, 1],接近1的值暗示更精确的聚类结果。这些测度的值不像ari或ami一样缩放过,因此取决于聚类数。当一个随机聚类结果的聚类数足够大,而目标数足够小时,这一测度的值不会接近零。在这样的情形下,使用ari要更合理。然而,当观测数大于100而聚类数小于10时,这一问题并不致命,可以忽略。
v-measure结合了h和c,为h和c的调和平均数:v = (2hc)/(h + c)。它是对称的,衡量两个聚类结果的一致性。
轮廓
和之前描述的测度都不一样,轮廓系数(silhouette coefficient)无需目标真实标签的知识。它让我们仅仅根据未标注的初始样本和聚类结果估计聚类的质量。首先,为每项观测计算轮廓系数。令a为某目标到同一聚类中的其他目标的平均距离,又令b为该目标到最近聚类(不同于该目标所属聚类)中的目标的平均距离,则该目标的轮廓系数为:
样本的轮廓系数为样本中所有数据点的轮廓系数的均值。该系数的取值范围为[-1, 1],轮廓系数越高,意味着聚类的结果越好。
轮廓系数有助于确定聚类数k的最佳值:选取最大化轮廓系数的聚类数。
作为总结,让我们看看这些测度在mnist手写数字数据集上的效果如何:
from sklearn import metrics
from sklearn import datasets
import pandas as pd
from sklearn.cluster importkmeans, agglomerativeclustering, affinitypropagation, spectralclustering
data = datasets.load_digits()
x, y = data.data, data.target
algorithms = []
algorithms.append(kmeans(n_clusters=10, random_state=1))
algorithms.append(affinitypropagation())
algorithms.append(spectralclustering(n_clusters=10, random_state=1,
affinity='nearest_neighbors'))
algorithms.append(agglomerativeclustering(n_clusters=10))
data = []
for algo in algorithms:
algo.fit(x)
data.append(({
'ari': metrics.adjusted_rand_score(y, algo.labels_),
'ami': metrics.adjusted_mutual_info_score(y, algo.labels_),
'homogenity': metrics.homogeneity_score(y, algo.labels_),
'completeness': metrics.completeness_score(y, algo.labels_),
'v-measure': metrics.v_measure_score(y, algo.labels_),
'silhouette': metrics.silhouette_score(x, algo.labels_)}))
results = pd.dataframe(data=data, columns=['ari', 'ami', 'homogenity',
'completeness', 'v-measure',
'silhouette'],
index=['k-means', 'affinity',
'spectral', 'agglomerative'])
results
稳压器五类故障问题及排除方法
VI Chip高压母线转换模块的特点及应用介绍
在治疗类领域中,触控一体机可以应用在哪些场景
TPS92310大功率LED驱动器的典型应用电路图
XL32F003Q32 QFN32封装 大资源64K的flash和8K的SRAM
主成分分析降维方法和常用聚类方法
Ruff物联网数采网关助力工业能源管理数字化可视化
出售Anritsu MS9710B光谱分析仪
主板用户的福音 微星 核反应堆加持顶级X299主板
马来西亚道路定制一款更接地气的智能驾驶汽车解决方案
超声波焊接工艺六步的详细说明
锁相环原理与公式讲解
Wi-Fi已不可或缺 家庭Wi-Fi是否需要升级
APS计划排产软件如何进行生产排程?
战术导弹对MEMS惯性传感器中的陀螺仪有哪四个要求?
VR+儿童教育的优势
逆变应急灯原理图
嵌入式系统的主流趋势是什么
互联网企业很少使用Oracle数据库的原因是什么
机器学习算法的分类