塞班岛娱乐-业界公认的最权威网站,欢迎光临!

塞班岛娱乐_塞班岛娱乐平台_塞班岛娱乐官网

5个指标支持聚类数为2

时间:2018-03-01 13:18来源:吉如意 作者:一冰 点击:
然后选择一种可信度较高的聚类数目 gap-Statistic跑不出结果 可见上述方法中有的因为数据太大不能运行,相对靠谱 轮廓系数Averagesilhouette聚类2类 Affinitypropagation (AP) clustering 聚成28类,明

然后选择一种可信度较高的聚类数目

gap-Statistic跑不出结果

可见上述方法中有的因为数据太大不能运行,相对靠谱

轮廓系数Averagesilhouette聚类2类

Affinitypropagation (AP) clustering 聚成28类,明显不行

Calinskycriterion聚成2类

fpc包中的pamk函数聚成2类,14种模型只有6种有结果

SSE可以运行

bclust报错

mclust效果很差,剩下6种全都是给出最佳聚类数为3

选用上次文本挖掘的矩阵进行分析(667*1623)

除了Affinitypropagation (AP) clustering 给出最佳聚类数为15,虽然可以得出大致的最佳聚类数,需要人工判定,以上10种判定方法中:

层次聚类和clustergram方法、肘点图法,就第二股拆成了2类,第一股和第三股几本没变,k=3到k=4时,机器学习原理。说明k=7时效果并不好。按照这个分析,线完全乱了,而现在可以看到从7到8,有一簇分成了两股,其他6类都每怎么变。反应到图中应该是有6簇平行线,学习支持。那分成8类时应该可能只是某一类分成了两类,假设k=7是很好的聚类数,分出来的线越少说明在该k值下越稳定。比如k=7到k=8,图肯定是越到后面越密集。通过这个图判断最佳聚类数目的方法应该是看随着K每增加1,从最开始的两类到最后的八类,直接放出运行代码的截图。

wine数据集我们知道其实是分为3类的,所以k=3是最佳聚类数目

方法汇总与比较

随着K的增加,因为源代码有点长我就不放博客里面了,可以去Galili介绍页面)里面的github地址找到源代码跑一遍然后就可以用这个函数了,听听机器学习原理。所有成员是如何分配到各个类别的。该代码没有被制作成R包,机器学习原理。绘制随着聚类数目的增加,事实上机器学习原理。很明显在共同父节点的一颗子树可以被聚类为一个类

Loading required package: plyr

Loading required package: colorspace

clustergram(dataset, k.range = 2:8, line.width = 0.004)

最后一种算法是TalGalili[10]大牛自己定义的一种聚类可视化的展示,很明显在共同父节点的一颗子树可以被聚类为一个类

10.clustergram

rect.hclust(h_clust,3)

plot(h_clust, hang = -1, labels = FALSE)

h_clust<-hclust(h_dist)

h_dist <- dist(as.matrix(dataset))

层次聚类是通过可视化然后人为去判断大致聚为几类,想知道指标。所以最佳聚类数为3

9.层次聚类

可以看到也是在聚类数为3的时候gap值取到了最大值,Gap最大值对应的k值就是最佳聚类数

fviz_gap_stat(gap_clust)

library(factoextra)

[10,] 4. 5. 0. 0.0

[9,] 4. 5. 0. 0.0

[8,] 4. 5. 0. 0.0

[7,] 4. 5. 0. 0.0

[6,] 4. 5. 0. 0.0

[5,] 4. 5. 0. 0.0

[4,] 5.0 5. 0. 0.0

[3,] 5.0 5. 0. 0.0

[2,] 5. 5. 0. 0.0

[1,] 5. 5. 0. 0.0

logWE.logWgapSE.sim

--> Number of clusters (method'firstSEmax', SE.factor=1): 3

B=500 simulated reference sets, k = 1..10;spaceH0="scaledPCA"

clusGap(x = dataset, FUNcluster = kmeans, K.max = 10, B =500,verbose = interactive())

Clustering Gap statistic ["clusGap"] from call:

gap_clust

gap_clust <- clusGap(dataset, kmeans, 10, B = 500,verbose = interactive())

set.seed(123)

library(cluster)

通过这个式子来找出Wk跌落最快的点,因此斯坦福大学的Robert等教授提出了GapStatistic方法,肘点的选择并不是那么清晰,该种方法是通过找“肘点”来找到最佳聚类数,所以最佳聚类数为3

取对数的原因是因为Wk的值可能很大

之前我们提到了WSSE组内平方和误差,所以最佳聚类数为3

8. Gap Statistic

可以看到也是在聚类数为3时轮廓系数达到了峰值,轮廓系数值越大,组间距离越远——也就是说,值越大说明组内吻合越高,s(i)范围从-1到1,可以数出来“叶子节点”一共15个

fviz_nbclust(dataset, kmeans, method = "silhouette")

library(factoextra)

require(cluster)

a(i)是测量组内的相似度,b(i)是测量组间的相似度,听听机器学习原理。可以数出来“叶子节点”一共15个

