kaggleのタイタニックのkernel読んだ
kaggleで誰もが最初に参加するであろうタイタニック号の生存予測のkernelをやっと読み終わったので、その中で出てきたいくつかのモデルの簡単な説明をまとめる。データの前処理については別の機会に。
偉大なMasum Rumi様のkernel
A Statistical Analysis & ML workflow of Titanic | Kaggle
間違いあったら教えてください。
- Cross-validation と Grid Search
- Logistic Regression(ロジスティック回帰)
- K-Nearest Neighbor classifier(K近傍法)
- Gaussian Naive Bayes(ナイーブベイズ)
- Support Vector Machines(SVM)
- Decision Tree Classifier(決定木)
- Bagging Classifier
- Random Forest Classifier
- Gradient Boosting Classifier(勾配ブースティング)
- AdaBoost Classifier
- XGBClassifier(XGBoosting)
- Extra Trees Classifier
- Gaussian Process Classifier(ガウス過程)
- Voting Classifier
Cross-validation と Grid Search
Cross-validation
データセットをk個に分割してモデルの訓練と評価をk回行う。k-1個のデータ群で訓練し残りの1個をテストデータとして評価する。最終的にはk個の評価値の平均をモデルのスコアとする。こうすることでより良い汎化精度の評価ができる。分割方法もいろいろある。
scikit-learn を用いた交差検証(Cross-validation)とハイパーパラメータのチューニング(grid search) - Qiita
Grid Search
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
Logistic Regression(ロジスティック回帰)
2クラス分類の一種。ロジスティック関数を用いて0から1の値を出力する。
これは単純パーセプトロンのかたちになっている。ロジスティック回帰 - QiitaK-Nearest Neighbor classifier(K近傍法)
クラス判別の手法の一種で、未知のデータから距離が近いK個の学習データを取得し多数決で未知のデータのクラスを推定する教師あり学習。同数にならならないようにKは基本的に奇数にする。画像からわかるようにKの値によって結果が変わる。似ているものにK-means clustering(K平均法)があるが、こっちはクラスタリングの一種で、重心を更新していくことでデータをいくつかのクラスタに割り当てる教師なし学習。
K近傍法(多クラス分類) - Qiita
Gaussian Naive Bayes(ナイーブベイズ)
ナイーブベイズはベイズの定理をうまく使って分類を行う確率モデルで、特徴ベクトル間に条件付き独立性を仮定しているところがナイーブってことらしい。Gaussian Naive Bayesは特徴ベクトルに正規分布を仮定したモデル。
Naive Bayesの復習(導出編) - LESS IS MORE
Support Vector Machines(SVM)
Support Vector(境界面に一番近い、つまり重要であると考えられるベクトル)と境界面との距離が最大になるように境界面を決定する2クラス分類器。マージン最大化により境界面を決定する。
平面による識別ができないようなデータに対しては、非線形変換を施した先の空間で線形識別を行う。これにはカーネル法がよく用いられる。
Decision Tree Classifier(決定木)
木構造を用いて分類や回帰を行う機械学習の手法。下のサイトがわかりやすい。
[入門]初心者の初心者による初心者のための決定木分析 - Qiita
Bagging Classifier
学習データから新しいデータセットを抽出してそれをもとに弱学習器を構築する。同じようにして弱学習器をいくつか作り最終的にそれらの多数決で意思決定を行うアンサンブル学習の手法の一種。並列処理が可能。
Random Forest Classifier
Bagging Classifierにおいて、弱学習器に決定木を用いたものがランダムフォレスト。特徴量もある程度ランダムに抽出するので弱学習器が多様なものになり性能があがるとかなんとか。
【アンサンブル学習】多様性が大事? バギング・ランダムフォレスト編 - Np-Urのデータ分析教室
Gradient Boosting Classifier(勾配ブースティング)
バギングと似ているが新しい弱学習器を作るときにそれまでに作られたすべての弱学習器の結果を利用するのがブースティング。バギングと比べると並列処理できず時間がかかるが、間違ったものをうまく識別できるようになる。損失関数を最小化する問題として再定義することで勾配情報を利用するので勾配。
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(ガウス過程)
ガウス過程とは集合の同時確率分布がN次元ガウス分布であるような過程のこと。うまく既知パラメータの相関関係が推定できればn+1個目のデータに対するパラメータを推測できるんじゃないかということらしい。わからん。
Voting Classifier
複数の(種類の)学習器を組み合わせて最後に平均をとる分類器。多数決をそのまま結果とするhard voteと予測した確立に対してweightをかけるweak voteがある。
Python3による日本語言語処理 (5)VotingClassifierによる異なるモデルのアンサンブル学習 - Qiita
最後駆け足になりました。_(._.)_ガウス過程はよく聞くし宿題。