【发布时间】:2017-10-20 06:32:39
【问题描述】:
我使用 sklearn 来实现 k-means 方法。 k-means 类有一个方法,称为“预测”。根据训练样本预测新样本。
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 中的紫十字必须是绿色的
【问题讨论】:
-
问题出在您的
while true循环中。在里面,您正在使用make_blobs()生成测试数据。该测试数据与训练数据不匹配,因此不匹配。您需要首先生成所有数据,然后将其分为训练和测试。每次使用make_blobs方法时,新数据可能与旧数据不匹配。希望这对你有意义。您还需要复习集群基础知识。
标签: python scikit-learn