<로지스틱 회귀 Logistic Regression>
로지스틱 회귀가 무엇인가?
로지스틱회귀는 분석하고자 하는 대상(특징)이 2개 or 그 이상의 집단으로 나누어져 있을 때, 개별 관측치(개별 특징)들이 어느 집단에 분류될 수 있는지에 대해 분석하고 예측하는 모델을 개발하는 통계적 기법이다.
대표적으로 예를들면
회사 직원들의(연봉, 야근횟수, 복지, 업무 적합도)등의 연속형 자료를 통해서, (퇴사한다, 안한다)를 분류하는 Yes/No의 비율을 다루는 분석방법이다.
로지스틱 회귀의 종류
1) 이항 로지스틱 회귀(Binary Logistic Regression) - Sigmoid함수들을 이용한 2가지 결과만으로 분류
2) 다항 로지스틱 회귀(Multinomial Logistic Regression) - Softmax(소프트맥스)함수를 이용한 2개 이상의 분류
3) 순서형 로지스틱 회귀(Ordinal Logistic Regression) - 순서가 있는 3개 이상의 분류
예를들어 영화 순위나 평점1~5 등급등
선형회귀(Linear Regression)와 로지스틱 회귀(Logistic Regression)와의 차이
선형회귀의 치중된 데이터의 문제점을 로지스틱 회귀로 극복이 가능함
적은 데이터의 값이 다른 데이터들에 비해 한쪽으로 치중되어 있다면 최소제곱법을 통한 선형직선에 매우큰 영향을 받게 된다.
※ 즉, 평범하지 않은 위치의 적은양의 데이터들에 큰 영향을 받게된다.
로지스틱 회귀의 시그모이드 함수를 사용하는 이유는
Odds(p):=p1−p
x값이 0보다 크면 1에 수렴하고,
x값이 0보다 작으면 0에 수렴한다.
※ 데이터가 어디에 존재하든, 영 향을 받지않고 결과값은 항상 [0,1] 사이의 범위에 있다.
Cost Function
Cost Function은 원래의 값과 가장 오차가 적은 가설함수의 최소값을 도출해내기 위해 사용되는 함수.
로지스틱 회귀에 최소제곱법(선형회귀 손실 함수)를 사용하면 안되는 이유
$$ H(X) = \frac{1}{1+e^-Wx} $$
$$ H(X) = Wx+b $$.
※ Logistic Regression의 Cost 함수를 구할 때, Local Minimum에서 멈추면 예측 성능이 떨어질 수 있음
Cost Fuction For Logistic
$$ Cost(X) = \frac{1}{m}\sum{C(H(x),y)} $$
Y(실제 값)가 = 1(Yes)일때 or 0(No)일때 나뉨
$$ c(H(x),y) = -log(H(x)) : y = 1 $$
$$ c(H(x),y) = -log(1 - H(x)) : y = 0 $$
$$ 최종적으로 Cost(W) = \frac{1}{m}\sum{-ylog(H(x)) - (1-y)log(1-H(x))} $$
경사하강법
시그모이드 함수식 미분하는 방법 정리해놨습니다.
로지스틱 회귀 실습
데이터 확인 - 인터넷 소매상 거래 (0 = 정상거래, 1 = 비정상 거래)
데이터 전처리
# 데이터 전처리 단계 - 열에 있는 데이터 숫자값으로 변경 있는 데이터 숫자값으로 변경
df_pay['paymentMethod'].unique()
df_pay["paymentMethod"] = df_pay['paymentMethod'].map({
'paypal' : 0, 'storecredit' : 1, 'creditcard' : 2
})
로지스틱 회귀 데이터 학습
features = df_pay[['accountAgeDays', 'numItems', 'localTime','paymentMethod','paymentMethodAgeDays']]
label = df_pay['label']
# train, test 데이터 분류
train_features, test_features, train_labels, test_labels = train_test_split(features, label, test_size = 0.2)
clf = LogisticRegression()
clf.fit(train_features, train_labels)
y_predict = clf.predict(test_features)
예측 데이터 검증
print(confusion_matrix(test_labels, y_predict))
conf_mat = confusion_matrix(test_labels,y_predict)
plt.figure(figsize=(6,6))
sns.heatmap(conf_mat, annot = True, fmt=".3f", linewidths=.5,square=True)
plt.ylabel("quality")
plt.xlabel("predict")
plt.show()
'머신러닝 > 머신러닝 알고리즘' 카테고리의 다른 글
선형회귀 Linear Regression 개념 및 예제 학습 - [머신러닝] (0) | 2021.04.30 |
---|---|
SVM(Support Vector Machine) 서포트 벡터 머신 정리 - [머신러닝] (0) | 2021.04.27 |
교차검증 통한 머신러닝 모델 성능 평가(K-Fold, Leave-one-out, Shuffle-Split) - [머신러닝] (0) | 2021.04.26 |