Pythonの機械学習プログラムを勉強したらKaggleのタイタニック問題にトライ

DecisionTreeRegressorの学習過程を可視化したもの

先日、機械学習の勉強会に参加してきた。

そこで、Kaggleの存在を知ることになりました。

Kaggleは、世界中のデーターサイエンティスト、AIエンジニアが集まるネットワーク上のコミュニティです。

企業や研究者がデータを投稿し、コンペという形で精度の良い予測モデリングを競わせます。

最近では、日本企業のメルカリがデータを提供して、世界中のデーターサイエンティスト、AIエンジニアに精度の良い予測モデリングを競わせたことで有名です。

Kaggleを始めたらまずはタイタニック問題から

勉強会でKaggleに詳しい人に、最初はどんな問題をやったらいいか聞いてみました。その結果、タイタニックの生き残り予測モデルであることがわかりました。

タイタニックの生き残り予測モデルとは、タイタニックの乗船客データをみて、どんな人が生還しているのかを予測するモデルをつくるものです。すでにコンペの期限は過ぎていて、賞金はゲットできないが、実践的なデータが使えるので実務に近い勉強ができる。

というわけで、タイタニックの問題をやってみたので、ポイント絞って問題を特く考え方を書いていきたいと思います。

コードを書く前の準備

■実装環境

・Python3.6

・jupyter notebook

・以下のライブラリー

numpy

pandas

sklearn

graphviz(問題を解くのに必要ではないが、DecisionTreeRegressorの学習過程を見るのに使う)

Kaggle上でもコードを書くことが可能です。しかし、読み込みが1分以上かかることがあり、ものすごく遅いため、自分のPCに開発環境を入れて実装しています。

■タイタニック問題のコンペの概要

タイタニック問題の概要が書いてあります。

実際の作業内容は、概要の指示に従います。

Titanic: Machine Learning from Disaster

■コンペのサイトからデータをダウンロードします

コンペのサイトから3つのデータファイル(csv)をダウンロードします

https://www.kaggle.com/c/titanic/data

■ダウンロードするデータ

train.csv・・・訓練データ

test.csv・・・テストデータ

gender_submission.csv・・・予測のセットを含めます。

実際に書いたソースコード

実際に書いたコードは以下の通りです。

実際に書いたコード

実際に書いたコードです。説明はコード内のコメントに記載しました。

# coding: utf-8
#ライブラリー読み込み
import numpy as np 
import pandas as pd 

#import sklearn.tree as  DecisionTreeRegressor これでは使えない
#機械学習のモデル作成にsklearnのDecisionTreeRegressorを使用する
from  sklearn.tree import DecisionTreeRegressor



#訓練データを読み込む
tf_train = pd.read_csv("train.csv")

#テスト用のデータを読み込む
tf_test = pd.read_csv("test.csv")

#正解(予測セット)データを読み込む
tf_gender_submission = pd.read_csv("gender_submission.csv")
#tf_train.head()
tf_train.head()


#欠損値の穴埋めをする(testのときにデータと正解値の行数が一致しなくなるため)
#ロジックは前の値で置き換えるもの
#しかし、テストにつかうデータに対して、欠損値に穴埋めしてよいのかという疑問は残る
tf_train = tf_train.fillna(method="ffill")
tf_test = tf_test.fillna(method="ffill")



#get csv
#Fareは、testデータに欠損があるため
#drop_column =["Name","PassengerId","SibSp","Cabin","Ticket","Embarked"] #0.20055821371610846
#drop_column =["Name","PassengerId","SibSp","Cabin","Ticket","Embarked","Pclass"] #0.21491228070175442
drop_column =["Name","PassengerId","SibSp","Cabin","Ticket","Embarked","Pclass","Age","Parch"] #0.19311944506819512(試した結果)
#drop_column =["Name","PassengerId","SibSp","Cabin","Ticket","Embarked","Pclass","Age","Parch","Fare"] #0.21401855934746247

#不要と思われるカラムを削除する
tf_train.drop(drop_column ,axis=1, inplace=True)
tf_test.drop(drop_column ,axis=1, inplace=True)


genders = {'male': 0, 'female': 1} # 辞書を作成
# Sexをgendersを用いて数値に変換
tf_train['Sex'] = tf_train['Sex'].map(genders)
tf_test['Sex'] = tf_test['Sex'].map(genders)


X_train = tf_train.iloc[:, 1:]
Y_train = tf_train['Survived']

X_train.head()


#モデルを作成する
tree_model = DecisionTreeRegressor() #max depthによって値が変わる
fit = tree_model.fit(X_train, Y_train)


#様子を見るためtreeの図を出力する
from sklearn import tree
import graphviz 

dot_data = tree.export_graphviz(fit, out_file=None)
graph = graphviz.Source(dot_data) 
graph.render("taitanic") 



#テスト用データで予測してみる
predicted_survived = tree_model.predict(tf_test)
print(tf_test.isnull().any())


####################################
#ここからデータの検証に入る
####################################
from sklearn.metrics import mean_absolute_error

#0に近づくほど精度が高いモデルと言える
y = tf_gender_submission.Survived
mean_absolute_error(y, predicted_survived)

#最終的に「0.19311944506819512」という数字が出た(0に行くほど精度が高い。逆に1に近づくほど精度が悪いとも言う)

使用したモデルはDecisionTreeRegressorを使ってみた

DecisionTreeRegressorとは木のように仕分けするロジックです。

DecisionTreeRegressorのロジックは、scikit-learnの公式サイトに以下のように書かれています。

Decision Trees (DTs) are a non-parametric supervised learning method used for classification and regression. The goal is to create a model that predicts the value of a target variable by learning simple decision rules inferred from the data features.

https://scikit-learn.org/stable/modules/tree.html#tree

誤差の割合は

予測セットとモデルから予測した数字の誤差を調べると

「0.19311944506819512」という数字が出た。

0に近づくほど、精度が高いと言えます。

使用するデータ(カラム)の決定。

独断と偏見で、必要と思われるカラムを抽出してライブラリDecisionTreeRegressorにかけたという感じです。カラムを追加したり、削ったりして試行錯誤しました。

最終的な誤差が「0.19311944506819512」という数字になりました。

まとめ

Kaggleは、実際のデータを使って機械学習の習得に役立ちます。

Kaggleには、複数のデータからパターンを見つけるなど難しいものもたくさんありますが、挑戦してみる価値はあるかと思います。

タイタニック問題の解き方がわかってきたら、いろいろな問題に挑戦してみると良いかもしれません。

評判も見えるPGスクール検索・比較表

どのプログラミングスクールがいいんだろう?
そんな疑問をお持ちの方に、評判も見えるプログラミングスクール検索・一括比較サービスをリリースしました。

条件を指定することにより、気になるプログラミングスクールを一発で比較できます。
きっと、条件にあったスクールが見つかるかと思います!
詳細は、以下の画像をクリック!

プログラミングスクール検索・比較のペン太ブル
スポンサーリンク
PR




PR




シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
PR