1. 程式人生 > >python——k-means聚類(餘弦距離,用輪廓係數確定聚類係數K)

python——k-means聚類(餘弦距離,用輪廓係數確定聚類係數K)

    用scikit-learn進行k-means聚類,預設使用歐式距離,為了用餘弦距離作為度量,找了一個在生物資訊學裡比較常用的庫:Biopython。Biopython為k-means聚類提供了各種距離函式,包括餘弦距離、皮爾遜相似度量、歐式距離等。

    另外,為了確定一個合理的聚類係數,採用輪廓係數作為衡量標準:

    輪廓係數取值為[-1, 1],其值越大越好。

from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
from Bio.Cluster import kcluster
from Bio.Cluster import clustercentroids
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
data=np.load('/home/philochan/ResExp/genderkernel/1.npy')
coef = []
x=range(3,20)
for clusters in x:
    clusterid, error, nfound = kcluster(data, clusters, dist='u',npass=100)
    silhouette_avg = silhouette_score(data, clusterid, metric = 'cosine')
coef.append(silhouette_avg) e =[i+3 for i,j in enumerate(coef) if j == max(coef)] print e print coef plt.plot(x,coef) plt.show()