見出し画像

線形回帰でタイタニックを試す 3

こんにちは、junkawaです。
前回に引き続き、cousera machine learningで学んだ線形回帰を使ってKaggleのタイタニックコンペを解いていきます。

今回は、sklearnライブラリのLinearRegressionを利用して線形回帰を解きます。

Colaboratoryで実行した結果を記します。

import pandas as pd
import numpy as np
from sklearn.linear_model import *

ライブラリ sklearn.linear_model をインポートします。

def prepareData(data):
  data.loc[data["Sex"] == "male", "Sex"] = 0
  data.loc[data["Sex"] == "female", "Sex"] = 1
  data["Age"] = data["Age"].fillna(data["Age"].median())

train = pd.read_csv("train.csv")
prepareData(train)

test = pd.read_csv("test.csv")
prepareData(test)

X = train.loc[:,["Sex","Age","SibSp","Parch","Fare"]] # or .drop[]
y = train.loc[:,"Survived"]
Xdash = test.loc[:,["Sex","Age","SibSp","Parch","Fare"]].fillna(0)

データの下準備までは前回と同じです。

X、yが学習に必要な変数。Xdashが予測のためのデータです。


alg = LinearRegression()
alg.fit(X, y)
predictions = alg.predict(Xdash)

sklearnのLinearRegression()を使用します。
fit()で学習させ、predict()で予測します。


predictions = pd.DataFrame(data=predictions)
predictions.columns = ["Survived"]
predictions[predictions >= 0.5] = 1
predictions[predictions < 0.5] = 0
predictions[["Survived"]] = predictions[["Survived"]].fillna(0.0).astype(int)

output = test.loc[:,["PassengerId"]].join(predictions)
output.to_csv("submit_sklearnLR.csv", index=False)

予測後、提出ファイルを作成する部分は前回までと同じです。

Kaggleに提出

!kaggle competitions submit -c titanic -f submit_sklearnLR.csv -m ""

スコアは前回と変化なしです。
というのも予測結果が、最急降下法、正規方程式と全く同じだったからです。

thetaについて(2018/8/17追記)

sklearn LinearRegressionのtheta

alg = LinearRegression()
alg.fit(X, y)
predictions = alg.predict(Xdash)
print ("coef: ", alg.coef_)
print ("intercept: ", alg.intercept_)

alg.coef_、alg.intercept_でthetaを出力します。

coef:  [ 0.53724178 -0.00297556 -0.05479839 -0.03224785  0.00195991]
intercept:  0.2597225298724204

intercept(定数項,y切片)はtheta0、coef(coefficients,回帰係数)はtheta1,theta2,... なので、上記はこうなります。

theta0  0.2597225298724204
theta1  0.53724178
theta2 -0.00297556
theta3 -0.05479839
theta4 -0.03224785
theta5  0.00195991

正規方程式のtheta

theta0  0.259723
theta1  0.537242
theta2 -0.002976
theta3 -0.054798
theta4 -0.032248
theta5  0.001960

sklearnのLinearRegressionの結果と、正規方程式で求めたthetaが一致することが分かります。

まとめ

sklearnライブラリの線形回帰LinearRegressionを使用してタイタニックコンペを解きました。

次回は coursera machine learning Week3の学習後、再度挑戦してみたいと思います。

ご覧下さりありがとうございます。いただいたサポートは図書館への交通費などに使わせていただきます。