線形回帰でタイタニックを試す 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の学習後、再度挑戦してみたいと思います。
ご覧下さりありがとうございます。いただいたサポートは図書館への交通費などに使わせていただきます。