【问题标题】:Clustering uni-variate Time series using sklearn使用 sklearn 对单变量时间序列进行聚类
【发布时间】:2015-11-13 09:04:37
【问题描述】:

我有一个 panda DataFrame,我想对每个列进行聚类。我正在使用 sklearn,这就是我所拥有的:

data= pd.read_csv("data.csv")
data=pd.DataFrame(data)
data=data.set_index("Time")
#print(data)
cluster_numbers=2
list_of_cluster=[]
for k,v in data.iteritems():
   temp=KMeans(n_clusters=cluster_numbers)
   temp.fit(data[k])
   print(k)
   print("predicted",temp.predict(data[k]))
   list_of_cluster.append(temp.predict(data[k]))

当我尝试运行它时,我遇到了这个错误:ValueError: n_samples=1 should be >= n_clusters=2

我想知道问题出在哪里,因为我的样本数量多于集群数量。任何帮助将不胜感激

【问题讨论】:

    标签: python pandas machine-learning scikit-learn cluster-analysis


    【解决方案1】:

    K-Means 聚类器需要一个二维数组,每行一个数据点,也可以是一维的。在您的情况下,您必须将 pandas 列重塑为具有 len(data) 行和 1 列的矩阵。请参阅下面的一个有效示例:

    from sklearn.cluster import KMeans
    import pandas as pd
    
    data = {'one': [1., 2., 3., 4., 3., 2., 1.], 'two': [4., 3., 2., 1., 2., 3., 4.]}
    data = pd.DataFrame(data)
    
    n_clusters = 2
    
    for col in data.columns:
        kmeans = KMeans(n_clusters=n_clusters)
        X = data[col].reshape(-1, 1)
        kmeans.fit(X)
        print "{}: {}".format(col, kmeans.predict(X))
    

    【讨论】:

    • 如果有人在 2020 年开始工作,请将:X = data[col].reshape(-1, 1) 更改为 X = data[col].values.reshape(-1, 1)
    猜你喜欢
    • 2017-03-31
    • 2018-05-28
    • 1970-01-01
    • 2021-05-03
    • 2021-07-21
    • 2018-04-19
    • 2017-09-12
    • 2018-08-10
    • 2016-05-18
    相关资源
    最近更新 更多