因此,我还是一个新手,尝试使用python-2.7实现集群问题的初始化方法。
步骤如下:
使用公式计算所有数据到其最近质心的概率
p(x)=D(x)**2/和(D(x)**2),其中D(x)是从数据[x]到最近质心的欧氏距离
选取p(x)最高的数据,然后循环回到第2位。
但当我尝试附加数据时,有时会出现这样的错误“IndexError:list index out of range”,有时代码可以工作,但只给出2个不同的质心,第3到n个质心给出的值与第2个质心相同。你知道吗
我哪里做错了?你知道吗
(编辑:我编辑了步骤,因为我错了)
def pickcentroid(df):
x = df.values.tolist()
n_klas = 3
# random.seed(2)
idx_pusat_pertama = random.randint(0, len(df))
centroid = []
centroid_idx = []
centroid.append(x[idx_pusat_pertama])
centroid_idx.append(idx_pusat_pertama)
prob_data = []
while len(centroid) < n_klas:
ac_mindist = 0
for i in x:
dist_ke_c = []
for c in centroid:
dist_ke_c.append(dist(i,c))
ac_mindist += min(dist_ke_c)**2
for idx in range(len(df)) :
if idx not in centroid_idx:
dist_ke_c2 = []
mindist_per_data = 0
for c in centroid:
dist_ke_c2.append(dist(x[idx],c))
mindist_per_data = min(dist_ke_c2)**2
prob_data.append(mindist_per_data/ac_mindist)
else:
prob_data.append(0)
new_cen_idx = prob_data.index(max(prob_data))
centroid_idx.append(new_cen_idx)
centroid.append(x[new_cen_idx])
print(centroid)
return centroid
def dist(x,y):
r = np.array(x) - np.array(y)
distance = np.linalg.norm(r)
# print(distance)
return distance
c = pickcentroid(df)
数据如下:
-0.19864726098025476,-0.2174575876560727
-0.19427576174137176,-0.2658220115362011
0.24385376109048476,0.1555938625346895
-0.23636704446757748,0.14005058641250595
0.37563103051045826,0.33204816285389527
-0.13210748354848134,-0.0019122205360639893
-0.17120654390561796,0.04231258139538708
0.2865229979171536,0.34175192153482764
-0.328896319205639,-0.22737124434792602
0.03115098005450885,0.17089336362457433
非常感谢你的帮助
randint(a, b)
返回从a
到b
的随机整数,包括b
。因此,当使用randint(0, len(x))
时,可能会将值len(x)
作为输出,当用作索引时,该值超出范围。你知道吗对于您的用例,您可以使用
random_value = random.choice(x)
。你知道吗相关问题 更多 >
编程相关推荐