用Python编写KMeans聚类算法时遇到的问题

问题描述

我试图编写一个基本程序,以使用K-Means将 iris数据集聚类为4个聚类。我不知道为什么它真的不好。谁能告诉我为什么它不起作用。

这是我的代码

import pandas as pd
import numpy as np
import random

from sklearn.datasets import load_iris
iris= load_iris()
Iris1= pd.DataFrame(iris.data)
Iris= Iris1.copy()
rn= random.sample(range(150),4)
rn.sort()
rn

然后(c1是cluster1,x1是其中心):

 x1= iris.data[rn[0]]
 x2= iris.data[rn[1]]
 x3= iris.data[rn[2]]
 x4= iris.data[rn[3]]

c1= np.array(iris.data[rn[0]])
c2= np.array(iris.data[rn[1]])
c3= np.array(iris.data[rn[2]])
c4= np.array(iris.data[rn[3]])
print(c1,c2,c3,c4)



for k in range(146):
    d=[]
    for j in np.arange(150):
        d.append((np.sum((x1- Iris.values[j])**2))**0.5)
    for j in np.arange(150):
        d.append((np.sum((x2- Iris.values[j])**2))**0.5)
    for j in np.arange(150):
        d.append((np.sum((x3- Iris.values[j])**2))**0.5)
    for j in np.arange(150):
        d.append((np.sum((x4- Iris.values[j])**2))**0.5)
    s=np.asarray(d)
    y= s > 0
    x= s[y].argmin()
    if x < 150:
        c1= np.vstack((c1,iris.data[x]))
        x1= np.array([c1[:,0].mean(),c1[:,1].mean(),2].mean(),3].mean()])
        Iris.values[x]=np.nan
    elif 149 < x < 300:
        c2= np.vstack((c2,iris.data[x-150]))
        x2= np.array([c2[:,c2[:,3].mean()])
        Iris.values[x-150]=np.nan
    elif 299 < x < 459:
        c3= np.vstack((c3,iris.data[x-300]))
        x3= np.array([c3[:,c3[:,3].mean()])
        Iris.values[x-300]=np.nan
    else:
        c4= np.vstack((c4,iris.data[x-450]))
        x4= np.array([c4[:,c4[:,3].mean()])
        Iris.values[x-450]=np.nan 

print(c1)
print(c2)
print(c3)
print(c4)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)