【问题标题】:How to get k means cluster for 1D data?如何获得一维数据的k均值聚类?
【发布时间】:2018-10-11 07:42:22
【问题描述】:

我有一个如下所示的 csv 文件

date                       mse                                                  
2018-02-11                 14.34
2018-02-12                 7.24
2018-02-13                 4.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                 7.45
...                        ...

现在我想为 mse 值获取两个集群,以便我知道哪个值属于哪个集群及其平均值。

现在因为除了mse(我必须提供 X 和 Y)之外我没有任何其他值集,我想只使用 mse 值来获取 ak 表示集群。现在其他一组值,我将它作为与mse 值相同大小的范围传递。这就是我所做的

from sklearn.cluster import KMeans
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

df = pd.read_csv("generate_csv/all_data_device.csv", parse_dates=["date"])
f1 = df['mse'].values
# generate another list
f2 = list(range(0, len(f1)))
X = np.array(list(zip(f1, f2)))
kmeans = KMeans(n_clusters=2).fit(X)
labels = kmeans.predict(X)
# Centroid values
centroids = kmeans.cluster_centers_
#print(centroids)

fig = plt.figure()
ax = Axes3D(fig)
ax.scatter(X[:, 0], X[:, 1], c=labels)
ax.scatter(centroids[:, 0], centroids[:, 1], marker='*', c='#050505', s=1000)
plt.title('K Mean Classification')
plt.show()

我怎样才能只使用mse 值来获取 k 均值集群?我知道函数 'reshape()' 但不太确定如何使用它?

【问题讨论】:

    标签: python-3.x pandas scikit-learn k-means


    【解决方案1】:

    演示:

    In [29]: kmeans = KMeans(n_clusters=2)
    
    In [30]: df['label'] = kmeans.fit_predict(df[['mse']])
    # NOTE:                     ---->            ^     ^
    
    In [31]: df
    Out[31]:
              date    mse  label
    0   2018-02-11  14.34      0
    1   2018-02-12   7.24      0
    2   2018-02-13   4.50      0
    3   2018-02-14   3.50      0
    4   2018-02-16  12.67      0
    5   2018-02-21  45.66      0
    6   2018-02-22  15.33      0
    7   2018-02-24  98.44      1
    8   2018-02-26  23.55      0
    9   2018-02-27  45.12      0
    10  2018-02-28  78.44      1
    11  2018-03-01  34.11      0
    12  2018-03-05  23.33      0
    13  2018-03-06   7.45      0
    

    绘图:

    In [64]: ax = df[df['label']==0].plot.scatter(x='mse', y='label', s=50, color='white', edgecolor='black')
    
    In [65]: df[df['label']==1].plot.scatter(x='mse', y='label', s=50, color='white', ax=ax, edgecolor='red')
    Out[65]: <matplotlib.axes._subplots.AxesSubplot at 0xfa42be0>
    
    In [66]: plt.scatter(kmeans.cluster_centers_.ravel(), [0.5]*len(kmeans.cluster_centers_), s=100, color='green', marker='*')
    Out[66]: <matplotlib.collections.PathCollection at 0xfabf208>
    

    【讨论】:

    • 对不起,我不太明白你想做什么。你能解释一下吗?
    • @SouvikRay,我正在回答你的问题:"How can I just use the mse values to get the k means cluster?"
    • 哦,实际上你做了一个现在只有我可见的编辑。所以直到不久前你的代码的第一部分是可见的。现在它是有意义的。
    • @SouvikRay,答案中唯一重要的部分是:df['label'] = kmeans.fit_predict(df[['mse']]) ;-)
    • @SouvikRay,它回答了你的问题吗?
    猜你喜欢
    • 2012-09-12
    • 2015-03-02
    • 1970-01-01
    • 2018-10-10
    • 2014-07-24
    • 2015-03-16
    • 2017-01-26
    • 2017-02-15
    • 2015-02-09
    相关资源
    最近更新 更多