kaggleのタイタニックのkernel読んだ

kaggleで誰もが最初に参加するであろうタイタニック号の生存予測のkernelをやっと読み終わったので、その中で出てきたいくつかのモデルの簡単な説明をまとめる。データの前処理については別の機会に。

偉大なMasum Rumi様のkernel
A Statistical Analysis & ML workflow of Titanic | Kaggle

間違いあったら教えてください。


Cross-validation

データセットをk個に分割してモデルの訓練と評価をk回行う。k-1個のデータ群で訓練し残りの1個をテストデータとして評価する。最終的にはk個の評価値の平均をモデルのスコアとする。こうすることでより良い汎化精度の評価ができる。分割方法もいろいろある。

scikit-learn を用いた交差検証(Cross-validation)とハイパーパラメータのチューニング(grid search) - Qiita

Grid Searchではモデルのハイパラメータ候補の組み合わせをすべて試し、最も評価制度の良いものを探索する。例えばSVMのハイパラメータであるgammaとCに対してGrid Searchを行うときは、scikit-learnのGridSearchCVクラスを用いると以下のようなコードになる(参考サイトのものをコピペしました...)。

# ライブラリ
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC

# パラメータ
param_grid = {'C':[0.001, 0.01, 0.1, 1,10, 100],
              'gamma':[0.001, 0.01, 0.1, 1, 10, 100]}
print("Parameter grid:\n{}".format(param_grid))

# GridSearch インスタンス生成
grid_search = GridSearchCV(SVC(), param_grid, cv=5)

# パラメータの過剰適合を防ぐためにさらに訓練セットとテストセットを分割
X_train, X_test, y_train, y_test = train_test_split(
    iris.data, iris.target, random_state=0)

# 交差検証を実行
grid_search.fit(X_train, y_train)
print("test set score:{:.2f}".format(grid_search.score(X_test, y_test)))
print("Best parameters:{}".format(grid_search.best_params_))
print("Best cross-validation score :{:.2f}".format(grid_search.best_score_))

# Out
Parameter grid:
{'C': [0.001, 0.01, 0.1, 1, 10, 100], 'gamma': [0.001, 0.01, 0.1, 1, 10, 100]}
test set score:0.97
Best parameters:{'C': 100, 'gamma': 0.01}
Best cross-validation score :0.97

モデルのパラメータ探索手法、「グリッドサーチ」ってなんだ - case-kの備忘録

Logistic Regression(ロジスティック回帰)

2クラス分類の一種。ロジスティック関数を用いて0から1の値を出力する。

F(\boldsymbol{x})=\frac{1}{1+e^{-(w_0+\boldsymbol{w}\boldsymbol{x})}}
これは単純パーセプトロンのかたちになっている。
f:id:busongames:20190407175342p:plain
一番簡単な単純パーセプトロンについて - AI人工知能テクノロジー
ロジスティック回帰 - Qiita

K-Nearest Neighbor classifier(K近傍法)

クラス判別の手法の一種で、未知のデータから距離が近いK個の学習データを取得し多数決で未知のデータのクラスを推定する教師あり学習。同数にならならないようにKは基本的に奇数にする。画像からわかるようにKの値によって結果が変わる。

f:id:busongames:20190407172508p:plain
k近傍法 - Wikipedia
似ているものにK-means clustering(K平均法)があるが、こっちはクラスタリングの一種で、重心を更新していくことでデータをいくつかのクラスタに割り当てる教師なし学習
K近傍法(多クラス分類) - Qiita

Gaussian Naive Bayes(ナイーブベイズ)

ナイーブベイズベイズの定理をうまく使って分類を行う確率モデルで、特徴ベクトル間に条件付き独立性を仮定しているところがナイーブってことらしい。Gaussian Naive Bayesは特徴ベクトルに正規分布を仮定したモデル。
Naive Bayesの復習(導出編) - LESS IS MORE

Support Vector Machines(SVM)

Support Vector(境界面に一番近い、つまり重要であると考えられるベクトル)と境界面との距離が最大になるように境界面を決定する2クラス分類器。マージン最大化により境界面を決定する。
平面による識別ができないようなデータに対しては、非線形変換を施した先の空間で線形識別を行う。これにはカーネル法がよく用いられる。

f:id:busongames:20190407201741p:plain
https://www.hellocybernetics.tech/entry/2016/08/08/061746

Decision Tree Classifier(決定木)

木構造を用いて分類や回帰を行う機械学習の手法。下のサイトがわかりやすい。
[入門]初心者の初心者による初心者のための決定木分析 - Qiita

Bagging Classifier

学習データから新しいデータセットを抽出してそれをもとに弱学習器を構築する。同じようにして弱学習器をいくつか作り最終的にそれらの多数決で意思決定を行うアンサンブル学習の手法の一種。並列処理が可能。

Random Forest Classifier

Bagging Classifierにおいて、弱学習器に決定木を用いたものがランダムフォレスト。特徴量もある程度ランダムに抽出するので弱学習器が多様なものになり性能があがるとかなんとか。
【アンサンブル学習】多様性が大事? バギング・ランダムフォレスト編 - Np-Urのデータ分析教室

Gradient Boosting Classifier(勾配ブースティング)

バギングと似ているが新しい弱学習器を作るときにそれまでに作られたすべての弱学習器の結果を利用するのがブースティング。バギングと比べると並列処理できず時間がかかるが、間違ったものをうまく識別できるようになる。損失関数を最小化する問題として再定義することで勾配情報を利用するので勾配。

f:id:busongames:20190409235902p:plainf:id:busongames:20190409235909p:plain
Kaggle Masterが勾配ブースティングを解説する - Qiita

AdaBoost Classifier

adaptive boostingの略。gradient boostingより前にできた。gradient boostingとの違いは、gradient boostingは残差に着目して重みを更新していくところ。特にいうことがない。
機械学習⑤ アダブースト (AdaBoost) まとめ - Qiita

XGBClassifier(XGBoosting)

Gradient BoostingとRandom Forestsを組み合わせたアンサンブル学習。勾配計算とか違うらしいけど詳しく見てない。でもよく使われるから覚えておいて損はないっぽい。
kefism.hatenablog.com

Extra Trees Classifier

random forestは分割させる位置になんかしらの基準があるが、それの単純にランダムで選択するバージョン。過学習しにくい、学習が速いなどのメリット。
Random Forest とその派生アルゴリズム - Sideswipe

Gaussian Process Classifier(ガウス過程)

ガウス過程とは集合(f(x_1),...,f(x_n))の同時確率分布がN次元ガウス分布であるような過程のこと。うまく既知パラメータの相関関係が推定できればn+1個目のデータに対するパラメータを推測できるんじゃないかということらしい。わからん。

Voting Classifier

複数の(種類の)学習器を組み合わせて最後に平均をとる分類器。多数決をそのまま結果とするhard voteと予測した確立に対してweightをかけるweak voteがある。
Python3による日本語言語処理 (5)VotingClassifierによる異なるモデルのアンサンブル学習 - Qiita




最後駆け足になりました。_(._.)_ガウス過程はよく聞くし宿題。