Kaggleに挑戦 モデルの作成から学習へ

AIプログラミング
スポンサーリンク

さて前回までは、学習をさせるためにタイタニック号の生存予測のためのデータの準備まで行いました。

今回は、準備したデータを作成したモデルに学習させ、Kaggleに提出してみましょう。

 

1.環境

言語:python

エディタ:spyder

フレームワーク:Tensorflow

 

2.作成フロー

□ライブラリのインポート

□決定木モデル作成

□学習

□予測

□提出

このような流れで作業していきたいと思います。

 

3.ソースコード詳細と説明

import pandas as pd
import os
import numpy as np
from sklearn import tree

まず必要なライブラリをインポートしましょう。

今回は学習器に決定木を使用するため、scikit-learnで実装されている決定木分析をインポートします。

scikit-learnはpythonの機械学習ライブラリで、オープンソースなので誰でも無料で利用することができます。

scikit-learnは多くの機械学習アルゴリズムが実装されており、また多くのサンプルデータも備えているため、手元にデータがなくても、すぐに機械学習を始めることができます。

 

#作成csvデータのインポート
os.chdir('C:/Users/User名/ディレクトリ名/taitanic')
train = pd.read_csv('C:/Users/User名/ディレクトリ名/tai_train.csv') 
test =pd.read_csv('C:/Users/User名/ディレクトリ名/tai_test.csv')

データの準備で作成したCSVファイルをインポートしましょう。

訓練データ:train

評価用データ:test

 

#目的変数と説明変数を決定して取得
target = train["Survived"].values
explain = train[["Pclass","Sex","Age","Fare"]].values

訓練データから説明変数目的変数を決定します。

説明変数:目的変数を説明する変数のこと。「独立変数」とも呼ばれ、物事の原因とも考えられる。

目的変数:予測したい変数のことで、「従属変数」「外的基準」とも呼ばれる。物事の結果とも考えられる。

今回の場合、目的変数は結果を示すものであるので「Survived」。

説明変数には、Pclass・Sex・Age・Fareの4つで見ていきます。

 

#決定木の作成
model = tree.DecisionTreeClassifier()

#学習
model = model.fit(explain,target)

モデルの作成をしていきましょう。

決定木分析は、tree.DecisionTreeClassifier()というクラスを使用することでモデルを作成することができます。

学習はfit関数を使用するだけで完了です。fit関数は、

学習モデル = (作成したモデル). fit([説明変数],[目的変数])

という使い方をします。

 

#作成したモデルを用いて予測する
test_explain = test[["Pclass","Sex","Age","Fare"]].values
prediction = model.predict(test_explain)

次に、予測をしていきましょう。

まずtestデータから”Pclass”,”Sex”,”Age”,”Fare”の説明変数を抽出していきましょう。

predict()メソッドを使用し、説明変数を引数に指定し予測を実行。

 

#予測結果の出力
print(prediction.shape)
print(prediction)

予測した結果を表示していきましょう。

以下のように、予測結果のサイズと結果の表示がされます。

 

#予測結果データとPAssengerIDを結合
PassengerID = np.array(test["PassengerId"]).astype(int)
result = pd.DataFrame(prediction,PassengerID, columns=["Survived"])
result.to_csv("Titanic_result.csv",index_label=["PassengerId"])

ここまで学習~予測までができました。

そしたら、いよいよkaggleに投稿です。投稿する前に、データを提出できる形に整えていきましょう。

要求されているデータフレームのカラムにはPassengerIdが必要なので、予測結果[“Survived”]と[“PassengerId”]を結合していきましょう。

結合の流れは、testから[“PassengerId”]をint型で抽出し、それをresultという変数名で、新規にデータフレームを作成します。

このまま保存すると、PassengerIdがindex名が”index”となってしまうので、indexを[“PassengerId”]に変更しcsvファイルとして保存しましょう。

上の画像のようになればOKです。

 

4.ソースコード全文

import pandas as pd
import os
import numpy as np
from sklearn import tree

#作成csvデータのインポート
os.chdir('./taitanic')
train = pd.read_csv('./tai_train.csv') 
test =pd.read_csv('./tai_test.csv')


#目的変数と説明変数を決定して取得
target = train["Survived"].values
explain = train[["Pclass","Sex","Age","Fare"]].values

#決定木の作成
model = tree.DecisionTreeClassifier()

#学習
model = model.fit(explain,target)

#作成したモデルを用いて予測する
test_explain = test[["Pclass","Sex","Age","Fare"]].values
prediction = model.predict(test_explain)

#予測結果の出力
print(prediction.shape)
print(prediction)

#予測結果データとPAssengerIDを結合
PassengerID = np.array(test["PassengerId"]).astype(int)
result = pd.DataFrame(prediction,PassengerID, columns=["Survived"])
result.to_csv("Titanic_result.csv",index_label=["PassengerId"])

 

 

 

5. Kaggleに予測結果を提出

ここからからタイタニックのコンペのページに行く。

 

Submit Prediction」から、作成したcsvファイルを提出ページに移動する。

ファイルをアップしたら、「Make Submission」ボタンをクリック。

提出した結果は、Scoreというところに表示されます。今回は0.72248となりました。イマイチですね。

また「Jump to your position on the leaderboard」をクリックすると、自分の順位が表示されます。

 

6.おわりに

今回は、モデルの作成から予測、さらにkaggleに提出までを行いました。

予測結果は72%ほどとイマイチな結果となりましたが、今後色々と試して精度を上げていきたいと思います。

 

 

コメント

タイトルとURLをコピーしました