scikit-learn 学习谱聚类SpectralClustering

谱聚类可看作是一种降维的方法。

class sklearn.cluster.SpectralClustering()


参数:

 n_clusters:切图时降到的维数

affinity:相似矩阵的建立方式。'nearest_neighbors':k-近邻,'precomputed':自定义,全连接方式,常用高斯核'rbf',多项式'poly',sigmoid函数'sigmoid'

 eigen_solver:特征值求解的策略,{None, ‘arpack’, ‘lobpcg’, or ‘amg’}

 eigen_tol:如果eigen_solver使用了arpack’,则需要通过eigen_tol指定矩阵分解停止条件

 gamma:核函数参数,如果在affinity里使用了全连接方式,核函数,需要利用该参数对核函数进行调参。

  degree:当使用了多项式作为核函数时,对该参数进行调参,默认为3

  coef:当核函数为多项式或者sigmoid函数时进行调整,默认为1

  n_neighbors:当affinity设置为'nearest_neighbors'时,该参数作为设置近邻数量

assign_labels:最后使用的聚类方式:{‘k-means’,'discritize'}


返回:

affinity_matrix_:用于聚类的相似矩阵

labels_:


 

示列代码:

import numpy as np
from sklearn import datasets
X=datasets.load_iris()
#print(X)
#查看默认的谱聚类效果
from sklearn.cluster import SpectralClustering
spectral=SpectralClustering()
pred_y=spectral.fit_predict(X.data)
from sklearn import metrics
print("Calinski-Harabasz Score",metrics.calinski_harabaz_score(X.data,pred_y))
"""
Calinski-Harabasz Score 438.286953256
"""

#默认使用的是高斯核,需要对n_cluster和gamma进行调参,选择合适的参数
scores=[]
s=dict()
for index,gamma in enumerate((0.01,0.1,1,10)):
    for index,k in enumerate((3,4,5,6)):
        pred_y=SpectralClustering(n_clusters=k).fit_predict(X.data)
        print("Calinski-Harabasz Score with gamma=",gamma,"n_cluster=",k,"score=",metrics.calinski_harabaz_score(X.data,pred_y))
        tmp=dict()
        tmp['gamma']=gamma
        tmp['n_cluster']=k
        tmp['score']=metrics.calinski_harabaz_score(X.data,pred_y)
        s[metrics.calinski_harabaz_score(X.data,pred_y)]=tmp
        scores.append(metrics.calinski_harabaz_score(X.data,pred_y))
print(np.max(scores))
print("最大得分项:")
print(s.get(np.max(scores)))
"""
Calinski-Harabasz Score with gamma= 0.01 n_cluster= 3 score= 558.91617342
Calinski-Harabasz Score with gamma= 0.01 n_cluster= 4 score= 526.594543218
Calinski-Harabasz Score with gamma= 0.01 n_cluster= 5 score= 493.129509828
Calinski-Harabasz Score with gamma= 0.01 n_cluster= 6 score= 473.659126731
Calinski-Harabasz Score with gamma= 0.1 n_cluster= 3 score= 558.91617342
Calinski-Harabasz Score with gamma= 0.1 n_cluster= 4 score= 526.594543218
Calinski-Harabasz Score with gamma= 0.1 n_cluster= 5 score= 493.129509828
Calinski-Harabasz Score with gamma= 0.1 n_cluster= 6 score= 473.659126731
Calinski-Harabasz Score with gamma= 1 n_cluster= 3 score= 558.91617342
Calinski-Harabasz Score with gamma= 1 n_cluster= 4 score= 526.594543218
Calinski-Harabasz Score with gamma= 1 n_cluster= 5 score= 493.129509828
Calinski-Harabasz Score with gamma= 1 n_cluster= 6 score= 473.659126731
Calinski-Harabasz Score with gamma= 10 n_cluster= 3 score= 558.91617342
Calinski-Harabasz Score with gamma= 10 n_cluster= 4 score= 526.594543218
Calinski-Harabasz Score with gamma= 10 n_cluster= 5 score= 493.129509828
Calinski-Harabasz Score with gamma= 10 n_cluster= 6 score= 473.659126731
558.91617342
最大得分项参数:
{'gamma': 10, 'n_cluster': 3, 'score': 558.91617342043787}

得到的Calinski-Harabasz分数值ss越大则聚类效果越好,参数如上
"""

 

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

君子慎独_诚意

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值