sklean fit_predict不接受二维numpy数组

时间:2016-09-29 20:08:37

标签: python numpy scikit-learn

我正在尝试使用三种不同的聚类算法执行一些聚类分析。我从stdin加载数据如下

import sklearn.cluster as cluster

X = []
for line in sys.stdin:
    x1, x2 = line.strip().split()
    X.append([float(x1), float(x2)])
X = numpy.array(X)

然后将我的聚类参数和类型存储在数组中

clustering_configs = [
    ### K-Means
    ['KMeans', {'n_clusters' : 5}],
    ### Ward
    ['AgglomerativeClustering', {
                'n_clusters' : 5,
                'linkage' : 'ward'
                }],
    ### DBSCAN
    ['DBSCAN', {'eps' : 0.15}]
]

我试图在for循环中调用它们

for alg_name, alg_params in clustering_configs:

    class_ = getattr(cluster, alg_name)
    instance_ = class_(alg_params)

    instance_.fit_predict(X)

instance_.fit_prefict(X)函数外,一切正常。我收到了错误

Traceback (most recent call last):
  File "meta_cluster.py", line 47, in <module>
    instance_.fit_predict(X)
  File "/usr/local/lib/python2.7/dist-packages/scikit_learn-0.17.1-py2.7-linux-x86_64.egg/sklearn/cluster/k_means_.py", line 830, in fit_predict
    return self.fit(X).labels_
  File "/usr/local/lib/python2.7/dist-packages/scikit_learn-0.17.1-py2.7-linux-x86_64.egg/sklearn/cluster/k_means_.py", line 812, in fit
    X = self._check_fit_data(X)
  File "/usr/local/lib/python2.7/dist-packages/scikit_learn-0.17.1-py2.7-linux-x86_64.egg/sklearn/cluster/k_means_.py", line 789, in _check_fit_data
    X.shape[0], self.n_clusters))
TypeError: %d format: a number is required, not dict

任何人都有线索我可能会出错?我阅读了sklearn文档here,并声称您只需要一个array-like or sparse matrix, shape=(n_samples, n_features),我相信我有。{/ p>

有什么建议吗?谢谢!

1 个答案:

答案 0 :(得分:2)

 class sklearn.cluster.KMeans(n_clusters=8, init='k-means++', n_init=10, max_iter=300, tol=0.0001, precompute_distances='auto', verbose=0, random_state=None, copy_x=True, n_jobs=1, algorithm='auto')[source]

他们称你为KMeans课程的是

KMeans(n_clusters=5)

使用您当前的代码

KMeans({'n_clusters': 5})

导致alg_params作为Dict而不是类参数传递。其他算法也是如此。

相关问题