PythonではじめるKaggleスタートブック やりながらのメモ
図書館で借りて書き込めないのでここにメモ。
<PandasのDataFrame文脈>
DataFrameとは二次元の表のこと。
・replaceでinplace=True にすると元のDataFrameが変更される。(Falseもしくは何も書かないと新しいDataFrameが作られる)
・fillnaは欠損値NaNを置換する。NaNのところは全部平均値にしちゃうとか。
→欠損値をどう扱うかは考えるべし。欠損してることに意味がある場合もある、闇雲に埋めてもだめ。LightGBMとかいう機械学習アルゴリズムでは欠損値をそのまま使えるらしい。
・drop関数を使うと特定の行/列を消せるぞ!どこから消すかとかの指定もできるぞ!
・dropna()はNaNを消してくれる。
<機械学習文脈>
・sklearn.liner_modelのLogisticRegressionを使ってロジスティック回帰分析ができるらしい。
・大半は乱数を利用するが、これでは再現性がない。(試行によって予測が変わってしまう)seedを固定するのが吉。この固定もハイパーパラメータの設定の一つ。すべての乱数seedを固定する関数が使われることも。
<予測に寄与する新しい情報量の見つけ方:探索的データ分析>
・カテゴリ変数は安易に数値化しないように。LightGBMはカテゴリ変数用の特別な処理を実行してくれるのでOK
・pandas_profilingでデータの概要をつかもう
→
sns.countplot(x='SibSp',hue='Survived',data=train1)
plt.legend(loc='upper right',title='Survived')
を各カテゴリで見ていくだけでも予測材料になる。
・KaggleならSubmitのスコアを見て特徴量の有用性をある程度判断できる。が、Submitは無限にできないし過学習の可能性あるしで、学習性データセットから検証用データセットを作成して性能を測るのが普通。
・sklearnすごい。documentationのSupervised learning(=教師あり学習)にいろいろな機械学習アルゴリズムが有る。試してみよう!
・LightGBM:決定木を作って誤差確認して誤差が小さくなるように新しい決定木作って...を繰り返して大量の決定木を創りながら学習する。最終的な予測値はすべての決定木の予測値を使って算出するよ。過学習(サンプルデータのみに過度に適合してしまい未知の値に対する予測性能が劣化する)を避けるためにearly stoppingすることが一般的。
LightGBMのパラメータをざっくり解説してくれるページ:
ハイパーパラメータを手動でいじるときは一つずつやると良い。自動でいじるときにはOptunaとか使えるよ。まあ優先度は低め。特徴量探しに注力すべき。
<交差検証(Cross Validation CV)>
学習用データセットをtrain(学習用)とvalidation(検証用)をわけるのがホールドアウト検証。この分けるのを複数回やってそれぞれでホールドアウト検証するのが交差検証。
・分けた最小単位をfoldと呼ぶ。
・各分割で学習に使われなかったfoldをoof(Out-of-fold)と呼ぶ。
・各分割でのスコアの平均をスコアという。この平均スコアを CVスコアもしくはCVと呼ぶ。
☆分割の仕方に注意!Survivedの比率をtrainとvalで揃えるとか。時系列性を揃えるとか。(12日後の予測をしたいなら12日感覚になるようtrainvalを分ける)元データにグループがないかとか(同グループ内での予測は比較的かんたんなので性能が盛られる)。
<アンサンブル>
複数のアルゴリズムで予想した結果の多数決をとったものを予測とすると精度が上がる!
seedを変えた複数予想を単純平均するだけでもok
trainデータで学習して予測したpredictファイル(csv?)をsubmitして当たり具合を競うのがkaggleなんだとわかりました。Atcoderのように数式を出すのではないのね