2016-09-22 6 views
1

Python 및 기계 학습에 새로운 아주 새로운.python 로지스틱 회귀 - patsy 디자인 매트릭스 및 범주 데이터

로지스틱 회귀 모델을 작성하려고합니다. 저는 R에서 람다를 얻기 위해 일했으며 십자가 유효성 검사를 사용하여 최고의 모델을 찾았으며 지금은 파이썬으로 옮깁니다.

여기서는 디자인 행렬을 생성하고 스파 스 (sparse)로 만들었습니다. 그런 다음 로지스틱 회귀 분석을 실행했습니다. 그것은 작동하는 것 같습니다.

내 용어는 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에 표시된 순서대로 X에있는 n_features의 계수에 정확히 일치합니다.

+0

디버그 해 주셔서 감사합니다. 좋아, 그래서 그들이 들어가는 것과 똑같이 나옵니다. 그러나 범주 형 데이터를 전달할 때 이후 범주 중 하나가 더미 변수가되어 사라지지 않아야합니까? – tosh1611

+0

'item_number'가 1에서 5까지의 값을 취하고'C (item_number)'다음에 4 개의 더미 (0, 1을 가짐)를 얻는다 고 가정하십시오. 계수와 인형 이름의 조화에 대해 정말로 신경 쓰는 경우에는 먼저 데이터 세트에 레이블을 지정해야하며 행렬이 아닌 데이터 프레임을 반환하고 대신 return_type = 'dataframe''을 설정하십시오. 변수 이름을 찾으려면 x.head(), x.columns 등을 사용하십시오. – Nicholas