見出し画像

【線形回帰】

まずは、こんな散布図だった場合に使ったほうがいいよという事で。

公開されている、ボストン市郊外の地域別住宅価格のデータセットを取り込みます。

from sklearn.datasets import load_boston
boston = load_boston()

import pandas as pd
boston_df = pd.DataFrame(boston.data, columns = boston.feature_names) 
boston_df['MEDV'] = boston.target  
import matplotlib.pyplot as plt
%matplotlib inline
plt.scatter(boston_df['RM'], boston_df['MEDV']) # 平均部屋数と住宅価格の散布図をプロット

plt.title('Scatter Plot of RM vs MEDV')    # 図のタイトル
plt.xlabel('Average number of rooms [RM]') # x軸のラベル
plt.ylabel('Prices in $1000\'s [MEDV]')    # y軸のラベル
plt.grid()   

画像1

画像2

散布図を見ると、相関関係がある。という事が分かります。その場合、線形回帰が使える。

線形回帰の線は、相関がある傾きに線を引く時、全てのプロットへの距離が一番小さく抑えられる角度の線。

その離れた距離は「二乗平均誤差」という計算式で表すことが出来る。


X = [[10.0], [8.0], [13.0], [9.0], [11.0], [14.0], [6.0], [4.0], [12.0], [7.0], [5.0]]
y = [8.04, 6.95, 7.58, 8.81, 8.33, 9.96, 7.24, 4.26, 10.84, 4.82, 5.68]

試しに散布図を作成すると。

plt.scatter(X, y, color = 'blue') 

画像3

相関が有るので、意味を持ちそうです。

plt.scatter(X, y, color = 'blue')    
plt.plot(X, model.predict(X), color = 'red')

画像4


from sklearn.linear_model import LinearRegression
#学習させたいモデルをimport
model = LinearRegression()
#クラスからオブジェクトの生成
model.fit(X, y) 
#学習させる
print(model.intercept_) # 切片 
print(model.coef_) # 傾き
y_pred = model.predict([[12], [14]]) 
print(y_pred) 

画像5

12のところが大体yでは9。14のところは10となりました。


いいなと思ったら応援しよう!