今回は第六章のロジスティック回帰分析です。
参考にしているのは毎度おなじみのこちらの書籍です。(書籍内のコードはRです)
- 作者: 尾崎隆
- 出版社/メーカー: 技術評論社
- 発売日: 2014/08/22
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (6件) を見る
今回もRのコードだったものをPythonに変更していきます。
ロジスティック回帰は結構使い勝手が良いので、しっかりと身につけたい所です。
ちなみに、今回も定番のsklearnではなくOrangeというモジュールを使用していきます。
日本語の情報が少ないので、結構、勉強が大変です。
準備
import pandas as pd import numpy as np import Orange
重回帰分析の回と同様に、
細かいデータがみたいので、
Orangeを使用します。
データの準備
cv = pd.read_csv("ch6_4_2.txt",sep = " ") cv.head() # d21 d22 d23 d24 d25 d26 cv #0 1 0 1 1 0 1 1 #1 0 1 0 1 1 0 0 #2 1 0 1 0 1 1 1 #3 0 1 0 0 1 0 0 #4 1 0 0 1 1 1 1
行動とコンバージョンのログデータのようですね。
どのような行動をとるとコンバージョンと結びつくか、
をロジスティック回帰で分析します。
今回もorangeのdomainを用意します。
今回は0,1のデータですが、
数値ではなく二値カテゴリカルデータなので、
Discrete型を使用します。
これは事前に、格納できるカテゴリーの定義が必要です。
header = [Orange.feature.Discrete(h) for h in cv.columns] # カテゴリを定義 for h in header: h.add_value("1") h.add_value("0") domain = Orange.data.Domain(header) func = lambda x:map(str,x) cv2 = Orange.data.Table(domain,map(func,np.array(cv)))
Descreteは文字列型を受け取るので、
事前に文字列に変換するヘルパーをlambdaで作りました。
モデリングと確認
learner = Orange.classification.logreg.LogRegLearner() classifier = learner(cv2) print Orange.classification.logreg.dump(classifier)
とすると、以下の様に変数ごとのデータを見ることができます。
class attribute = cv class values = <1, 0> Feature beta st. error wald Z P OR=exp(beta) Intercept -1.88 1.07 -1.77 0.08 d21=0 2.06 0.92 2.24 0.03 7.81e0 d22=1 1.76 0.79 2.23 0.03 5.81e0 d23=0 -0.21 0.65 -0.33 0.74 8.07e-1 d24=1 -0.30 0.89 -0.34 0.74 7.41e-1 d25=0 -0.37 0.64 -0.58 0.56 6.88e-1 d26=0 1.43 0.68 2.10 0.04 4.16e0
少し気を付けなくてはいけないのは、
変数名の横に=0や=1と書いてある所。
これはこの値に対して、betaやzが正負であることを意味しています。
d21=0なので、0方向に対しては、betaが正だけど、
d22は=1なので、1に対しては正だが、0に対しては負ということになります。
(分かりにくい)
今回はここまで。
書籍内では、被説明変数を連続値にしてやる方法もあったけれど、
Pythonではその方法がわからず。。。
前回の記事はこちら