轮廓系数是类的密集与分散程度的评价指标。

7. 轮廓系数Average silhouette method

选x或者y方向看(对称),再用热力图可视化一下

heatmap(ap_clust)

该聚类方法推荐的最佳聚类数目为15,直到产生m个高质量的Exemplar(类似于质心),听说机器学习原理。分别是吸引度(responsibility)和归属度(availability)。AP算法通过迭代过程不断更新每一个点的吸引度和归属度值,共有两种消息在各节点间传递,然后通过网络中各条边的消息传递计算出各样本的聚类中心。聚类过程中,因此也放到这里作为一种计算最佳聚类数目的方法。

length(ap_clust@clusters)

ap_clust <- apcluster(negDistMat(r=2),dataset)

library(apcluster)

AP算法的基本思想是将全部样本看作网络的节点,会自动算出最佳聚类数,相比看5个指标支持聚类数为2。因为不需要像kmeans一样提供聚类数,是一种聚类方法,所以最佳数目为3

这个本质上是类似kmeans或者层次聚类一样,calinski指标达到了最大值,把数据取出来自己单独画一下

6.Affinity propagation (AP) clustering

这个看上去直观多了。这就很清晰的可以看到在聚类数目为3时,事实上机器学习原理。自带的绘图横轴纵轴取的可能不符合我们的直觉,可以看到calinski在聚类数为3时达到最大值。

"Removed 1 rows containing missing values (geom_path)."

Warning message:

ggplot(calinski,aes(x = calinski[,2], y = calinski[,1]))geom_line()

library(ggplot2)

calinski$cluster <- c(1:10)

calinski<-as.data.frame(ca_clust$results[2,])

注意到那个红点就是对应的最大值,可以看到calinski在聚类数为3时达到最大值。

plot(fit, sortg = TRUE, grpmts.plot = TRUE)

画图出来观察一下

calinski.best

calinski.best <-as.numeric(which.max(ca_clust$results[2,]))

可以看到该函数把组内平方和误差和Calinsky都计算出来了,所以Calinskycriterion值一般来说是越大,SSb越大聚类效果越好,SSw越小,SSb是组与组之间的平方和误差,SSw是我们之前提到过的组内平方和误差,N是样本数,机器学习原理。k是聚类数,这里也得到为3

ca_clust$results

ca_clust <- cascadeKM(dataset, 1, 10, iter =1000)

library(vegan)

其中,也会直接自动计算出最佳聚类数,也叫k-medoidsclustering

这个评估标准定义[5]如下:

5.Calinsky criterion

clusplot(pam(dataset, pamk.best$nc))

library(cluster)

得到聚类数提供给cluster包下的pam函数并进行可视化

pamk函数不需要提供聚类数目,一个改进的方法就是PAM算法,很可能这种孤立的点就聚为一类,那么对于异常点其实对其的影响非常大,所以最佳聚类个数选为三

pamk.best$nc

pamk.best <- pamk(dataset)

library(fpc)

首先通过fpc包中的pamk函数得到最佳聚类数目

k-means算法取得是均值,之后下降得很慢,从一类到三类下降得很快,存在得这个“肘点”就是最佳聚类数目,机器学习原理。就认为进一步增大聚类数效果也并不能增强,但WWS减少得很缓慢时,所以关注的是斜率的变化,机器学习原理。因此WSS值肯定是随着聚类数目增多而减少的,距离越来越近,每一个类别中数量越来越少,自定义的一个求组内误差平方和的函数。

4. PAM(Partitioning Around Medoids) 围绕中心点的分割算法

fviz_cluster(km.res, data = dataset)

km.res <- kmeans(dataset,3)

用该包下的fviz_cluster函数可视化一下聚类结果

选定为3类为最佳聚类数目

Loading required package: ggplot2

geom_vline(xintercept = 3, linetype = 2)

fviz_nbclust(dataset, kmeans, method = "wss")

set.seed(1234)

library(ggplot2)

library(factoextra)

另外也有现成的包(factoextra)可以调用

随着聚类数目增多,这里就用一个最简单的指标——sum of squared error(SSE)组内平方误差和来确定最佳聚类数目。这个方法也是出于《R语言实战》,所以该方法推荐的最佳聚类数目为3.

wssplot(dataset)

ylab="Within groups sum of squares")}

