前回
の続き。
回帰分析の実装例の詳説記事は今回でラスト。
今回は実際に構築したモデルを利用して、家賃の予測計算をするコードについて説明する。
下記に、解説対象のプログラムの実装例とその出力例を示しておく。
実装例
# モジュールのインポート
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
import sklearn
from sklearn.linear_model import LinearRegression
# データセットのインポート
file=pd.read_csv('apartment.csv',encoding='cp932')
#データセットのサイズ確認
print('データセットのサイズ:',file.shape)
# 説明変数
X=file.iloc[:,1:]
# 目的変数
Y=file.iloc[:,0]
# 説明変数Xと目的変数を、学習データ(8割)とテストデータ(2割)に分割(random_stateは0)
X_train, X_test, Y_train, Y_test = sklearn.model_selection.train_test_split(X, Y, test_size=0.2, random_state=0)
# 分割の確認
print('分割の確認:',X_train.shape, X_test.shape, Y_train.shape, Y_test.shape)
# 回帰分析実行
# インスタンスの作成
model = LinearRegression()
# モデルの作成
model.fit(X_train, Y_train)
# 回帰直線の確認
# 切片
print('切片の値 = ', model.intercept_)
# 係数
print('係数の値 = ', model.coef_)
# 学習データからの予測値
pred_train = model.predict(X_train)
# テストデータからの予測値
pred_test = model.predict(X_test)
# 結果確認
print('学習データの平均二乗誤差: ', np.mean((Y_train - pred_train) ** 2))
print('テストデータの平均二乗誤差: ', np.mean((Y_test - pred_test) ** 2))
print('決定係数:',model.score(X_test,Y_test))
# モデルを使った計算
Xs=35 # 部屋の広さ[m^2]
Xt=10 # 駅から建物までの所要時間[min]
Xo=5 # 築年数[year]
price=model.intercept_+model.coef_[0]*Xs+model.coef_[1]*Xt+model.coef_[2]*Xo
print('部屋の広さ',Xs,'m^2、徒歩',Xt,'分、築',Xo,'年の建物の部屋の家賃は約',round(price,1),'万円である。')
出力例
データセットのサイズ: (100, 4)
分割の確認: (80, 3) (20, 3) (80,) (20,)
切片の値 = 7.506892589329363
係数の値 = [ 0.15930654 -0.10031788 -0.14080724]
学習データの平均二乗誤差: 0.0006406930013219009
テストデータの平均二乗誤差: 0.0009590840329186921
決定係数: 0.999959366829125
部屋の広さ 35 m^2、徒歩 10 分、築 5 年の建物の部屋の家賃は約 11.4 万円である。
実際にプログラムを実行したい場合は、下記ボタンよりcsvファイル「apartment.csv」をダウンロードしてプログラムの保存先に保存すること。
7. モデルを利用した予測計算
最後に、学習で得られた結果を用いて家賃を予測してみる。
# モデルを使った計算
Xs=35 # 部屋の広さ[m^2]
Xt=10 # 駅から建物までの所要時間[min]
Xo=5 # 築年数[year]
price=model.intercept_+model.coef_[0]*Xs+model.coef_[1]*Xt+model.coef_[2]*Xo
print('部屋の広さ',Xs,'m^2、徒歩',Xt,'分、築',Xo,'年の建物の部屋の家賃は約',round(price,1),'万円である。')
round(数値,桁数)
は数値を指定の桁数に丸める組み込み関数である。
注意点は、一般的な四捨五入とは異なり、5を取った場合は偶数側に丸められる。
例
round(3.5,0) → 4.0
round(2.5,0) → 2.0 (四捨五入なら3だが、偶数側に丸められるので2になる。)
以上を踏まえて、例のコードを詳しく見ていくと次のようになる。
Xs=35 # 部屋の広さ[m^2]
Xt=10 # 駅から建物までの所要時間[min]
Xo=5 # 築年数[year]
⇒変数Xs, Xt, Xoそれぞれに部屋の広さ、駅からの所要時間、築年数を代入するコード。
price=model.intercept_+model.coef_[0]*Xs+model.coef_[1]*Xt+model.coef_[2]*Xo
⇒変数priceに、今回のモデルの回帰式を代入し、家賃の予測値を算出するコード。
model.intercept_は切片、modl.coef_[i]は回帰係数である。
print('部屋の広さ',Xs,'m^2、徒歩',Xt,'分、築',Xo,'年の建物の部屋の家賃は約',round(price,1),'万円である。')
⇒計算時の条件(説明変数)および、小数点以下1桁に丸めて家賃の予測値(目的変数)を表示するコード。
出力例は下記のようになる。
部屋の広さ 35 m^2、徒歩 10 分、築 5 年の建物の部屋の家賃は約 11.4 万円である。
終わりに
以上で、回帰分析のプログラム実装例の詳説は終了である。
詳説とは言っても細かい定義やら計算方法やらは端折っているから、厳密には詳説とは言えないだろう。
だが、最初の取っ掛かりとしてはこれぐらいでも十分ではないかと思う。
一見小難しく聞こえる機械学習のプログラムが、案外A4サイズ1枚に収まる長さで済むことが分かっただけでも、心のハードルはぐんと下がったのではないだろうか。
(少なくとも私はそうだった。)
次はこのノリで、教師あり学習の1つである「分類」に着手しようと思う。
参考文献
私が受講した通信講座。
機械学習とはなんぞやという体系的な話からPython操作の基礎、各アルゴリズムの理論、プログラムの実装例まで取り上げ、短期間で最低限の実用レベルまで学ぶことができるようになっている。
最低限の知識で全体を俯瞰しながら実装レベルまで学びたかった私にとって、最適な「足掛かり」となる講座だった。
END
コメント