単回帰(説明変数が1つ)を拡張し、説明変数が複数の場合に対応する。
以下の台湾の不動産のデータセットで実験します。
データセットは、台湾新北市新店區から収集したもの。不動産評価は回帰問題である。
入力は以下の通り。
X1=取引日(例:2013.250=2013年3月)
X2=築年数(単位:年)
X3=最寄りの駅までの距離(単位:メートル)
X4=徒歩での生活圏内のコンビニエンスストアの数(整数)
X5=地理座標、緯度 (単位:度)
X6=地理座標、経度 (単位:度)
出力は以下の通り。
Y=単位面積の住宅価格(10000台湾ドル/平、平は現地単位、1平=3.3m2乗)
https://archive.ics.uci.edu/ml/datasets/Real+estate+valuation+data+set#
準備
pip install pandas
pip install requests
pip install xlrd
pip install sklearn
データの読み込みと確認と整理
import pandas as pd
import requests
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
# 読み込み
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/00477/Real%20estate%20valuation%20data%20set.xlsx'
res = requests.get(url).content
data = pd.read_excel(res, sheet_name=0, encoding="utf-8", header=0)
data.columns = ['No', 'X1 transaction date', 'X2 house age', 'X3 distance to the nearest MRT station',
'X4 number of convenience stores', 'X5 latitude', 'X6 longitude', 'Y house price of unit area']
# 確認
print('データ形式:{}'.format(data.shape))
print(data.head())
# 使うものに絞る
data = data[['X2 house age', 'X3 distance to the nearest MRT station',
'X4 number of convenience stores', 'Y house price of unit area']]
# データ形式の確認
print(data.dtypes)
# 相関を確認
print(data.corr())
モデルの構築と評価
# 目的変数、説明変数
X = data.drop('Y house price of unit area', axis=1)
y = data['Y house price of unit area']
# 訓練データ、テストデータの準備
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=0)
# 学習
model = LinearRegression()
model.fit(X_train, y_train)
# 結果
print('train:{:.3f}'.format(model.score(X_train, y_train)))
print('test:{:.3f}'.format(model.score(X_test, y_test)))
結果
train:0.536
test:0.546
学習時とテスト時のスコアが近く、過学習はしていなさそうです。現状では精度はいまいちのようですが、説明変数を増やしたり減らして見てみると面白いです。