2016-09-29 5 views
2

私は3つの異なるクラスタリングアルゴリズムを使っていくつかのクラスタリング分析を実行しようとしています。私はsklean fit_predict 2次元numpy配列を受け入れない

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)が必要と主張する。

提案がありますか?ありがとう!

答えて

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] 

彼らは道あなたがalg_paramsを引き起こしている

KMeans({'n_clusters': 5}) 

ではなくDictのとして渡すことが呼び出しているあなたの現在のコードでは、関数kmeansクラスがある

KMeans(n_clusters=5) 

を呼びたいですクラスパラメータの他のアルゴリズムも同じです。

+0

これらの値を辞書から必要な形式に簡単に移動する方法はありますか? – wKavey

+2

@wKavey: 'KMeans(** {'n_clusters':5})' –

+0

私の場合は 'instance_ = class _(** alg_params)'ですか? – wKavey