plot(1:nc,wss, type="b", xlab="Number of Clusters",

wss[i] <- sum(kmeans(data,centers=i)$withinss)

set.seed(seed)

for (i in2:nc){

wss<- (nrow(data)-1)*sum(apply(data,2,var))

wssplot <- function(data, nc=15, seed=1234){

想必之前动辄几十个指标,5个指标支持聚类数为2,机器学习原理。每次跑得结果可能不同

3. 组内平方误差和——拐点图

可以看到有16个指标支持最佳聚类数目为3,所以如果不设定种子,最后选择指标支持数最多的聚类数目就是最佳聚类数目。

barplot(table(nb_clust$Best.nc[1,]),xlab = "聚类数",ylab ="支持指标数")

*******************************************************************

* According to the majority rule, the best number of clustersis3

***** Conclusion*****

* 3 proposed 15 as the best number of clusters

* 1 proposed 14 as the best number of clusters

* 1 proposed 12 as the best number of clusters

* 1 proposed 10 as the best number of clusters

* 16 proposed 3 as the best number of clusters

* 5 proposed 2 as the best number of clusters

* Among allindices:

*******************************************************************

the measure.

second differences plot) that corresponds to a significant increaseof the value of

In the plot of D index, we seek a significant knee (the significantpeak in Dindex

*** : The D index is a graphical method of determining the numberof clusters.

index second differences plot.

significant increase of the value of the measure i.e thesignificant peak in Hubert

In the plot of Hubert index, we seek a significant knee thatcorresponds to a

*** : The Hubert index is a graphical method of determining thenumber of clusters.

index = "alllong", alphaBeale = 0.1)

min.nc=2, max.nc=15, method = "kmeans",

nb_clust <- NbClust(dataset,distance = "euclidean",

set.seed(1234) #因为method选择的是kmeans,看着机器学习原理。然后通过这些指标看分别在聚类数为多少时达到最优,然后聚类数目从2遍历到15(自己设定),也是定义了几十个评估指标,思想和mclust包比较相近,与贝叶斯信息准则值越小模型越好的结论并不冲突

library(NbClust)

Nbclust包是我在《R语言实战》上看到的一个包,看看机器学习原理。所以这里是BIC值越大越好,这里的BIC与极大似然估计是成正比的,可以看到,这里是作者自己定义的BIC,此BIC非彼BIC,那么BIC值确实是越小模型效果越好

2.Nbclust包

这是Mclust包里面作者定义的“BIC值”,极大似然估计是值越大越好,Mclust包里面的BIC并不是贝叶斯信息准则。机器学习原理。

2.Mclust包中的BIC定义[3]

与log(likelihood)成反比,对比一下机器学习原理。之前这里误导大家了,然后和老师探讨了这个问题,5个指标支持聚类数为2。顿时想起这里是在图中BIC极大值为最佳聚类数目,机器学习原理。说BIC值越小模型效果越好,这个包值得好好把玩。

1.维基上的贝叶斯信息准则定义

最近上课老师讲金融模型时提到了BIC值,这个包值得好好把玩。

注意:此BIC并不是贝叶斯信息准则!!!

mclust包还可以用于分类、密度估计等,其他的12模型数基本上都是在聚类数目为3的时候达到峰值,知道BIC值越大则说明所选取的变量集合拟合效果越好上图中除了两个模型一直递增,先按下不表,机器学习原理。研究清楚这些又是非常复杂的问题了,效率低。

它们应该分别代表着相关性(完全正负相关——对角线、稍强正负相关——椭圆、无关——圆)等参数的改变对应的模型,但是弊端也就显然易见了——时间复杂度太高,这种方法的思想很直接了当,最终确定最佳聚类数目,每一种模型都计算聚类数目从1到20的BIC值,然后一共14种模型,比如我选取的从1到20,聚类数目自定义,可以进行聚类、分类、密度分析

下表是这些模型的意义

plot(m_clust, "BIC")

可见该函数已经把数据集聚类为3种类型了。数目分别为63、51、64。机器学习原理。再画出14个指标随着聚类数目变化的走势图

63 51 64

Clustering table:

-3032.45 178 156 -6873.257 -6873.549

log.likelihoodndfBICICL

Mclust EVE (ellipsoidal, equal volume and orientation) model with 3components:

Gaussian finite mixture model fitted by EMalgorithm

summary(m_clust)

m_clust <- Mclust(as.matrix(dataset), G=1:20)#聚类数目从1一直试到20

library(mclust)

Mclust包方法有点“暴力”,每次导入时有一种科技感 :)帮助文档非常详尽,也是上课时老师给我们介绍的一个包,下面就一一介绍各种确定最佳聚类数目的方法

mclust包是聚类分析非常强大的一个包,下面就一一介绍各种确定最佳聚类数目的方法

1.mclust包

判定方法

去掉标签之后就可以开始对数据集进行聚类分析了,所以需要归一化,这样会造成误差,从1到100多都有,因此去掉第一列。

dataset <- scale(dataset)

dataset <- wine[,-1] #去除分类标签

同时注意到每一列的值差别很大,所以不需要第一列的种类标签信息,大多泛泛带过。今天把看到的这么多方法进行汇总以及代码实现并尽量弄清每个方法的原理。

因为我们要找一个数据集进行聚类分析,看了很多博客,总不能两眼一抹黑乱填一个吧。之前也被这个问题困扰过,比如kmeans函数就要你提供聚类数目这个参数, Loading required package: cluster

head(wine)

data(wine)

library(gclus)

数据集选用比较出名的wine数据集进行分析

在聚类分析的时候确定最佳聚类数目是一个很重要的问题,

(责任编辑:admin)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
最新评论 进入详细评论页>>
推荐内容