見出し画像

分散表現の利用法 バギングによるクラス分類や汎化性能についてのメモ

分散表現が得られた後、 機械学習によってクラス分類を行うことができる。

使えるモデルとして

決定木
SVM サポートベクターマシン
NN ニューラルネット
などがある。

SVMは広義のNNに含まれる。

ここでは決定木を用いた方法にする。

バギング

複数の決定木による多数決的なイメージ
シンプルな理論
決定木は説明可能性が高く、古典的な機械学習モデル
計算負荷も深層学習に比較して軽い
モデルの大きさによる
説明可能性はあまりない
複数の決定木それぞれを解析するのだろうか?


from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
bagging = BaggingClassifier(DecisionTreeClassifier(class_weight="balanced"),
                                       n_estimators=best_params["n_estimators"],
                                           max_samples=best_params["max_samples"],
                                           max_features=best_params["max_features"], n_jobs=-1, )
bagging.fit(X_train, y_train)
y_pred = bagging.predict(X_test)


汎化性能の調整

トレーニングデータでの予測性能が高いにも関わらず、テストデータでは予測性能が低い場合はままある。
テストデータはトレーニングデータに含まれない未知のデータなのでそれ自体は自然なこと
しかし、実際にはテストデータ、未知のデータでの性能向上こそが目的であることが多い
そのような性能を汎化性能と呼ぶ


ハイパーパラメータ調整

モデルにはさまざまなパラメータがある。
学習によって調整されないパラメータをハイパーパラメータと呼ぶ
このハイパーパラメータは学習で調整されないが、モデルの性能に影響することもある
主に二つの方法がある


エキスパートが調整する


データコンペでやっていること?


ハイパーパラメータを最適化するステップを設ける


optunaと呼ばれるハイパーパラメータ最適化ライブラリがある
ガウス過程最適化はこのステップに使われることが多い


アンダーサンプリング

randam under samplingが経験的には有効
ラベルの数に偏りがあるときに間引きを行う
トレーニングデータのラベルに偏りがある場合、モデルはラベルの偏りを学習する
間引きによってラベルの偏りをならすことで、トレーニングデータ内でのラベルの偏りを減らす


データ水増し data augmentation

逆にサンプルの個数を水増しする方法もある
自然な偽データを作る必要がある
画像分野では反転、回転、拡大縮小などがよく使われている
自然言語分野ではバックトランスレーションが使われる
例えば機械翻訳によって日→英→日と翻訳する

私にカフェオレを飲ませるためにサポートしてみませんか?