Question 1000365: Random Forest可以用来做聚类?
统计/机器学习 无监督学习 随机森林Random Forests一般是用来做分类问题的,听说它可以用来做clustering?我没搜到相关的内容,不知道这里有没有大神知道的。愿听详闻!谢谢!
Answer
这是个很诡异的问题,看到后面你就知道为什么诡异了。首先声明一下,Random Forests的发明人Leo Breiman说Random Forest是可以做聚类的,具体可参考(Random forest clustering-Leo Brieman)。
那下面解释一下Brieman用RF做Clustering的神奇步骤。
其实@雷猴 说的并没有错,RF的确是监督式学习,的确是需要标签的。所以...
第一步:生成假冒数据和临时标签。
我们先给原数据集增加一列,名叫“标签”,原生数据每一行的标签都是“1”。下面生成一些假数据,假数据的每一列都是从原生数据中根据其经验分布随机产生的,人工合成的数据的标签是“0”。举个例子,
标签 身高 体重 年龄
1 184 158 25
1 170 162 37
1 165 132 45
1 110 78 9
1 145 100 14
1 ... ... ...
上面是原生数据,下面我们开始制造虚假数据
标签 身高 体重 年龄
1 184 158 25
1 170 162 37
1 165 132 45
1 110 78 9
1 145 100 14
1 ... ... ...
0 170 100 9
0 110 162 37
0 165 158 14
每行假数据的每一个元素都是从它所在的那一列中随机抽取的,列和列之间的抽取是独立的。这样一来,人工合成的假数据就破坏了原有数据的结构性。现在我们的数据集和标签就生成完了。
第二步:用该数据集训练Random Forest并获得样本间的临近性(proximity)。
假设原生样本有N行,我们再生成M个假数据。现在我们就有了带标签的样本之后就可以用它训练出一个Random Forest。Random Forest在训练的同时,可以返回样本之间的临近性(proximity,两个样本出现在树杈同一节点的频率越高,它们就越临近)。我们就有了一个(N+M)x(N+M)的临近矩阵(这是个对称矩阵)。把与假数据相关的M行、M列去掉,我们就得到了NxN的矩阵,矩阵的第i行第j列的数值就是原生数据中第i个样本和第j个样本之间的临近性。
第三步:根据每个样本点两两之间的临近性来聚类。
这个是最后一步,也是我认为诡异的一步。我们可以用两两之间的临近性当做两两之间的距离,然后再利用常规的聚类算法,比如层次聚类法(Hierarchical clustering),就可以完成对原样本的聚类。
以上就是Brieman的关于用Random Forest做聚类的思想。但是怎么说呢,我觉得Random Forest在上面的聚类步骤中更像是一个生成距离的手段。这有点像PCA,PCA也可以参与聚类,但是参与完了之后,需要用肉眼或者其他方法去划一条分界线。
根据高代兄的解说,说下RF做cluster的理解。Hierarchy clustering或Kmeans,最主要是要计算两点间距离或相似性。树结构可以用来生成相似性。一棵树主要目的就是把数据空间非线性的分为$K$份,$K$为叶节点个数。每一个叶节点就是一个cluster。根据breiman的定义,两个点在同一个叶节点,则相似性+1。我们对叶节点编号k=1,2,...,K,对数据点i在某叶节点的信息进行$K$位one-hot编码$x_i$,则数据点i和j的相似性$S_{ij}=x_i^Tx_j$。这个one-hot编码相当于新造的特征(feature),用一位binary的数据代替叶节点中的所有点。其实这个one-hot编码是一个kernel function。我们计算的是kernel space上的相似性。
因为RF有M棵树,这样的one-hot编码一共M组,合并为一组总编码$x_i'=[x_{i,1};x_{i,2};...;x_{i,M} ]$,最后两点间相似度为$S_{ij}=\sum_{m=1}^{M}S_{ij,m}=x_i'^Tx_j'$。
有几点想法:
1.最后相似性是由RF的$KM$维新特征(M组one-hot)上得到的。其实也可以加上原始数据中的相似性衡量(比如L2距离)。
2.造synthetic data来训练RF,有一个假设条件是新造的数据只有很小概率在原始数据附近。如果假设不成立,不知道结果如何。
随机森林不可以用来做无监督学习,因为它需要用标签来训练一棵棵随机的决策树。
Question 1000500: 什么是K-Modes(K众数)聚类法?
统计/机器学习 无监督学习最近听说了一个K-Modes聚类法,听说是基于K-Means在分类特征上改良的聚类算法。但是没有找到相关的资料,有知道算法的具体细节的吗?
谢谢!
Answer
我对K-Modes Clustering(K众数聚类)还算熟悉。我可以讲一讲。
K-Modes和K-Means非常类似。
相同点:我们在算法开始前自己设定K,也就是聚类的个数;然后再自己设定K个初始中心点,所有样本点被聚类到离自己最近的那个中心点;根据每个聚类,重新计算中心点,所有样本点再重新被聚类。如此往复,直到每个样本点的归属不再改变或者达到某个预设的收敛条件。
不同点:K-Means是用每个聚类中的均值(mean)做中心点,K-Modes是用每个聚类中的众数(mode)做中心点。距离的定义也不同,通常K-Means较多使用欧式距离,K-Modes一般是汉明距离,也就是对于每个特征来说,如果不同记为1,相同则为0。
我可以举个例子。比如我们有10款手机需要聚类,我们关于这10款手机的数据都是分类数据(categorical)。
手机 国家 人群 颜色
1 中 青年 白
2 日 青年 黑
3 中 青年 蓝
4 中 青年 黑
5 日 青年 白
6 日 中年 黑
7 美 中年 蓝
8 美 中年 白
9 中 中年 黑
10 美 中年 黑
假定我们选择聚类的数量K=2,初始点为手机1(中,青年,白)和手机6(日,中年,黑)。
下面开始计算距离。
手机 与手机1的距离 与手机6的距离
2 2 1
3 1 3
4 1 2
5 1 2
7 3 2
8 2 2
9 2 1
10 3 1
对于手机8来说,出现了打平,我们可以随机选择一个,假定手机8属于手机1的聚类。
聚类1:手机1, 3, 4, 5, 8
手机 国家 人群 颜色
1 中 青年 白
3 中 青年 蓝
4 中 青年 黑
5 日 青年 白
8 美 中年 白
我们下面计算聚类1的新中心。
“国家”,中国三次,日本美国各一次,国家的众数是中国。
“人群”,青年四次,中年一次,众数是青年。
“颜色”,白色是众数。
所以聚类1的中心依然是(中,青年,白)。
聚类2:手机2, 6, 7, 9, 10
手机 国家 人群 颜色
2 日 青年 黑
6 日 中年 黑
7 美 中年 蓝
9 中 中年 黑
10 美 中年 黑
同样地,我们可以计算这个聚类的中心点是(日,中年,黑)。
在这个例子中,比较巧合,经过一次迭代后,中心并没有改变,所以聚类就完成了。
也有时候,聚类的新的中心点不一定在数据集中出现,这个也是可能的,我们依旧会使用这个中心点。
Question 1000514: K-MEANS初始点选择的问题
统计/机器学习 无监督学习Answer
有的。可以选相距最远的K个点作为初始点。
K-Means的目的是为了找出K个截然不同的聚类。所以我们希望这K个聚类分得越开越好。初始点分开得远更有利于算法快速收敛。
Question 1000539: 软聚类,硬聚类?
统计/机器学习 无监督学习机器学习新人,才开始了解聚类算法,看到软聚类和硬聚类这两个名词,不是很明白它们的意思。
谢谢!
Answer
硬聚类就是把数据确切地分到某一类中,比如K-Means。
硬就是说“强硬”,是属于A类就是A类,不会跑到B类。
软聚类就是把数据以一定的概率分到各类中,比如高斯混合模型(GMM),比如模糊C均值模型(Fuzzy c-Means)。聚类的结果往往是样本1在A类的概率是0.7,在B类的概率是0.3。
软聚类又称为模糊聚类(fuzzy clustering)。
返回标签的聚类算法是硬聚类
返回概率的聚类算法是软聚类
Question 1000890: PCA降维中的特征值和特征向量
统计/机器学习 无监督学习 数据降维 特征选择特征值和特征向量在数学上如何推导出来的我大概知道,但是对这两个概念有没有更直观的解释?
Answer
PCA中的特征值其实就是对应的SVD的奇异值的平方。
PCA主要是对协方差矩阵$XX^T$进行特征分解
$$XX^T=U\Sigma U^T$$
$\Sigma$是个对角阵,对角线上的元素就是特征值。$U$的列向量就是特征向量。
也可以参考我在另外一个问题里写的答案PCA和SVD是一回事吗?
一个矩阵点乘一个向量时,可以把矩阵看成是一个线性变换,点乘就是把这个线性变换施加到相应的向量上。当线性变换施加到该矩阵的特征向量上时,并不改变特征向量的方向,只是对其进行拉长或者缩短。而这个拉长或者缩短的程度就是由相应的特征值所决定。
如果特征值为2,那就是把该特征向量的长度变为原来的两倍。
如果特征值为-2,那就是把向量方向改变180度,并把长度变为原来两倍。
Question 1001124: PCA的目标函数
统计/机器学习 无监督学习 损失函数既然我们说PCA也是一种机器学习的算法,那PCA的目标函数或者说损失函数是什么呢?
Answer
简单说来就是要让原始点和PCA还原后的点之间的欧式距离越小越好。
比如说原数据矩阵是$n\times m$的$A$,降维后的数据(样本成分)是$n\times p$的$N$,以及特征成分是$p \times m$的矩阵$M$。
在给定$p$的情况下,PCA的目标函数就是
$$\min \|A-NM\|_F$$
就是原始点和PCA后还原点的两两欧式距离之和。
Question 1001145: 层次聚类里的linkage是什么意思?
统计/机器学习 无监督学习层次聚类里的linkage是什么意思?
还有link method,这些都是什么意思?
Answer
linkage表示层次聚类中距离的定义方式。link method和linkage是一回事。
常见的有单点linkage(或者最小linkage),意思是说两个聚类的距离定义为这两个聚类中最近的两个点的距离
完全linkage(或者称为最大linkage),意思是说两个聚类的距离定义为这两个聚类中最远的两个点的距离
中心linkage(或者称为平均linkage),意思是说两个聚类的距离定义为这两个聚类中所有点的平均距离
补充一个Ward's linkage
Question 1001229: 关于小批量K均值(mini-batch K Means)的问题
统计/机器学习 无监督学习最近看到一个叫做小批量K均值(mini-batch K Means)的聚类方法。
K均值我懂,SGD里的小批量我也懂。
【不懂就问】
但是这两个合在一起是什么意思?
小批量K均值和正常的K均值什么关系?这里的小批量又是什么意思?
Answer
mini-batch K Means是对普通的K Means计算效率的优化。
在普通的K Means的计算过程中,每次更新各聚类中心点时,需要计算所有点和每个聚类中心点的距离,所以代价特别昂贵。
而在mini-batch K Means的计算过程中,每次更新各聚类中心点时,先从所有数据中随机地选取一个小集合(也就是这里的mini-batch),根据这个集合中的数据点,来更新各聚类的中心点。下一次更新时,再重新从所有数据点中选取一个随机的小集合,如此重复,直到达到收敛条件。
mini-batch的思想就是用部分数据,而不是全部数据,来更新模型的参数。所以从这一点来说,mini-batch K means和mini-batch sgd是同一个思想。
为了加快k means算法的计算速度,每次迭代的时候,只选了小批量的随机数据,而不是全部数据,这个思想就是小批量k means。
更多细节可以参考 Mini Batch K-Means in Sklearn
一个类似的问题:Mini-batch K-Means实现online learning的原理是什么?
答案说得很清楚
Question 1001361: 层次聚类中的Ward's method是什么意思
统计/机器学习 无监督学习层次聚类中的Ward's method是什么意思
Answer
Ward's method是层次聚类中linkage方法的一种。
Ward's method中两个聚类$P,Q$的“距离”为
$$L(P, Q)=\text{Var}(P)+\text{Var}(Q)-\text{Var}(P\cup Q)$$
换句话说,$L(P,Q)$就是把$P$和$Q$合并后,组内方差的减少值。
Question 1001489: 通俗地解释c-means以及fuzzy c-means是什么意思
统计/机器学习 无监督学习请教如何通俗地解释c-means以及fuzzy c-means是什么意思?
它们与k-means是什么联系?
Answer
刚好最近才学过这个,FCM就是拓展版的K-means。FCM允许每个数据点以某个权重分到多个不同cluster里面。
FCM中想要最小化的目标函数是
$$F=\sum_{i=1}^n \sum_{j=1}^k \mu_{i,j}^m\|x_i-c_j\|^2$$
并满足限制条件
$$\sum_{j=1}^k \mu_{i,j}=1, \forall i$$
以及
$$\mu_{i,j}\geq 0, \forall i,j$$
上面式子中的$\mu_{i,j}$表示第$i$个数据点被分配到第$j$个cluster的概率。$c_j$是cluster的中心点。$m$是个超参数,当$m=1$的时候,FCM就等价于Kmeans,所以一般来说$m$是大于1的。
c-means就是fuzzy c-means,一般简称是FCM。
FCM和K-means一样,在开始聚类前,要先确定cluster的个数。
与K Means不同的是,FCM最后返回的是每个样本点属于某个聚类的概率。所以FCM是一种软聚类算法。有时候FCM也被叫做软K-Means。
Question 1001692: 关于K均值聚类的权重问题
统计/机器学习 无监督学习 特征选择K均值聚类的时候可以设置某个变量的权重大点么?
因为知道数据集变量的真实意义,我是想主要根据这个变量的不同进行聚类。
Answer
可以啊,你把这个你觉得重量的变量缩放到[-k, k]的维度上,其他变量缩放到[-1, 1]的维度上,至于k多大,就看你觉得到底那个变量有多重要了。
把不重要的变量压缩,把重要的变量拉伸,这样应该就可以了
Question 1001749: k-medoids和k-means区别
统计/机器学习 无监督学习k-medoids和k-means的主要区别是什么?
我明白k-means,其实主要是不明白k-medoids。
最好是用浅显的语言描述下,鞠躬致谢!
Answer
看起来k-medoids和和K-means比较相似,但是K-medoids和K-means是有区别的,不一样的地方在于中心点的选取,在K-means中,我们将中心点取为当前cluster中所有数据点的平均值,在 K-medoids算法中,我们将从当前cluster 中选取这样一个点——它到其他所有(当前cluster中的)点的距离之和最小——作为中心点。
K means里每个cluster的中心点是平均值点
K medoids里每个cluster的中心点是离平均值点最近的样本点
也就是说K medoids的中心点一定是数据集中存在的点
k-means,k-medians和k-medoids的 区别在于如何计算一个中心点代表整个cluster(让N对N的计算变为N对1):
k-means: 算中心点时,每个属性(attribute)单独算,距离函数是L2norm。每个属性可能是数据中没出现过的值。
k-medians: 算中心点时,每个属性单独算,距离函数是L1norm。每个属性是数据中出现过的值,但可能来至于不动数据点,所以中心点可能在数据中没出现过。这是attribute意义上的median。
k-medoids: 算中心点时,所有属性一起算,距离函数是自定。中心点在数据中出现过。这是数据点意义上的median。
举个例子,2维binary的数据只有三种可能{(0,0),(0,1),(1,0)}。
k-means可能出现(0.6,0.6)的中心点,k-medians可能出现(1,1)的中心点,k-medoids不可能出现(1,1)的中心点。
Question 1001860: 关于高斯混合模型的分布的疑问
统计/机器学习 概率分布 无监督学习高斯混合模型就是很多个高斯分布的叠加
但是明明高斯分布加另一个高斯分布,还是高斯分布
那么高斯混合模型本身就应该是一个大的高斯模型啊
但是高斯混合模型的图画出来明明却又不是高斯分布,这是为什么
Answer
GMM中的叠加,不是加法的加。
我们说GMM中有多个高斯分布叠加,意思是说GMM中部分数据点服从一个高斯分布,另一部分服从另一个高斯分布。与其说是多个高斯分布的叠加,不如说是多个高斯分布的并集。
看下面的图应该就一目了然了
高斯混合模型的意思是说,数据中各个部分分别服从于不同的正态分布。也就是所谓多个高斯分布混合在一起。
你说的两个独立的随机变量X1,X2服从高斯分布,X=X1+X2也满足高斯分布。注意是随机变量的和。
而GMM里是概率的“和”。p(x)=sum(kiN(x|mu,sigma))。
一小段Matlab:
N=100000;
x1=randn(N,1)*0.2+5;
x2=randn(N,1)*2-2;
x=x1+x2;
ww=[-10 10];
select=rand(N,1);
idx=select>0.8;
y=zeros(N,1);
y(idx)=x1(idx);
y(~idx)=x2(~idx);
m=1000;
figure;
subplot(411);hist(x1,m),xlim(ww);title('x1')
subplot(412);hist(x2,m),xlim(ww);title('x2')
subplot(413);hist(x,m),xlim(ww);title('x=x1+x2')
subplot(414);hist(y,m),xlim(ww);title('y=GMM')
Question 1001993: 聚类问题可以用stacking model的方法吗?
统计/机器学习 无监督学习分类问题经常用stacking model的方法。
好奇聚类是不是可以用这样的思路?
Answer
看论文的时候,看到过多层聚类融合的
为了提高聚类结果的准确性、稳定性和鲁棒性 ,通过ensemble多个基聚类结果可以产生一个较优的结果。
这个方法可以认为是类似投票逻辑,基本思想是:用多个独立的基聚类器分别对原始数据集进行聚类,然后使用某种集成方法进行处理,并获得一个最终的集成结果。
这类算法在第一阶段,应尽可能地使用多种方式来获取基聚类结果;第二阶段应选择一个最合适的ensemble集成解决方案来处理这些结果。
没听说过。
不过非监督学习下的异常点检验似乎可以用stack的方法。
Question 1002010: sklearn.cluster.KMeans可以用其他距离吗?
统计/机器学习 无监督学习sklearn.cluster.KMeans可以用其他距离吗?
默认的好像是L2距离,也就是欧式距离。可以用L1距离吗?
Answer
Sklearn不行,matlab的kmeans可以自定义距离公式。
Question 1002081: Jenks和K Means在一维数据时,是不是等价的?
统计/机器学习 无监督学习Jenks和K Means在一维数据时,是不是等价的?
它们的目标都是最大化簇间方差,最小化簇内方差。
Jenks只能作用在一维数据上,那么K Means在一维数据上是不是等价于Jenks呢?
Answer
是的,完全等价。它们的目标函数都是一样的。
一维的K means就是Jenks Natural Breaks。
它们的目标函数一样,但是算法的步骤不完全相同。
K Means是先设定好K个初始随机点。而Jenks Breaks则是用遍历的方法,一个点一个点地移动,直到达到最小值。
可以说它们都是实现簇内方差最小的算法,具体实施办法不同而已。
Question 1002279: 谱聚类中的相似矩阵是怎么定义的?
统计/机器学习 无监督学习谱聚类中的相似矩阵是怎么定义的?我看网上有的资料说是就是两个点的欧式距离,是这样吗?
谢谢!
Answer
基本上是这个意思。Spectral Clustering是用了一些图论的思想。
Spectral Clustering主要分三步:1. 构造相似矩阵,2. 进行谱分解,3. 进行划分完成聚类。
相似矩阵是描述样本与样本之间的相似性的。如果有$n$个样本,那么相似矩阵$A$就是$n\times n$的,其中$A_{i,j}$表示第$i$个样本和第$j$个样本的相似性,$A_{i,i}$规定为0。
相似性有很多度量方式。Spectral Clustering也可以采用kNN的思想,最近的k个点可以标记相似度为1,其余的点可以标记为相似度为0。当然也可以直接取欧式距离的倒数为相似值。
Question 1002310: 如何用K Means做异常检测(outlier anomaly detection)?
统计/机器学习 无监督学习如何用K Means做非监督的异常检测(outlier anomaly detection)?有什么思路吗?谢谢!
Answer
类似于one-class SVM,先用干净的数据(没有异常点)得到一个K Means。然后把测试集(包含异常点)根据之前KMeans的结果进行聚类,如果一个点距离它最近的中心超过之前训练集里的最大距离的话,就判断它为异常点。
可以考虑离每簇的centroid最远的点,它们就是异常点。
如果没有训练数据,可以考虑人为设定一定比例(比如0.1%)为异常点,或把距离的histogram画出来,找个拐点设定距离的阈值,大于这个阈值的是异常点。
Question 1002498: K Means初始点必须是样本中的点吗
统计/机器学习 无监督学习K Means初始点是随机的,那么必须是样本中的点吗?还是根据数值的范围,用Uniform分布产生的随机点?
Answer
不一定是样本中的点,但是为了方便,通常选样本中的作为初始的中心点,但是经过一次迭代之后,中心点一般就不是样本中的点了。
最好用样本中的点。因为存在就合理,用没见过的值,会有风险。举个极端的例子。比如数据范围是[0,1],如果出现一个异常点是10000,那么初始值是uniform[0,10000]的随机数,会很难收敛。如果用样本中的点做初始值,只有很小概率会用这个异常点。
Question 1002942: K Means为什么不能收敛到全局最优点?
统计/机器学习 最优化 无监督学习做K Means的时候,我们需要多次随机选取初始点,进行迭代,从而得到一个最佳的聚类。这么做是为了防止K Means陷入局部最小值。
我的问题是K Means为什么不能收敛到全局最优点?它的目标函数不是凸的吗?
Answer
Kmeans不是Convex optimization。参考这里
$\min J=\min\sum_{i=1}^{N}\min_{k=1}^{K}||x_i-\mu_k||_2^2$
这里$\mu_k$是第$k$均值。
Kmeans分为两步交替进行:
1.确定每个点属于哪个cluster,$\min_{k=1}^{K}||x_i-\mu_k||_2^2$
2.更新均值$\mu_k=mean_{i\in c_k}(x_i)$
注意第一步里的优化问题,如果一个函数求两个convex函数的最小值,那么它不是convex函数。举个例子,$\mu_1=[1,1],\mu_2=[-1,-1]$,
$$z=\min_{k=1}^{2}||x_i-\mu_k||_2^2$$
$z$的等高线是
这明显有两个全局最低点,不是convex/concave。
Kmeans对初始均值$\mu_k$的选择非常敏感,所以会尝试选择多个初始值,并选一个结果最好的。
有一些研究是对$\mu_k$加一些限制,把整个问题变成宽松的convex。
Question 1003167: R里有k means比较稳定的library吗?
统计/机器学习 无监督学习 RR里有k means比较稳定的library吗?求推荐一个
Answer
有个library就叫做k means
Question 1003172: K-Means实现mini-batch online learning的原理是什么?
统计/机器学习 无监督学习K-Means实现mini-batch online learning的原理是什么?
被面试官问到了,这个概念没怎么接触过。谢谢!
----2018.10.21更新----
我有个后续问题在这里:关于online KMeans步骤中成员更新分类的问题?
Answer
mini batch K means的原始论文Web-Scale K-Means Clustering。
每次数据只随机取一个mini batch$M$。第13行的公式$c\leftarrow (1-\eta)c+\eta x$,其中第一项$(1-\eta)c$是momentum,第二项$\eta x$是每个数据点带来的改变量,相当于每个点提供的gradient,$\eta$是learning rate。所以相当于是带momentum的minibatch gradient descent。注意,比较一下一般不带momentum的batch Kmeans,第13行应该改为$c\leftarrow \sum_{x_i \in S_c}\frac{x_i}{N_c}$,也就是cluster中所有数据点的均值为中心点。
原文并没有从原理或理论上证明mini-batch Kmeans等价于Kmeans。事实上可能并不等价。作者的动机是
我理解是batch gradient descent是每个batch有所有数据点,minibatch是每个batch有随机M个数据点,SGD是每个batch只有一个数据点。对于随机噪音batch > minibatch> SGD。对于计算量batch < minibatch< SGD。取一个中庸之道,就是minibatch。
论文中结果也说明minibatch(蓝色)收敛最快,效果也相近于Batch Kmeans。
Question 1003353: 关于online KMeans步骤中成员更新分类的问题?
统计/机器学习 无监督学习我之前问了K-Means实现mini-batch online learning的原理是什么?
我对其中一个步骤还是有一些疑问
第13步是更新聚类的中心点。但是如果中心点坐标更新之后,它不再是这个聚类中原来一些成员的最近中心了,那么是否应该剔除掉这些成员,然后重新计算中心点。因为那些成员会被分配到其他聚类,是否也要重新计算所有聚类的中心点?
Answer
不需要剔除cluster里的成员,也不需要计算每个点新的cluster label。只有在第7步里计算当前batch里点的临时culster label$d[x]$,在第10步里用完$d[x]$后就不会再用,真正全局都记录和更新的信息是中心点$c$和每个cluster的点数$v$。
Question 1003526: K means对数据的分布有要求吗?需要符合哪些前提假设?
统计/机器学习 假设检验 概率分布 无监督学习K means好像对数据没有什么要求,但是有时候感觉效果就是很不好。请问K means对数据的分布有要求吗?需要符合哪些前提假设?
Answer
我知道的要求数据集是凸数据集,就是数据集内任意两点的连线上所有的点都在数据集内,否则分类效果就很差,这时候DBSCAN就比较合适了
K means没有严格的前提要求,但是如果数据不符合下面三个要求的话,K means得到的结果可能会比较奇怪:
1. 数据中每个变量的方差基本上要一样
2. 每一个cluster中每个变量都是近似正态分布(或者众数等于中位数的对称分布)
3. 每一个cluster中的元素个数要几乎一样
条件1和2就几乎保证了每个cluster看起来像是球形(而不是椭球形),而且是图的。
为什么条件3也很重要呢,可以看下面这个例子,尽管我们肉眼能看出三个稀疏程度不同的球状簇,但是K means却分成了三个样本数量相似的三个簇
既然说起聚类了,我倒真有些疑惑。
其实聚类的算法算的上比较简单的,解释性也算是比较好的。
但往往真实的业务场景会遇到一些问题,
我曾经就有些问题:
1。聚类共通性的问题,变量需要自己去确定,类别需要自己的决定,当然这个是历史遗留问题。算是老生常谈
2。真实的数据分布问题,我就遇到一个,大量的为0值,我就在想,0值要不要删,毕竟0值不像异常值,他也是代表大众化的数值。
3.因为0值的原因,以及非零值的离散过大。导致标准差也很大,量钢化之后整数据分布看起来依然很诡异,我还在这个情况会不会影响算法的收敛稳定,不过聚了几次,发现也挺稳定的
4.类别的问题,上面有一个说要类别差不多,真实的数据集不可能给你这种情况,低价值用户不必然是异常的多,同时其他类别的也是阶梯性的减少
我感觉K means不能用于离散变量,最好是连续变量
Question 1004292: 时序中的change point是什么意思?
统计/机器学习 无监督学习 时间序列时序中的change point是什么意思?是等同于异常点的吗?
Answer
change point不等同于异常点。
假如有一个时间序列$T=t_1t_2\cdots t_{100}$有100个点组成。如果$t_1,t_2,\cdots,t_{30}$服从某个分布$D_1$,$t_{31},t_{32},\cdots,t_{50}$服从某个分布$D_2$,$t_{51},t_{52},\cdots,t_{100}$服从某个分布$D_3$。那么整个时间序列就由三个分布构成,分布的切换点就是所谓的change point,比如$t_{31}, t_{51}$。
下面这个图中这个时间序列
A,B,C,D就是change point。
Question 1004340: PCA算法是一种保距算法吗?
统计/机器学习 无监督学习 数据降维PCA算是一种保距算法吗?
Answer
我并不觉得PCA能够保距,比如下图
原数据是二维的,PCA后的数据是一维的(在蓝色的斜线上)。有些点原来的距离并不近,但是PCA之后靠在了一起。
Question 1004405: 一个关于PCA与eigenvector的问题
统计/机器学习 无监督学习 数据降维 特征选择一个有3个features的矩阵,这三个feature相互独立并每一个都符合正态分布,copy一个feature,将此feature并入矩阵,组成4features矩阵,请问PCA之后得到的eigenvector里最大的值是多少?
感谢各位帮助,完全不知道 做
Answer
答案是1。
问题应该是“PCA之后得到的eigenvector里绝对值最大的值是多少”。
3个独立feature,求PCA时,会依次把方差第$i$大feature的单位向量作为第$i$个component, 最后PCA的eigenvector(component)是xyz轴的正交基(orthonormal)。所以x轴[+/-1 0 0]的最大绝对值为1.
当复制一个feature后,xy轴不变,z轴扩展为一个平面,x轴扩展为[+/-1 0 0 0],最大绝对值还是1.
做实验验证下:
import numpy as np
from sklearn.decomposition import PCA
np.random.seed(0)
n=100000
## Gaussian
A=np.random.multivariate_normal([0,0,0],np.diag([300,20,1]),n)
## Poisson
# A=np.zeros([n,3])
# for i in range(3):
# A[:,i]=np.random.np.random.poisson((i+1)*100,size=n)
pca = PCA(3)
pca.fit(A)
print('---3 features PCA---')
print('eigenvectors:')
print(pca.components_)
print('eigenvalues:')
print(pca.explained_variance_)
print('max abs element of eignvectors is %f'%max(abs(pca.components_.flatten())))
B=np.concatenate((A, A[:,-1].reshape([n,1])),axis=1)
pca1 = PCA(4)
pca1.fit(B)
print('---3+1 features PCA---')
print('eigenvectors:')
print(pca1.components_)
print('eigenvalues:')
print(pca1.explained_variance_)
print('max abs element of eignvectors is %f'%max(abs(pca1.components_.flatten())))
结果:
---3 features PCA---
eigenvectors:
[[ 9.99999758e-01 6.61747537e-04 -2.16070381e-04]
[ 6.61727522e-04 -9.99999777e-01 -9.26909242e-05]
[-2.16131671e-04 9.25479220e-05 -9.99999972e-01]]
eigenvalues:
[299.24945095 19.99189396 0.99597203]
max abs element of eignvectors is 1.000000
---3+1 features PCA---
eigenvectors:
[[ 9.99999734e-01 6.61746150e-04 -2.16794328e-04 -2.16794328e-04]
[ 6.61703761e-04 -9.99999772e-01 -9.78196862e-05 -9.78196862e-05]
[-3.06684953e-04 1.38135016e-04 -7.07106741e-01 -7.07106741e-01]
[-0.00000000e+00 5.26484535e-17 7.07106781e-01 -7.07106781e-01]]
eigenvalues:
[2.99249465e+02 1.99918941e+01 1.99194394e+00 2.49383447e-32]
max abs element of eignvectors is 1.000000
Question 1004444: 三维以上聚类都要先降维?10维数据直接聚类然后silhouette判断效果可以吗?
统计/机器学习 无监督学习 数据降维RT
不管是任何方法,三维以上直接聚类的话,好像是无法观察结果的。只能通过在低维度的投影来观察结果。或者通过silhouette plot来看结果是否正确可以吗?
Answer
你的聚类问题应该是没有外部信息来确认ground truth的情况。
参考一下这个不知道真实分类,怎么评价一个聚类算法?
如果你想可视化的话就必须要降维,比如t-sne,pca或者spectral clustering。如果不降维的话,你只能在低维观察,比如可以任选两组维度进行观测,然后多观测几组。
如果有真实分类,可以用rand index来判别聚类的效果;如果没有真实分类,就只能通过silhouette来看聚类的稳定性一致性。
聚类不一定要降维。
但是如果你想肉眼看聚类的效果的话,就需要降维。
从另一方面说,如果你肉眼很明显能看出聚类,那也不一定需要模型了吧,你人为设定几个边界就够了吧...
Question 1004524: 高斯混合模型里的隐变量是什么变量?
统计/机器学习 概率分布 无监督学习高斯混合模型里的隐变量是什么?具体是指哪一个变量?
Answer
指某个数据属于某个高斯成分(Gaussian component)的one-hot分类标签向量。比如$x_i$属于4个高斯成分中的第2个,$z_i=[0,1,0,0]^T$。它先验分布可以是多项分布,$z_i|\pi \sim \text{multinormial}(\pi)$。一般数据的分类标签是未知的,所以是隐藏变量。主要目的是加入分类标签状态,引入中间辅助变量,便于简化计算。
一般不能直接通过最大似然函数法求解高斯混合模型GMM,(因为$\log$中有加法,没法交换顺序)。可以用EM算法交替求解分类标签期望$E(z_i)$和模型参数$\pi,\mu,\Sigma$。其中$E(z_i)$是$x_i$属于各个高斯成分的概率。
隐变量是针对混合模型而言的。考虑特定的样本$x$,可以用$z_x$作為隐变量表示生成了$x$的那个混合组分。
每个样本都有一个隐变量,这个隐变量$W_{i,j}$是指第$i$个样本属于第$j$簇的概率。具体的数值是在EM算法的迭代中不停更新的。
具体可以看教程GMM与EM算法的Python实现
Question 1004612: 潜语义分析中,向量空间的表示是从哪里变换到哪里?
统计/机器学习 无监督学习 自然语言处理很抱歉问题可能没描述清楚。这张图来自于李航博士统计学习方法第二版的潜在语义分析的章节,我一直对向量空间基变换的内容不太理解。麻烦各位前辈帮我解释一下,画绿线这里为什么是从X通过T变成了Y,而不是从Y通过T变成X。因为我记得矩阵的左乘表示基坐标变换,那么按这个公式的顺序,为什么不是变换T作用到Y上,然后得到X呢?谢谢!
Answer
我感觉和你的想法一样。
$X\approx TY$应该就是$T$作为线性变换把$Y$中的列,也就是话题空间中的文本,映射到了$X$中的列,也就是单词空间中的文本。
他可能是笔误说反了。不过我也不确定我理解得正确不正确。
Question 1005312: 高斯混合模型对初始值敏感吗?
统计/机器学习 概率分布 无监督学习刚刚看了GMM与EM的教程,想到一个问题,在用EM求解GMM时,初始值(初始状态下各聚类的中心点)是敏感的吗?换句话说,会因为初始点选择不当导致最终没有收敛到全局最优吗?
Answer
对于GMM:
当分类标签已知时,complete data log likelihood是convex函数,有唯一全局最优。
当分类标签未知时,observed data log likelihood不是convex函数,有局部最优,此时EM 对初始值敏感。
参考murphy书的11.3.2。(把这一页贴上来,希望没版权问题。)
11.15式中$z_i$未知,需要用积分去掉$z_i$;其中两项都是convex,两个convex相减一般是nonconvex。
Question 1005429: 聚类中inertia什么意思?
统计/机器学习 无监督学习 描述性统计聚类中inertia什么意思?
Answer
inertia就是组内的方差和,其实就是等价于SSE。所有组内每个点到各个组中心点的距离的平方和。K-means里常用inertia
$$\sum_{i=1}^k \sum_{j_i=1}^d \|x_{j_i} - \mu _i \|_2^2$$
用elbow method的时候,y轴就是inertia。
Question 1005604: 可以把多个文档、段落向量直接加和求平均来获得新的表示向量吗?
统计/机器学习 无监督学习 深度学习 自然语言处理请教一下了解这方面内容的前辈:
比如说我现在有多个段落的表示向量,我现在想用某种方法把它们聚合起来,形成整篇文档的表示向量,有什么方法可以比较好地实现这个目的呢?我知道有把词向量求平均来获得句向量的方法,那么能否用相同的方法对一个文档向量进行更新呢?或者如果有相关的其他方法的文献请前辈告知一下~谢谢!
Answer
可以直接用doc2vec得到整篇文章的vector representation么?
也可以按照你说的,直接求平均值。
Question 1005715: KMeans++是怎么选初始点的?
统计/机器学习 无监督学习KMeans++是Kmeans的改进,改进的地方主要是在选初始点,但是没有搞明白到底是怎么选初始点的?
谢谢!
Answer
根据Kmeans++
先随机选一点作为$C_1$;
$D(x_i)=|x_i-C_1|^2$, $D(x_i)$越大,有更大概率被选为下一个中心点$C_2$;
$D(x_i)=min({|x_i-C_k|^2}), k=1,2$,$D(x_i)$越大,有更大概率被选为下一个中心点$C_3$;
...
直到选出$C_K$。
Question 1006112: GMM和KMeans哪个快一点?
统计/机器学习 无监督学习 计算复杂度请问各位高手,GMM和KMeans哪个快一点?
Answer
肯定是kmeans快
gmm要计算每个数据点分配到各个聚类的概率,然后再利用这个概率再迭代高斯分布的参数
kmeans就只要计算每个数据点所在的聚类就好了
k越大,gmm慢得越明显
KMeans快
Question 1007554: kmeans可以做并行化计算达到加速效果吗?
统计/机器学习 无监督学习kmeans可以做并行化计算达到加速效果吗?上周面试被问的题目,没什么思路,谢谢
Answer
可以并行。Kmeans分两步,第一步算n个点到k个中心的最小距离,数据点间计算不相关,可以用m个进程并行计算m个点的最小距离。第二步更新k个中心点时,要连续使用n个点数据,加法运算有顺序,不能并行。
可以的,有分布式聚类算法DK-means
https://wenku.baidu.com/view/db713dd38e9951e79b8927a2.html
Question 1022027: kmeans可以用在三维数据上吗?
统计/机器学习 无监督学习kmeans是只能用在二维数据上吗,可以用在三维数据上吗?
Answer
当然可以的,k均值算法对数据的维度没有任何限制。
一般为了演示的方便,所以都用二维数据作为例子。k均值算法完全可以用在高维数据上,但是要注意的是如果数据是非常高维的,kmeans的效果可能不好(参考K Means算法的缺点)
取决于你的维度有多高,4,5维应该是没什么问题。
如果维度非常高,你需要先降维
Question 1022445: dbscan 中的参数值如何确定?
统计/机器学习 无监督学习dbscan中的参数值有没有比较好的确定方法
Answer
只有一些经验规律:
- 数据量越大,选择的聚合点越多
- 数据量噪音越大,选择的聚合点越多
- 聚合点一般大于等于数据维度
- 对于2维数据,建议使用4
- 对于多于二维数据,初始可以从 (2*维度) 调起
然后距离设定的话,https://iopscience.iop.org/article/10.1088/1755-1315/31/1/012012/pdf,这篇文章给了个方案,就是求出数据集每两个点的距离,然后按照距离绘制图案,找到拐点最大的距离,就是最优的分离出所有点的距离。
Question 1655929: 主成分分析法(PCA)算是黑盒算法吗?
统计/机器学习 无监督学习 数据降维Answer
PCA这种降维方式是把原来的m个变量,进行糅杂,缩减到n个新组建的变量上。至于新组建的变量又是原变量的线性组合。线性组合本身具有可解释性,但是这些变量硬组合在一起,基本上是无法理解的。我觉得是类似黑盒的。
举个例子,比如说对一个商品数据进行pca降维,其中一个新变量是 2*商品价格 - 0.5*商品重量 + 1.2*商品销量;这种情况下,就完全没有可解释性了。
特征选择是从已存在的特征中选取携带信息最多的,选完之后的特征依然具有可解释性,我们依然知道这个特征在原数据的哪个位置,代表着原数据上的什么含义。
PCA是降维算法,将已存在的特征进行压缩,降维完毕后的特征不是原本的特征矩阵中的任何一个特征,而是通过某些方式组合起来的新特征。通常来说,在新的特征矩阵生成之前,我们无法知晓降维算法们都建立了怎样的新特征向量,新特征矩阵生成之后也不具有可读性。
PCA一般不适用于探索特征和标签之间的关系的模型(如线性回归),因为无法解释的新特征和标签之间的关系不具有意义。在线性回归模型中,我们更倾向于用特征选择。
来自sofasofa(一个专业的机器学习社区),建议去sofa社区阅读,这里只是记录。防止网站在网络中走失。