モデル式の修正

1問目で'RM + PTRATIO + LSTAT - 1'というモデル式を使いました。
モデル式の修正を通して便利さを体験します。

# 前回のプログラムの読込
%run 1.ipynb
# LSTATとMEDVの関係
plt.plot(Xy.LSTAT, Xy.MEDV, '.');

目的変数MDEVと説明変数LSTATの関係を見ます。
直線というより指数分布に近い形をしています。

# log(LSTAT)とMEDVの関係
plt.plot(np.log(Xy.LSTAT), Xy.MEDV, '.');

試しに、np.log(Xy.LSTAT)の関係を見てみます。直線に近づきました。

# モデル式から説明変数の表を作成
X2 = dmatrix('RM + PTRATIO + np.log(LSTAT) - 1', data=X,
             return_type='dataframe')
X2[:1]

モデル式では、np.logのような関数も扱えます。
モデル式を'RM + PTRATIO + np.log(LSTAT) - 1'として実行します。
X2の列名がnp.log(LSTAT)になっていることを確認してください。

RMPTRATIOnp.log(LSTAT)
06.57515.31.605
# 線形回帰でクロスバリデーション
scores = cross_val_score(LinearRegression(), X2, y, cv=6)
score2 = scores.mean()
float(score2)
0.549

決定係数の平均(score2)は、0.549となり、1問目より良くなりました。

切片について

'...'というモデル式を指定すると、'1 + ...'と解釈されます。
たとえば、’RM + PTRATIO + LSTAT – 1’は、’1 + RM + PTRATIO + LSTAT – 1’になり、’RM + PTRATIO + LSTAT’と解釈されるので、y切片は0になります。
この当たりのしくみは、ちょっとわかりづらいので、'...''... - 1'のどちらかを使うことをおすすめします。

モデル式y切片
'...'あり
'... - 1'なし
'... + 1'あり
'... - 0'あり
'... + 0'なし
'... - -1'あり
'... + -1'あり
'... - -0'なし
'... + -0'あり
'... - 2'エラー
'... + 2'エラー

'+ 数字'または'- 数字'で使える数字は、0と1です。
'... + 1'は、y切片があるという意味になります。「y切片が1である」という意味ではありません。

コメント

タイトルとURLをコピーしました