2017-08-30 90 views
0

運行KMEANS我想用五個特點運行K均值聚類算法。 (K = 4)不過,我得到一個索引錯誤說這:IndexError:列表索引超出範圍,而在Python

> Traceback (most recent call last): 
> File 
> "C:\....py", line 756, 
> in <module> 
>  plt.plot(X[i][0],X[i][1],colors[labels[i]],markersize=10) 
>  IndexError: list index out of range 

這裏有一個代碼片段正在生成錯誤:

from sklearn.cluster import KMeans 
import matplotlib.pyplot as plt 

kmeans = KMeans(n_clusters=4) 
kmeans.fit(X) 

centroid = kmeans.cluster_centers_ 
labels = kmeans.labels_ 

fig = plt.figure(figsize=(9,7), dpi=100) 

colors = ["r.","b.","y."] 

df_clustering = [] 

for i in range(len(X)): 
    print ("ID:", df_features['id'].loc[[i]].values[0], "coordinate:" , X[i], "label:", labels[i]) 
    df_clustering.append((df_features['id'].loc[[i]].values[0], labels[i])) 

    # below line is generating an error 
    plt.plot(X[i][0],X[i][1],colors[labels[i]],markersize=10) 
+0

顯然,清單'X'的一個或'labels'在這話說出來索引的範圍時。檢查'X'和'labels'的長度以確保您的通話正確無誤。 – rojeeer

+0

兩者都返回136,當k = 3時返回的值相同。而且,當索引值是27時,它停在那裏。什麼可能是其他可能的原因? – ejshin1

回答

0

您使用的4類,但colors是長度3.因此,對於分配給簇4的任何數據點(即,labels[i] == 3),將會有一個IndexError

+0

哇,謝謝!這是問題所在。 – ejshin1

相關問題