この本のRのコードを基に、
Pythonに書きなおして勉強をしています。
※クリックするとamazonに飛びます
今回は第四章:重回帰分析を行います。
準備
import pandas as pd import numpy as np import Orange
今回は重回帰のモデル構築に、
sklearnではなくOrangeというモジュールを使用します。
これは、Orangeの方がモデルのデータを表示しやすいためです。
(予測をするのであれば、sklearnの方が楽ですが・・・)
データの準備
本書によると、扱うデータは
- ビールの販売データ(被説明変数)
- 販売促進の施策(説明変数)
のようです。
beer = pd.read_csv beer = pd.read_csv("ch4_3_2.txt",sep=" ") beer.head() # Revenue CM Temp Firework #0 47.143467 141 31 2 #1 36.923626 144 23 1
Orangeはデータの扱いがpandasとは異なっています。
具体的には、domainというデータの情報と、
instancesというデータ部分に分かれています。
また、説明変数と被説明変数をdomainで設定する必要があります。
これらを準備することにします。
x1 = Orange.feature.Continuous("CM") x2 = Orange.feature.Continuous("TEMP") x3 = Orange.feature.Continuous("FIREWORK") y = Orange.feature.Continuous("Revenue") # リスト内包表記を使ってもよい # headers= [Orange.feature.Continuous(h) for h in beer.columns]
Orange.feature.Continuous
はOrangeで小数を扱うデータ型です。
このように、データを定義した後、domainを用意します。
domain = Orange.data.Domain([x1,x2,x3],y)
説明変数と被説明変数はこのようにdomainを定義するときに区別して渡すことができます。
これにinstancesを付け加えるのですが、
domainの並び順になってしまうので、pandasのデータを少しいじっておきます。
# 一度行を足す beer["y"] = beer["Revenue"] # 最初のRevenueは渡さない beer2 = Orange.data.Table(domain,np.array(beer.ix[:,1:5]))
Orange.data.Table(domain,instances)
でOrangeが扱えるデータになります。
一度、numpyのarrayにしてから渡します。
これでデータの準備が整いました。
モデリングと確認
learner = Orange.regression.linear.LinearRegressionLearner() classifier = learner(beer2)
重回帰分析用モデルのインスタンスをつくり、
データを渡してあげます。
これで完了です。
中身を見てみます。
print classifier # Variable Coeff Est Std Error t-value p # Intercept 17.234 12.405 1.389 0.176 # CM -0.043 0.078 -0.551 0.586 # TEMP 0.987 0.179 5.501 0.000 *** # FIREWORK 3.182 0.960 3.314 0.003 ** #Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 empty 1
本書と同じような結果になりました!
こんな感じでRと同じ偏回帰係数の確認が可能です。
推定残差もclassifier.residuals
で確認可能です。
今回はここまで。
次はクラスタリング。
前回の記事はこちら。 esu-ko.hatenablog.com