我使用sklearn来实现k-means方法。 k-means类有一个名为" predict"的方法。根据训练样本预测新样本。
from sklearn.datasets import make_blobs
from matplotlib import pyplot as plt
from sklearn.cluster import KMeans
from sklearn.metrics import adjusted_rand_score
'''
make sample
'''
X, y=make_blobs(n_samples=100, n_features=2, centers=3)
'''
kmeans
'''
kmeans_obj=KMeans(n_clusters=3)
#train
kmeans_obj.fit(X)
#labels:
labels=kmeans_obj.predict(X)
'''
output
'''
plt.scatter(X[:,0], X[:,1], c=labels)
plt.show()
'''
generate new samples and predict them
'''
while True:
'''
perdict kmeans?!?!?!?
'''
new_X, new_y=make_blobs(n_samples=50, n_features=2, centers=4)
perdict_new_sample_lables=kmeans_obj.predict(new_X)
plt.scatter(X[:,0], X[:,1], c=labels)
plt.scatter(new_X[:,0], new_X[:,1], c=perdict_new_sample_lables, marker="x")
plt.show()
图片中的圆形是经过训练的数据集。图中的十字形是预测的新元素。
这里的问题不是结果的确定性,不确定性。在非确定性算法输出中每次运行都会发生变化。但这里的结果是完全错误的!! 在图片2中紫罗兰十字架必须是绿色
答案 0 :(得分:1)
K-means不是确定性算法,并且群集分配取决于数据的分布和算法在初始化中的随机性。您可以通过使用k-means中使用random_state参数的random.seed()函数设置种子来解决此问题。有关此内容的更多信息,请参阅以下页面: