線形回帰で、住宅価格予測回帰モデル(データはscikit-learnの付属データボストン市の住宅価格
データ)を作成しています。
そこで、ダミー変数に特徴量の標準化を使うべきかという点でご意見をいただきたいです。
下記のデータセットで、CHAS(チャールズ川によるダミー変数、1が川周辺、0がそれ以外)
がダミー変数ですが、このCHASは「訓練データを変換器で標準化」をする必要がないのでは
と考えます。ここで、標準化は「平均が0、標準偏差が1になるようにデータを加工(スケー
リング)」であり、ダミー変数は正規化に近く、「最低が0、最高が1になるようにデータを
加工(スケーリング)」したものと考えることができ、これを標準化すると予測がうまくいか
ないのではと、考えました。教科書的なものでは、chasも他の12項目の説明変数と同じく
、下記のように標準化して回帰モデルにfitさせていました。ご回答をよろしくお願いいたします。
# ライブラリのインポート %matplotlib inline import matplotlib.pyplot as plt import numpy as np import pandas as pd from sklearn.linear_model import LinearRegression from sklearn.preprocessing import StandardScaler from sklearn.preprocessing import PolynomialFeatures from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error # 住宅価格データセットの読み込み df=pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/housing/housing.data', header=None, sep='\s+') df.columns=['CRIM','ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV'] # データフレームの形状 print('dfの形状', df.shape) # 全ての特徴量を選択 X=df.iloc[:, 0:13].values # 正解に住宅価格(MDEV)を設定 y = df['MEDV'].values # 特徴量と正解を訓練データとテストデータに分割 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) print('X_trainの形状:',X_train.shape,' y_trainの形状:',y_train.shape,' X_testの形状:',X_test.shape,' y_testの形状:',y_test.shape) # 特徴量を2次多項式に変換 POLY = PolynomialFeatures(degree=2, include_bias = False) X_train_pol = POLY.fit_transform(X_train) X_test_pol = POLY.transform(X_test) X_train_pol.shape, X_test_pol.shape # 特徴量の標準化 sc = StandardScaler() # 訓練データを変換器で標準化 X_train_std = sc.fit_transform(X_train_pol) # テストデータを作成した変換器で標準化 X_test_std = sc.transform(X_test_pol) # 線形回帰モデルを作成 model = LinearRegression() # モデルの訓練 model.fit(X_train_std, y_train)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/07 16:18 編集
2020/05/07 15:54