代码之家  ›  专栏  ›  技术社区  ›  ItFreak

Python kmeans值错误

  •  0
  • ItFreak  · 技术社区  · 7 年前

    我试图将pandas数据帧传递给sklearn包的kmeans算法。dataframe有一个日期索引,包含52个日期(每周一个),列是不同的文章。列值是对应周的销售数量。为了更好地计算,我计算了百分比变化,这就是它的样子:

    ARTICLE         47070868       489070875       29470899       99070943       \
    DATE                                                                     
    2017-01-02       0.000000       0.000000       0.000000       0.000000   
    2017-01-09      -0.015625      -0.074928      -0.083333       0.230769   
    2017-01-16       0.232804       0.007788       0.284091       0.062500   
    2017-01-23       0.051502       0.174652       0.011799       0.117647   
    2017-01-30       0.200000      -0.082895       0.008746       0.807018   
    2017-02-06       0.057823       0.040172      -0.020231      -0.411003   
    2017-02-13       0.000000      -0.037241      -0.014749      -0.087912   
    2017-02-20       0.125402       0.259312       0.218563       0.138554   
    2017-02-27      -0.265714      -0.271900      -0.233415      -0.343915   
    2017-03-06       0.470817       0.293750       0.448718       0.661290   
    2017-03-13       0.002646       0.013285      -0.057522      -0.048544 
    

    数据帧有52行8753列。如果我将数据帧传递给kmeans算法,将得到以下错误:

    值错误:x和y必须具有相同的第一维度,但必须具有形状(52,)和(8753,)

    代码如下:

    kmeans = KMeans(n_clusters=3, random_state=0).fit(data_pct_change)
    print(kmeans.labels_)
    np.savetxt('log_sebastian2017.txt', kmeans.labels_, newline="\n")
    for i, cluster_center in enumerate(kmeans.cluster_centers_):
            plp.plot(data_pct_change.index, cluster_center, label='Center {0}'.format(i))
    plp.legend(loc='best')
    plp.show()
    


    如果我执行此代码:

    kmeans = KMeans(n_clusters=3, random_state=0).fit(data_pct_change)
    print(kmeans.labels_)
    np.savetxt('log_sebastian2017.txt', kmeans.labels_, newline="\n")
    for i, cluster_center in enumerate(kmeans.cluster_centers_):
            plp.plot(cluster_center, label='Center {0}'.format(i))
    plp.legend(loc='best')
    plp.show()
    

    它工作得很好,但是x轴和y轴的比例不正确,它在x上从0到8700(可能是8753,列的数量)到达,在y上从0到10000(这也是错误的,数据帧中最大的百分比变化是17,6)。

    我在这里做错什么了?同时,生成的标签数量也是错误的(在这两种情况下,算法都会为 kmean.labels_ ,但应该是8573)

    有人能帮我正确地进行聚类吗?我的数据帧对kmeans来说是错误的吗?

    0 回复  |  直到 7 年前