2016-09-22 12 views
1

pythonと機械学習のまったく新しい。pythonロジスティック回帰 - patsyデザインマトリックスとカテゴリデータ

私はロジスティック回帰モデルを構築しようとしています。私はラムダを得るためにRで働いており、クロスバリデーションを使って最良のモデルを見つけ出し、今はそれをPythonに移行しています。

ここで私はデザインマトリックスを作成し、それをスパースにしました。次に、ロジスティック回帰を実行しました。それは働いているようだ。

私の用語はitem_numberがダミー変数になっていることをどのように知っているのかというカテゴリです。そしてどのような係数が各カテゴリ名と一緒になるのかをどのように知ることができますか?

from patsy import dmatrices 
from sklearn.linear_model import LogisticRegression 
from sklearn import preprocessing 


def train_model (data, frm, Rlambda): 
    y, X = dmatrices(frm , data, return_type="matrix") 
    y = np.ravel(y) 

    scaler = sklearn.preprocessing.MaxAbsScaler(copy=False) 
    X_trans = scaler.fit_transform(X) 

    model = LogisticRegression(penalty ='l2', C=1/Rlambda) 
    model = model.fit(X_trans, y) 

frm = 'purchase ~ price + C(item_number)' 
Rlambda = 0.01 
model, train_score = train_model(data1,frm,Rlambda) 

答えて

1

最初に私はあなたのコードに誤りを修正し、あなたの質問に答えます。

コード: train_model関数は、返すと思われる情報を返しません。現時点では何も返さず、モデルとトレーニングスコアの両方を返すようにしたいとします。モデルに合うときは、トレーニングスコアの意味を定義する必要があります。モデルはデフォルトで何も返しません。今はあなたが訓練したモデルを返すだけです。

次のようにあなたがあなたのtrain_model機能を更新する必要があります。

def train_model (data, frm, Rlambda): 
    y, X = dmatrices(frm , data, return_type="matrix") 
    y = np.ravel(y) 

    scaler = sklearn.preprocessing.MaxAbsScaler(copy=False) 
    X_trans = scaler.fit_transform(X) 

    model = LogisticRegression(penalty ='l2', C=1/Rlambda) 

    # model.fit() operates in-place 
    model.fit(X_trans, y) 

    return model 

を今、あなたはに対応してどのような変数を決定するときに、サイズ(n_classes, n_features)の決定関数で使用するすべての係数model.coef_リターンを、。係数の順序は、フィーチャが.fit()メソッドに渡された順序に対応しています。したがって、あなたの場合、X_transはサイズ(n_samples, n_features)のデザインマトリックスですので、model.coef_の係数のそれぞれは、Xと同じ順序でXn_featuresの係数に正確に対応します。

+0

ありがとうございます。しかし、私はカテゴリのデータを渡しているので、カテゴリの1つがダミー変数になって消えてはいけませんか? – tosh1611

+0

'item_number'が1から5までの値をとり、' C(item_number) 'の後に4つのダミー(0,1を取る)を得るとします。係数とダミーの名前のマッチングについて本当に気にしているのであれば、まずデータセットにラベルを付ける必要があります。代わりに 'return_type = 'dataframe''を設定してください。 x.head()、x.columnsなどを使用して変数名を検索します。 – Nicholas

関連する問題