【问题标题】:Restriction in Kmeans algorithm in pythonpython中Kmeans算法的限制
【发布时间】:2020-04-21 01:32:10
【问题描述】:

我有下一个代码,但我不知道如何对距离设置一个限制?例如, 将 2 公里范围内的人分组。

from sklearn.cluster import KMeans
from sklearn import metrics
import numpy as np

v1=[3, 1, 1, 2, 1, 6, 6, 6, 5, 6, 7, 8, 9, 8, 9, 9, 8]
v2=[5, 4, 6, 6, 5, 8, 6, 7, 6, 7, 1, 2, 1, 2, 3, 2, 3]

x1 = np.array(v1)
x2 = np.array(v2)

X = np.array(list(zip(x1, x2))).reshape(len(x1), 2)
print(X)

import matplotlib.pyplot as plt
plt.plot(v1, v2, 'ro')
plt.axis([1, 9, 1, 8]) #Eje x: de 1 a 9; Eje Y: de 1 a 8
plt.show()

K = 3 
kmeans_model = KMeans(n_clusters=K).fit(X)

for i, l in enumerate(kmeans_model.labels_):
print("(x1,x2) -> Clase")
print("({0},{1}) ->:{2}".format(x1[i], x2[i], l))

另一方面,我也使用 Pandas,

from sklearn.cluster import KMeans
from pandas import DataFrame
from sklearn import metrics
import numpy as np

Data = {'e' : [3, 1, 1, 2, 1, 6, 6, 6, 5, 6, 7, 8, 9, 8, 9, 9, 8],
'r' : [5, 4, 6, 6, 5, 8, 6, 7, 6, 7, 1, 2, 1, 2, 3, 2, 3]}

df = DataFrame(Data, columns=['e','r'])
print(df)

kmeans2 = KMeans(n_clusters=1650).fit(df)
centroids = kmeans2.cluster_centers_
print(centroids)
plt.scatter(df['e'], df['r'], c=kmeans2.labels_.astype(float), s=50, alpha=0.5)
plt.scatter(centroids[:,0], centroids[:,1], c='blue', s=50)
plt.show() 

【问题讨论】:

  • 我认为这对 kmeans 没有意义。您可以有一个属于两个单独标签的点。最终目标是什么?
  • 我想做一组,例如我有一个质心,我想做一个半径为 2 公里的组。

标签: python k-means


【解决方案1】:

在这种情况下,为什么不使用 pandas 并按条件分配组?

像这样的

df = pd.DataFrame(data)
df1 = df[df.column2 > 2]
df2 = df[df.column2 <= 2]

【讨论】:

  • 是的,我也用过 pandas,我把带有 pandas 的代码放在了问题中。
  • 也许你可以告诉我如何在我的代码中添加这些条件。非常感谢!
  • 我不明白什么是df.column2
猜你喜欢
  • 2019-05-28
  • 2020-03-09
  • 1970-01-01
  • 2012-08-06
  • 2021-08-14
  • 2019-12-21
  • 2017-01-07
  • 2021-05-04
  • 2019-12-22
相关资源
最近更新 更多