【发布时间】:2018-10-12 09:04:28
【问题描述】:
我有一个如下所示的 csv 文件
date mse
2018-02-11 14.34
2018-02-12 7.24
2018-02-13 244.5
2018-02-14 3.5
2018-02-16 12.67
2018-02-21 45.66
2018-02-22 15.33
2018-02-24 98.44
2018-02-26 23.55
2018-02-27 45.12
2018-02-28 78.44
2018-03-01 34.11
2018-03-05 23.33
2018-03-06 127.45
... ...
... ...
现在我尝试将 k mean 应用于 mse 值以获得 2 clusters 这给了我 2 centroids每个一个。现在我得到一个mse 值,我需要找到两个centroids 中的哪一个更接近给定的mse 值。我做这样的事情
from sklearn.cluster import KMeans
import pandas as pd
centroid_list = []
given_mse = 7.382409087
kmeans = KMeans(n_clusters=2)
df = pd.read_csv("data.csv", parse_dates=["date"])
kmeans.fit_predict(df[['mse']])
centroid_list.append(kmeans.cluster_centers_.ravel())
#print(centroids_list) # array([ 153.27996598, 19810.6925875 ]
for i in centroids_list:
t1 = abs(given_mse - i[0])
t2 = abs(given_mse - i[1])
if t1 < t2:
result.append("label 1")
else:
result.append("label 2")
print(result) # ['label1']
现在您可以看到,我得到了两个 centroid 值 153.27996598 和 19810.6925875 分配给每个集群。
问题是当你运行程序时它经常切换值 [(x,y) 或 (y,x)] 因为我得到的最终结果是label1或有时label2。
知道如何解决这个问题。是否有任何 sckit-learn 技术来防止这种切换?
【问题讨论】:
-
您可以保存模型并重新加载它,而不是重新训练。
-
@ncfirth 很抱歉,但我不太确定我是否理解。您能详细说明一下吗?
-
创建一个单独的脚本来训练模型并保存它,例子可以看here。然后每次使用模型时只需加载保存的模型而不是重新训练。
-
在 KMeans 中使用
random_state参数 -
@VivekKumar 谢谢!它有效!
标签: python-3.x pandas scikit-learn k-means