2017-04-14 15 views
1

私は不均衡なバイナリデータセットを持っており、大部分は1つのラベル(6対1)です。scikit-learnを使用して多数の否定的な例を持つ不均衡なデータセット

私はLinearSVCモデルでGridSearchCVを実行しており、class_weight = 'balanced'を使用して 'C'パラメータを最適化しています。 1大多数のため、私は1つの違いで 'metrics.average_precision_score'のようなスコアリング関数が必要だと思います.1よりも0のラベルに従ってスコアを計算します。

  1. 私はそうする権利がありますか?
  2. 私はこれを行う方法がありますか?

答えて

2

私は、Scikitスコアリング関数のドキュメントで回答掘り出しを見つけることになりました。

負のラベルに従ってスコアを計算することができます。スコアを「正のラベル」(スコアリングのみ)として再定義することができます。例:

from sklearn.model_selection import GridSearchCV 
from sklearn.metrics import precision_score, make scorer 
# here the scoring function is created. make_scorer passes the pos_label=0 
# argument to sklearn.metrics.precision_score() to create the desired function. 
neg_precision = make_scorer(precision_score, pos_label=0) 
# some random C parameters for completion 
params = {'C': [0.01, 0.03, 0.1, 0.3, 1, 3, 10]} 
clf = GridSearchCV(LinearSVC(class_weight='balanced'), cv=10,param_grid=params, scoring=neg_precision) 
clf.fit(X, y) 

私は個人的にスコアリング= 'f1_macro'を使用することに決めました。これは、正のラベルのf1スコアと負のラベルのf1スコアの重み付けされていない平均を計算します。それは私が後にした結果をもたらしました。

関連する問題