これの続きです。
基本機能は上記で終わっているので、
今回は目的変数を足してみます。
変更点
ドロップダウンで目的変数を足すことにします。
dp = wi.Dropdown(
options=bos.columns,
disabled=False
)
使うモデルを回帰にします。
今回はシンプルに、sklearn
で回帰にします。
from sklearn.linear_model import LinearRegression reg = LinearRegression(normalize=False)
▼statsmodels
を使っての回帰を調べた時の記事はこちらです。
esu-ko.hatenablog.com
また、繰り返しの分析の結果を記録に残せるようにします。
self.log
に実行ごとに結果を記録します。
y_pred = self.res.predict(self.data.loc[:,feature_names]) log = { 'features':feature_names, 'coef': pd.Series(self.res.coef_,index=feature_names), 'rms': sqrt(mean_squared_error(self.data[target_],y_pred)), 'r2':r2_score(self.data[target_],y_pred) } self.log.append(log)
クラスにする
前回書いたようにクラスにします。
目的変数などをまとめて渡せす形に変更しました。
from sklearn.datasets import load_boston import ipywidgets as wi import pandas as pd from sklearn.linear_model import LinearRegression #評価系 from sklearn.metrics import r2_score,mean_squared_error from math import sqrt class RegGui: def __init__(self,data): self.log = [] self.res = None self.data = data self.checks = [wi.Checkbox(description=n) for n in self.data.columns] self.dp = wi.Dropdown( options=data.columns, disabled=False ) self.button = wi.Button(description='実行') self.button.on_click(self.on_click) self.left_box = wi.VBox([self.dp]) self.center_box = wi.VBox(self.checks) self.right_box = wi.VBox([self.button]) def panel(self): display(wi.HBox([self.left_box, self.center_box,self.right_box]) ) def on_click(self,e): feature_names = [cb.description for cb in self.checks if cb.value] target_ = self.dp.value reg = LinearRegression() self.res = reg.fit(y=self.data[target_],X=self.data.loc[:,feature_names]) y_pred = self.res.predict(self.data.loc[:,feature_names]) log = { 'features':feature_names, 'coef': pd.Series(self.res.coef_,index=feature_names), 'rms': sqrt(mean_squared_error(self.data[target_],y_pred)), 'r2':r2_score(self.data[target_],y_pred) } self.log.append(log)
試しにボストンデータを渡してみます
b = load_boston() bos = pd.DataFrame(lb['data'],columns = lb['feature_names']) bos['price'] = lb['target'] gui = RegGui(bos) gui.panel()
プルダウンで目的変数を、チェックボックスで説明変数を選んで実行します。
回帰係数はgui.res.coef_
でもとれますし、self.log
から履歴もとれるようにしました。
(本当は自動でグラフを出力できるようにしたかったんですが、更新されず、何度もグラフがでてしまい、、、また勉強します)