【发布时间】:2018-05-09 05:55:08
【问题描述】:
我有以下数据:
import pandas as pd
import random
import matplotlib.pyplot as plt
df = pd.DataFrame()
df['x'] = [3, 2, 4, 3, 4, 6, 8, 7, 8, 9]
df['y'] = [3, 2, 3, 4, 5, 6, 5, 4, 4, 3]
df['val'] = [1, 10, 1, 1, 1, 8, 1, 1, 1, 1]
k = 2
centroids = {i + 1: [np.random.randint(0, 10), np.random.randint(0, 10)] for i in range(k)}
plt.scatter(df['x'], df['y'], color='blue')
for i in centroids.keys():
plt.scatter(*centroids[i], color='red', marker='^')
plt.show()
我想将初始质心放在具有最高值的数据点上。那么,在这种情况下,质心应该位于坐标为 (2, 2) 和 (6, 6) 的数据点上。
x y val
0 3 3 1
1 2 2 10
2 4 3 1
3 3 4 1
4 4 5 1
5 6 6 8
6 8 5 1
7 7 4 1
8 8 4 1
9 9 3 1
【问题讨论】:
-
你在使用来自 scikit learn 的
KMeans估计器吗?如果是这样,您可以传递一个给出初始中心的数组。请参阅init参数here。或者您是在问如何首先构建该数组? -
@MarkDickinson 是的,我在问如何编写 python 代码让我将质心放在具有最高值的节点上,因为我在这里没有使用 scikit learn。我为 kmeans 编写了自己的代码。
标签: python pandas machine-learning k-means centroid