2016-01-05 28 views
13

私は約100レコードのサンプルをクラスタリングしています(ラベルなし)。そしてgrid_searchを使用して様々なハイパーパラメータでクラスタリングアルゴリズムを評価しようとしています。私はsilhouette_scoreを使って得点しています。これはうまくいきます。ここscikit-learnでのクラスタリングのハイパーパラメータ評価のためのグリッド検索

私の問題は、私はGridSearchCV/RandomizedSearchCVの相互検証の側面を使用する必要はありませんが、私はシンプルGridSearch/RandomizedSearchを見つけることができないということです。私は自分で書くことができますが、ParameterSamplerParameterGridのオブジェクトは非常に便利です。

私の次のステップは、cvパラメータに何かを渡すことによって、たとえば、これを行うための簡単な方法があるBaseSearchCVのサブクラスを作成し、自分の_fit()メソッドを実装することで、それは尋ねる価値があったと思ったのだろうか?

def silhouette_score(estimator, X): 
    clusters = estimator.fit_predict(X) 
    score = metrics.silhouette_score(distance_matrix, clusters, metric='precomputed') 
    return score 

ca = KMeans() 
param_grid = {"n_clusters": range(2, 11)} 

# run randomized search 
search = GridSearchCV(
    ca, 
    param_distributions=param_dist, 
    n_iter=n_iter_search, 
    scoring=silhouette_score, 
    cv= # can I pass something here to only use a single fold? 
    ) 
search.fit(distance_matrix) 
+0

テスト部分でも、電車のすべての例のインデックスと1倍のために一つだけのカップルを必要とし、中*管理されていない*データマイニング。 k-meansの10回の実行を計算し、最高のものを使用してください。 –

+1

明らかに、クロスバリデーションはしませんが、シルエットスコアなどの適切なスコアメトリックが与えられているグリッド検索はなぜですか? –

+0

また、kmeansは単なる例です。私はいくつかの異なるアルゴリズムとそれらのハイパーパラメータをテストしたいと思います。 –

答えて

1

最近、同様の問題が発生しました。私は分割戦略を定義するカスタム反復可能cv_customを定義し、相互検証パラメータcvの入力です。この繰り返し可能な要素には、各折りたたみのために、そのインデックスによって識別されるサンプルが1つずつ含まれている必要があります。 ([fold1_train_ids], [fold1_test_ids]), ([fold2_train_ids], [fold2_test_ids]), ...私たちのケースでは、我々はあなたがクロスバリデーション(またはグリッドサーチ)を行いません([train_ids], [test_ids])

N = len(distance_matrix) 
cv_custom = [(range(0,N), range(0,N))] 
scores = cross_val_score(clf, X, y, cv=cv_custom) 
関連する問題