はじめに
はじめまして。初めてQiitaに投稿します。
一週間前から、機械学習に興味を持ち、pythonをかじり始めました。
Qiitaの存在を知ったのもその頃なので、技術系ブログ作法というかマナーというか、そういうものが抜けていたら、こっそり教えていただけると幸いです。
投稿者の紹介
機械学習はおろか、プログラミングもほぼ初心者。
数年前に、ドットインストールを視聴して、HTMLやCSS、PHP、MY SQL等のコードを真似て、遊んでいた程度。
(当時は全コース無償提供されていました。)
統計学どころか基本的な数学の知識にも乏しい。英語も儘ならず。
環境
Windows OS
jupyter notebook
pythonとの出会い
『機械学習エンジニアになりたい人のための本』を読み、機械学習にはpythonが適していることを知りました。
現在、ProgateやUdemyで学びながら、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'から推定した方が結果が良くなる。
まだまだタイタニック号の課題への挑戦は続きます・・・・・・。