sklearnによるSVM分類
SVC、LinearSVC、カーネルの選択、class_weight='balanced'、probability=Trueについて学習します。
「sklearnによるSVM分類」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。
scikit-learnでのSVM
scikit-learnには、複数のSVM分類器があります。中心となるのはSVCで、kernelパラメーターを通じて線形およびカーネルによる境界をサポートします。
from sklearn.svm import SVC
model = SVC(kernel="rbf", C=1.0, gamma="scale")
model.fit(Xtr, ytr)
print(model.score(Xte, yte))SVCの主要パラメーター
SVCの動作を決める主なパラメーターは3つあります:
kernel境界の種類(linear、rbf、poly)C誤りに対するペナルティまたは正則化gammarbf/polyで使用するカーネルの幅
from sklearn.svm import SVC
model = SVC(kernel="rbf", C=10, gamma=0.1)最初に必ずスケーリングする
SVMは特徴量のスケールに敏感です。スケーラーとSVCをパイプラインにまとめることで、クロスバリデーションの中でも、スケーリングが訓練データだけで学習されるようにできます。
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
pipe = make_pipeline(StandardScaler(), SVC(kernel="rbf"))
pipe.fit(Xtr, ytr)大規模データセット向けのLinearSVC
SVC(kernel="linear")は、サンプル数が多い場合に処理のスケールが悪くなります。LinearSVCは線形問題向けに最適化された高速なソルバーを使うため、大規模で高次元のデータをより適切に処理できます。
from sklearn.svm import LinearSVC
model = LinearSVC(C=1.0, max_iter=5000)
model.fit(Xtr, ytr)SVCとLinearSVCの比較
大規模データやテキストのような疎なデータにはLinearSVCを使います。非線形の境界にカーネルが必要な場合はSVCを使います。LinearSVCは損失関数が少し異なり、predict_probaをサポートしていない点に注意してください。
クラスの不均衡
一方のクラスが少ない場合、SVMは多数派クラスを優先しがちです。class_weight="balanced"を設定すると、クラスの出現頻度に反比例するように各クラスへ自動的に重み付けできます。
from sklearn.svm import SVC
model = SVC(kernel="rbf", class_weight="balanced")
model.fit(Xtr, ytr)カスタムクラスの重み
自動的なバランシングよりも特定のクラスを強く重視するために、class_weight に明示的な辞書を渡すこともできます。
from sklearn.svm import SVC
model = SVC(class_weight={0: 1, 1: 5}) # class 1 errors cost 5x確率推定
SVC はデフォルトではハードラベルを返します。probability=True を設定すると、(内部キャリブレーションを介して)predict_proba が有効になり、ROC AUC やしきい値の調整に利用できます。学習速度は遅くなります。
from sklearn.svm import SVC
model = SVC(probability=True)
model.fit(Xtr, ytr)
proba = model.predict_proba(Xte)[:, 1]多クラス SVM
SVC は自動的に one-vs-one 方式を使用して、2つを超えるクラスを扱います。コードを変更する必要はありません。多クラスのラベルで fit するだけで動作します。
from sklearn.svm import SVC
model = SVC(decision_function_shape="ovr")
model.fit(X_multiclass, y_multiclass)GridSearchCV による C と gamma の調整
標準的な方法は、スケーリング用パイプライン内ですべてを行い、C と gamma を対数スケールでグリッドサーチすることです。
from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
pipe = make_pipeline(StandardScaler(), SVC(kernel="rbf"))
param = {
"svc__C": [0.1, 1, 10, 100],
"svc__gamma": [0.001, 0.01, 0.1, 1],
}
gs = GridSearchCV(pipe, param, cv=5, scoring="f1")
gs.fit(Xtr, ytr)
print(gs.best_params_)実践的なヒント
SVM はマージンが明確な小〜中規模のデータセットで力を発揮します。非常に大規模なデータでは苦戦するため、LinearSVC を使うか、ブースティングに切り替えます。常にスケーリングを行い、C と gamma を調整し、不均衡には class_weight を使います。
理解度チェック
sklearn の SVM に関する知識を確認しましょう。
まとめ
まとめ: 非線形分類には SVC を使用し、kernel、C、gamma を設定します。常にスケーリング用パイプライン内で使用してください。大規模データやテキストデータでは LinearSVC に切り替えます。class_weight="balanced" で不均衡に対処し、GridSearchCV で C と gamma を同時に調整します。
よくある質問
「sklearnによるSVM分類」レッスンは無料ですか?
はい。「sklearnによるSVM分類」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。
「sklearnによるSVM分類」で何を学びますか?
SVC、LinearSVC、カーネルの選択、class_weight='balanced'、probability=Trueについて学習します。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn AI with Pythonを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「sklearnによるSVM分類」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn AI with Pythonレッスンでコードを書いて実行できますか?
はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。