2

始めようとしてclass_weightいます。残りのコードが機能することはわかっていclass_weightますが、エラーが発生するのは次のとおりです。

    parameters_to_tune = ['min_samples_split':[2,4,6,10,15,25], 'min_samples_leaf':[1,2,4,10],'max_depth':[None,4,10,15],
                                             ^
SyntaxError: invalid syntax

これが私のコードです

clf1 = tree.DecisionTreeClassifier()
 parameters_to_tune = ['min_samples_split':[2,4,6,10,15,25], 'min_samples_leaf':[1,2,4,10],'max_depth':[None,4,10,15],
 'splitter' : ('best','random'),'max_features':[None,2,4,6,8,10,12,14],'class_weight':{1:10}]
clf=grid_search.GridSearchCV(clf1,parameters_to_tune)
clf.fit(features,labels)
print clf.best_params_

誰かが私が犯している間違いを見つけますか?

4

2 に答える 2

6

class_weight「給与」クラスのさまざまなグリッド検索をしたいと思います。

の値はclass_weightリストでなければなりません:

'class_weight':[{'salary':1}, {'salary':2}, {'salary':4}, {'salary':6}, {'salary':10}]

また、リスト内包表記を使用して単純化できます。

'class_weight':[{'salary': w} for w in [1, 2, 4, 6, 10]]

最初の問題は、dict を渡したときに、dict のパラメータ値がparameters_to_tuneリストでなければならないことです。dictのリストを代わりに の値として渡すことで修正できclass_weight、各 dict にはclass_weightforのセットが含まれDecisionTreeClassifierます。

しかし、より深刻な問題は、重みがクラスclass_weightに関連付けられていることですが、あなたの場合、「給与」は機能の名前です。フィーチャに重みを割り当てることはできません。最初はあなたの意図を誤解していましたが、今はあなたが何を望んでいるのか混乱しています。

isの形式class_weightは、本当に自分のケースで{class_label: weight}設定するつもりなら、0.0、1.0 などの値にする必要があり、構文は次のようになります。class_weightclass_label

'class_weight':[{0: w} for w in [1, 2, 4, 6, 10]]

クラスの重みが大きい場合、分類子がデータがそのクラスにあると予測する可能性が高くなります。使用する典型的なケースの 1 つclass_weightは、データが不均衡な場合です。

分類子は SVM ですが、例を次に示します。

アップデート:

フルparameters_to_tuneは次のようになります。

parameters_to_tune = {'min_samples_split': [2, 4, 6, 10, 15, 25],
                      'min_samples_leaf': [1, 2, 4, 10],
                      'max_depth': [None, 4, 10, 15],
                      'splitter' : ('best', 'random'),
                      'max_features':[None, 2, 4, 6, 8, 10, 12, 14],
                      'class_weight':[{0: w} for w in [1, 2, 4, 6, 10]]}
于 2015-08-05T10:21:57.350 に答える