데이터분석/데이터분석

로지스틱 회귀분석 (Logistic Regression)

이규승 2022. 5. 9. 23:16
728x90

로지스틱 회귀분석(logistic linear regression)
분류 모델 : 이항분류가 기본
독립변수 : 연속형, 종속변수 : 범주형
출력된 연속형 자료를 logit 변환해 sigmoide function 함수로

0~ 1사이의 실수 값이 나오도록 한 후 0.5를 기준으로 분류

 

(1) 모델 작성 방법 : logit()

import statsmodels.formula.api as smf
formula = 'am ~ mpg + hp' 
result = smf.logit(formula = formula, data=mtcar ).fit() #학습
pred = result.predict(mtcar[:10]) #예측

(2) 모델 작성 방법 : glm()

# 모델 작성 방법 2 : glm() : generalized linear model (일반화된 선형모델)
result2 = smf.glm(formula = formula, data=mtcar, family = sm.families.Binomial()).fit() # 학습
pred2 = result2.predict(mtcar[:10]) # 예측

(3) 모델 작성 방법 : LogisticRegression

from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(x_train, y_train) # 학습
model.predict(x_test[:5]) # 예측

# 분류 정확도 score
from sklearn.metrics import accuracy_score
pred = model.predict(x_test)
print('분류정확도:', accuracy_score(y_test,pred))

(4) 정확도 계산방법

# 혼동 행렬-> pred_table은 glm에서 불가능하다.
conf_tab = result.pred_table()
print('정확도2:',((conf_tab[0][0]+conf_tab[1][1])/len(mtcar)))

# sklearn 정확도
from sklearn.metrics import accuracy_score
pred2 = result.predict(mtcar)
print('정확도3:', accuracy_score(mtcar['am'], np.around(pred2)))

(5) train / test 모델 분리

train, test = train_test_split(data2, test_size = 0.3, random_state = 42)

(6) 스케일링

# 학습 데이터 크기의 차이가 심하면 스케일링(크기 표준화 또는 정규화)
# 독립변수를 스케일링 하면 모델이 안정성, 수렴 속도 향상, 오버플로우/언더플로우 등의 방지에 효과적
sc = StandardScaler() #표준화
sc.fit(x_train) # 종속변수는 안한다 독립변수만 한다.
sc.fit(x_test)
x_train = sc.transform(x_train)
x_test = sc.transform(x_test)

# 스케일링 원복
inver_x_train = sc.inverse_transform(x_train)

(7) 모델 저장, 읽기

import pickle
#저장
pickle.dump(model, open('clamodel.asv','wb'))

#읽기
read_model = pickle.load(open('clamodel.asv','rb'))
728x90