【问题标题】:Blaze with Scikit Learn K-MeansBlaze with Scikit Learn K-Means
【发布时间】:2016-09-29 08:54:47
【问题描述】:

我正在尝试使 Blaze 数据对象适合 scikit kmeans 函数。

from blaze import *
from sklearn.cluster import KMeans
data_numeric = Data('data.csv')
data_cluster = KMeans(n_clusters=5)
data_cluster.fit(data_numeric)

数据样本:

A  B  C
1  32 34
5  57 92
89 67 21

它的抛出错误:

我已经能够使用 Pandas Dataframe 做到这一点。有什么方法可以将 blaze 对象提供给这个函数?

【问题讨论】:

  • 仔细检查您传递给 k-means 的数组的大小。通常在传递一维数组时会引发此错误。
  • 你的 blaze 对象中有多少个样本?

标签: python scikit-learn blaze


【解决方案1】:

我认为您需要先将您的 pandas 数据框转换为一个 numpy 数组,然后才能适应。

from blaze import *
import numpy

from sklearn.cluster import KMeans
data_numeric = numpy.array(data('data.csv'))
data_cluster = KMeans(n_clusters=5)
data_cluster.fit(data_numeric)

【讨论】:

    【解决方案2】:

    sklearn.cluster.KMeans 不支持 blaze.interactive._Data 类型的输入数据,这是您代码中 data_numeric 的类型。

    您可以使用data_cluster.fit(data_numeric.peek()) 将传输的data_numeric 与DataFrame 支持的sklearn.cluster.KMeans 类型匹配。

    【讨论】:

      【解决方案3】:

      我建议您选择的聚类数 (K) 远小于数据集中的训练示例数。当您想要的聚类数大于或等于训练样例数时,运行 K-Means 算法是不对的。 当您尝试将具有不需要的形状的 blaze 对象传递给 KMeans 函数时,会发生错误。 请检查 : https://blaze.readthedocs.io/en/latest/csv.html

      【讨论】:

      • 我向函数传递了大约 30000 行数据,这里我只粘贴了 3 行示例。
      • 您需要在data_cluster.fit(data_numeric) 命令中使用reshape 函数并将您的数组重塑为scikit 的K-Means 将接受的二维数组形式。
      【解决方案4】:

      是的,在你适应之前,你必须将你的 pandas 数据框转换成一个 numpy 数组,现在它工作正常......我想@aberger 已经回答了。

      谢谢!

      【讨论】:

      • 转换为数据帧是一个昂贵的过程,但看起来没有其他方法可以做到这一点。
      猜你喜欢
      • 2013-10-12
      • 2018-01-29
      • 2012-06-29
      • 2021-01-19
      • 2013-07-03
      • 2017-09-19
      • 2019-01-21
      • 2020-01-11
      • 2017-01-27
      相关资源
      最近更新 更多