谱聚类python实践

#coding=utf-8

import numpy as np
from sklearn.cluster import SpectralClustering
import matplotlib.pyplot as plt
import sklearn.datasets as ds
import matplotlib
from sklearn.metrics import calinski_harabaz_score
from sklearn.neighbors import KNeighborsClassifier
matplotlib.rcParams['font.sans-serif'] = [u'SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False 

colors =['black','lightcoral','orange','tan','lightgreen','cornflowerblue','lime','cyan','purple','yellow','fuchsia','darkblue','plum','palegreen','pink']

#生成数据
data,y = ds.make_blobs(300, n_features=2, centers=3, cluster_std=[1,0.5,1],random_state=3)

#绘制原始图形
plt.subplot(211)
plt.title(u"原始图形")
for i in range(3):
    plt.scatter(data[y==i][:,0],data[y==i][:,1],color=colors[i+4])


#开始聚类
#第一步利用ch指标来调参,CH越大代表着类自身越紧密,类与类之间越分散,即更优的聚类结果。
#假设我们不知道聚类的数目,那么我们就要使用交叉验证了
n_cluster = [2,3,4,5,6]
gamma = [0.0001,0.001,0.01,0.1,10]

for i in n_cluster:
    for j in gamma:
        model = SpectralClustering(n_clusters=i,gamma=j)
        model.fit(data)
        score = calinski_harabaz_score(data,model.labels_)
        print "簇数:",i,"sigmma:",j,"ch指数:",score
        
#可知当簇数为3.gamma为0.01,0.1时聚类效果越好。
#绘制聚类的结果
model = SpectralClustering(n_clusters=3,gamma=0.01)
model.fit(data)
pre_y = model.labels_
plt.subplot(212)
plt.title(u"聚类结果")
for i in range(3):
    plt.scatter(data[pre_y==i][:,0],data[pre_y==i][:,1],color=colors[i])
plt.show()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值