Kaggle api
GitHub - Kaggle/kaggle-api: Official Kaggle API
- データダウンロードはコマンドから
- API key発行
- 指定フォルダに置く
- コマンドプロンプトと同じ位置にダウンロードしたいので、
kaggle competitions download -c titanic -p .
- これによりコマンド一発で提出できる
- コメントも付けれる
- スコアとコメントはleaderboardで見れる
Titanic Files
- 軽いので練習に良い
- gender_submission.csv 提出ファイルの例
- test.csv テストデータ
- train.csv 訓練データ
カラム
Titanic: Machine Learning from Disaster | Kaggle
- 分類に影響しそうなカラムに★/△を付けた
- PassengerId
- Pclass チケットの等級★
- Name
- Sex ★
- Age ★ ※NaNあり
- SibSp 乗っている兄弟・配偶者の数 △
- Parch 乗っている子・親の数 △
- Ticket チケット番号
- Fare 運賃
- Cabin キャビン番号(文字列)★ ※NaNあり
- Embarked 乗船港 C/Q/S ※NaNあり
- Survived 0/1
サンプルを提出してみる
kaggle competitions submit -c titanic -f gender_submission.csv -m "submit sample"
- score 0.76555 (max 1.0)
分類器を使ってみる
- Python 3.6
- Random Forest
- 引っかかりポイント
- male, femaleを数値にする必要
- NaNもだめ ..NaNだと死んでる可能性高そう。-1にする
- どちらもread_csvのconvertersで対応
- predictできた
- 結構手間かかる
- 分類器に食わせるようにデータ整形
- 結果が正しいと判断できる
- 一般の人にはまだ無理そう
提出してみる
- 0.71770
- サンプルより下がった・・・
- 分類器、全部デフォルト設定だからなぁー
- ここからは知見が必要
- https://www.kaggle.com/sshadylov/titanic-solution-using-random-forest-classifier/code
- 試行錯誤してFareを足した時に下がった
- 下がった時、実装がまずいのか、特徴を足すべきでなかったのか判定が難しい
- 特徴を削って性別のみで判定したほうが精度が高い・・・
- 性別のみで判定 score 0.76555 これをまず超える必要
- どの特徴を含めるとテストが良いか、選んではサブミットを繰り返してもいいかも
- ハイパパラメータ調整
- 0.78468 こえた!(テストデータにフィットしただけとも言える
- 同じような特徴を1つにまとめる
df[FamilySize] = df[SibSp] + df[Parch] + 1
- NameからMrなどを取り出してTitleとして特徴に加える
- 最終的に使ったカラムはPclass, Sex, Age, Fare, Embarked, FamilySize, Title
- 絞り込んでAge, Fareを使わない場合は精度が下がった
- 最終スコア 0.80861 780th
知見
- 数値カラムでNaNだったら訓練データのMeanで埋める
- Medianも可
- 同じような特徴は1つの特徴にまとめる
- 似て非なる値の扱い
- 元特徴 Name: (例)xxx Mr xxx, yyy Mr yyy これを、
- 新特徴 Title: (例)Mr
- データをグラフにして観察することでよりよい(ノイズのない)特徴を作れる
- Titleにて、Mlle = Missという知識があれば同一扱いできただろう
- Ms = Miss
- Mme = Mrs