👨🏫
教師あり学習(回帰)
[!abstract]+ Curriculum
- 教師学習(回帰)の基礎
- 教師学習(回帰)の応用
- 添削問題
教師学習(回帰)の基礎
回帰モデルの性能評価指標:決定係数
#R_Square #MSE #RMSE
教師学習(回帰)の応用
正規化
regularization #regularization #regularization/L1 #regularization/L2
- L1正規化:予測に影響が少ないデータのパラメータを0に近づける。
- L2正規化:係数が大きくなりすぎないように抑制。一般化が容易。
ラッソ回帰
#lasso
- L1正規化を行いながら、線形回帰の適切なパラメータを設定する回帰モデル。
- データの行の数が列の数より少ない場合に利用すると良い。
ラッソ回帰と線形回帰の比較
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import Lasso
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
# データを生成
X, y = make_regression(n_samples=100, n_features=100, n_informative=60, n_targets=1, random_state=42)
train_X, test_X, train_y, test_y = train_test_split(X, y, random_state=42)
# 以下にコードを記述してください
# 線形回帰
model = LinearRegression()
model.fit(train_X,train_y)
# test_X, test_yに対する決定係数を出力してください
print("Linear regression:{}".format(model.score(test_X, test_y)))
# ラッソ回帰
model = Lasso()
model.fit(train_X,train_y)
# test_X, test_yに対する決定係数を出力してください
print("Lasso regression:{}".format(model.score(test_X, test_y)))
>> 출력결과
>> Linear regression:0.8475616529676024
>> Lasso regression:0.9679210925939417
リッジ回帰
#ridge
- L2正規化を行いながら、線形回帰の適切なパラメータを設定する回帰モデル。
- 一般化しやすい
from sklearn.linear_model import Ridge
from sklearn.linear_model import LinearRegression
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
# データを生成
X, y = make_regression(n_samples=100, n_features=50, n_informative=50, n_targets=1, noise=100.0, random_state=42)
train_X, test_X, train_y, test_y = train_test_split(X, y, random_state=42)
# 以下にコードを記述してください
# 線形回帰
model = LinearRegression()
model.fit(train_X,train_y)
# test_X, test_yに対する決定係数を出力してください
print("Linear regression:{}".format(model.score(test_X, test_y)))
# リッジ回帰
model = Ridge()
model.fit(train_X,train_y)
# test_X, test_yに対する決定係数を出力してください
print("Ridge regression:{}".format(model.score(test_X, test_y)))
>> 출력결과
>> Linear regression:0.7802322835148345
>> Ridge regression:0.7807547182116584
ElasticNet 회귀
#elasticnet
- ラッソ回帰とリッジ回帰を組み合わせて正規化項を作るモデル
- メリット:情報の取捨選択(ラッソ回帰)と一般化(リッジ回帰)。
添削問題
各モデル間の決定係数を比較する ### 各モデル間の決定係数を比較する
import pandas as pd
from sklearn.model_selection import train_test_split
# 必要なモジュールを追記してください。
from sklearn.linear_model import LinearRegression, Ridge, Lasso, ElasticNet
# データの読み込み
concrete_data = pd.read_excel("https://archive.ics.uci.edu/ml/machine-learning-databases/concrete/compressive/Concrete_Data.xls")
concrete_train_X, concrete_test_X, concrete_train_y, concrete_test_y = train_test_split(
concrete_data.drop('Concrete compressive strength(MPa, megapascals) ', axis=1),
concrete_data['Concrete compressive strength(MPa, megapascals) '], random_state=42)
# 以下にコードを記述してください。
# LinearRegression
model_linear = LinearRegression()
model_linear.fit(concrete_train_X, concrete_train_y)
print("LinearRegressionの決定係数は{}です。".format(model_linear.score(concrete_test_X,concrete_test_y)))
#Ridge
model_ridge = Ridge()
model_ridge.fit(concrete_train_X, concrete_train_y)
print("Ridgeの決定係数は{}です。".format(model_ridge.score(concrete_test_X,concrete_test_y)))
#Lasso
model_lasso = Lasso()
model_lasso.fit(concrete_train_X, concrete_train_y)
print("Lassoの決定係数は{}です。".format(model_lasso.score(concrete_test_X,concrete_test_y)))
#ElasticNet
for i in range(1, 10):
ratio = i * 0.1
model_elasticnet = ElasticNet(l1_ratio=ratio)
model_elasticnet.fit(concrete_train_X, concrete_train_y)
print("ElasticNetのL1割りあいが{:.1f}の時の決定係数は{}です。".format(ratio, model_elasticnet.score(concrete_test_X,concrete_test_y)))
Discussion