私は、バナーを見る人によるクリックと変換のデータを使って自分のSVMアルゴリズムを教えようとしています。主な問題は、クリックがすべてのデータの約0.2%であることです。そのため、クリック数に大きな不均衡があります。テスト段階でシンプルなSVMを使用すると、常に「ビュー」クラスのみが予測され、決して「クリック」や「変換」は行われません。平均で99.8%の正解(不均衡のため)が得られますが、「クリック」や「コンバージョン」にチェックを入れると右の予測が0%になります。どのように不均衡を考慮に入れてSVMアルゴリズムを調整する(または別のアルゴリズムを選択する)ことができますか?クラスの不均衡が大きいデータを使用して機械学習アルゴリズムを教える方法はありますか? (SVM)
7
A
答えて
24
ここで最も基本的なアプローチは、いわゆる「クラス重み付け方式」を使用することです。古典的なSVM形式では、ミス分類カウントを制御するためにパラメータC
が使用されます。クラス1とクラス2にはそれぞれC1
とC2
のパラメータを使用できます。与えられたC
ためC1
とC2
の最も一般的な選択は、n1
とn2
がそれぞれクラス1及び2のサイズです
C1 = C/n1
C2 = C/n2
を置くことです。だからあなたは、より頻繁ではないクラスをミス分類するためにSVMを「罰する」ことができます。
多くの既存のライブラリ(libSVMなど)は、class_weightパラメータを使用してこのメカニズムをサポートしています。 sklearnにPythonとsklearn特に
print __doc__
import numpy as np
import pylab as pl
from sklearn import svm
# we create 40 separable points
rng = np.random.RandomState(0)
n_samples_1 = 1000
n_samples_2 = 100
X = np.r_[1.5 * rng.randn(n_samples_1, 2),
0.5 * rng.randn(n_samples_2, 2) + [2, 2]]
y = [0] * (n_samples_1) + [1] * (n_samples_2)
# fit the model and get the separating hyperplane
clf = svm.SVC(kernel='linear', C=1.0)
clf.fit(X, y)
w = clf.coef_[0]
a = -w[0]/w[1]
xx = np.linspace(-5, 5)
yy = a * xx - clf.intercept_[0]/w[1]
# get the separating hyperplane using weighted classes
wclf = svm.SVC(kernel='linear', class_weight={1: 10})
wclf.fit(X, y)
ww = wclf.coef_[0]
wa = -ww[0]/ww[1]
wyy = wa * xx - wclf.intercept_[0]/ww[1]
# plot separating hyperplanes and samples
h0 = pl.plot(xx, yy, 'k-', label='no weights')
h1 = pl.plot(xx, wyy, 'k--', label='with weights')
pl.scatter(X[:, 0], X[:, 1], c=y, cmap=pl.cm.Paired)
pl.legend()
pl.axis('tight')
pl.show()
を、使用して
例あなたは単にclass_weight='auto'
を設定して、自動重み付けをオンにすることができます。
1
本論文では、様々な技術を説明します。あなたはバランス持つまで一つの簡単な(しかし、SVMのための非常に悪い方法では)ちょうど少数クラス(複数可)を複製している:
http://www.ele.uri.edu/faculty/he/PDFfiles/ImbalancedLearning.pdf
関連する問題
- 1. 序数データを学習できる機械学習回帰アルゴリズムはありますか?
- 2. 機械学習 - SVM機能融合テクニック
- 3. 機械学習 - 分類アルゴリズム
- 4. 反復機械学習アルゴリズム
- 5. 分類機械学習アルゴリズムで新しいクラスを発見するには?
- 6. パリティ機能の学習に成功した機械学習アルゴリズムはありますか?
- 7. map reduceモデルを適用できない機械学習アルゴリズム
- 8. MapRにスケーラブルな機械学習アルゴリズムがありますか? Mahoutのように?
- 9. MFCC係数ベクトルを使用して機械学習アルゴリズムをトレーニングする方法は?
- 10. すべての機械学習アルゴリズムの使い方Wordの頻度は機能ですか?
- 11. SVMでデータの不均衡をどのように扱いますか?
- 12. NLPと機械学習を使用してイベントを検出する方法は?
- 13. SKlearn SVM不平衡データ付きRBF
- 14. 新しい機械学習プロジェクトにCommon Lispを使用する
- 15. 教師付き機械学習の履歴ラベル
- 16. 機械学習の提案
- 17. C#の機械学習ライブラリ
- 18. 機械学習のヌルクラス
- 19. HadoopでPythonを使用するための分散型機械学習ライブラリはありますか?
- 20. 機械学習で学習曲線とは何ですか?
- 21. FLANNの使用は機械学習の対象となりますか?
- 22. 機械学習用の外部GPU
- 23. 機械学習 - 特定のクラスの分類を改善する方法
- 24. ()の不均衡
- 25. 教師あり学習、(ii)教師なし学習、(iii)補強学習
- 26. クラスが不均衡なsklearnロジスティック回帰
- 27. 機械学習タスク:どのツールを使用するのですか?
- 28. ウィンドウに不均衡なユーティリティがありますか?
- 29. イメージを機械学習するときのフィーチャーの数を減らす方法
- 30. 大規模な機械によるウェブデータの学習
をアップサンプリングオプション少数クラスですか? –
アップサンプリングで何を意味するのか詳しく教えてください。 – rvnikita
[skalarnロジスティック回帰と不均衡なクラスとの可能な重複](http://stackoverflow.com/questions/14863125/sklearn-logistic-regression-with-unbalanced-classes) –