Python
Windows
機械学習
Kaggle
titanic

プログラミング初心者がKaggleチュートリアルに挑戦してみた


はじめに

はじめまして。初めてQiitaに投稿します。

一週間前から、機械学習に興味を持ち、pythonをかじり始めました。

Qittaの存在を知ったのもその頃なので、技術系ブログ作法というかマナーというか、そういうものが抜けていたら、こっそり教えていただけると幸いです。

投稿者の紹介

機械学習はおろか、プログラミングもほぼ初心者。

数年前に、ドットインストールを視聴して、HTMLやCSS、PHP、MY SQL等のコードを真似て、遊んでいた程度。

(当時は全コース無償提供されていました。)

統計学どころか基本的な数学の知識にも乏しい。英語も儘ならず。

環境

Windows OS

jupyter notebook

pythonとの出会い

機械学習エンジニアになりたい人のための本』を読み、機械学習にはpythonが適していることを知りました。

現在、ProgateUdemyで学びながら、Kaggleのタイタニック号の課題にサブミットする日々です。


Titanic:Machine Learning from Disaster との闘い

まだまだ自分でコードを書くこともできないのに、チュートリアルならできるだろうとたかをくくり、学習を初めて5日あまりでKaggleのアカウントを作成しました。

甘かった・・・

Qiitaで関連記事をとりあえず読み漁ります。何が関連しているのかすら分からないまま読みます。

Kaggle入門者へ タイタニックチュートリアルを比較してみた

この記事を参考に、様々な手法が用いられるのを確認しました。

まず最初に

【Kaggle初心者入門編】タイタニック号で生き残るのは誰?

上記のコードを一つずつ理解しながら打ち込んでいき、無事にcsvファイルを提出。

参考記事と同じ、0.71770のスコアを確認できました。

これをサンプルと呼ぶことにします。

次は自分でコードを変えていきます。

細かなことはリンク先を参照していただくとして割愛しますが、最初の提出分では’Age’の欠損値には中央値を入れています。

’Name’に含まれるMr.などの敬称の情報で年齢を推定できるとあったので、これに挑戦してみることにしました。

ここで、初心者あるあるにぶつかります。

コードが全部載っていないと真似できない・・・・・・

A Data Science Framework: To Achieve 99% Accuracy

kaggle/titanic 欠損値の補完と特徴量エンジニアリング

この2つの記事を参考にして進めました。そもそも見たことのないコードの書き方だと、どういう風にサンプルを変更していけば良いか分からないので、理解でき、納得して書けるコードを探しました。

まず、’Name’から’Title’を抽出し、新たに列名として追加します。

train['Title'] = train['Name'].str.split(", ", expand=True)[1].str.split(" ", expand=True)[0]

次に、主要な'Title'毎に格納し、'Age'の平均値を出します。

train_mr = train[train['Title'] == 'Mr.']

train_mr['Age'].dropna().mean()

'Mr.'の平均値は32.368.9.452261306

となりました。

この32という数値で、欠損したセルを埋めていきます。

train_mr['Age'] = train_mr['Age'].fillna(32)

さらに、元の学習データを補完していきます。

train['Age'][train['Title'] == 'Mr.' ] = train_mr['Age']

後は、サンプルと同様、決定木を用いて分析しています。

提出結果はというと、0.73205でした。

1.5%ほど良くなりました。


まとめ

・初心者はコードを真似て、Kaggleチュートリアルにサブミットすることができる。

・基本的なコードの書き方を知らないため、なかなか応用がきかない。

・ひたすら試行錯誤すればなんとかなる。

・とりあえず、現在の分析方法は、決定木しか分からない。

・'Age'は、平均値や中央値で埋めるより、'Title'から推定した方が結果が良くなる。

まだまだタイタニック号の課題への挑戦は続きます・・・・・・。