python——k-means聚類(餘弦距離,用輪廓係數確定聚類係數K)
阿新 • • 發佈:2018-12-31
用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()