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
'데이터분석 > 데이터분석' 카테고리의 다른 글
분류모델 : 의사결정나무(DecisionTree) (0) | 2022.05.11 |
---|---|
혼동행렬, ROC, AUC (0) | 2022.05.11 |
선형 회귀의 평가 지표 (0) | 2022.05.04 |
선형 회귀 분석의 가정 충족 조건 (0) | 2022.05.03 |
회귀 분석 (Regression Analysis) (0) | 2022.05.02 |