연속형, 범주형 데이터
일반적인 데이터의 형태는 연속형 데이터, 비연속형(범주형)이 있습니다.
연속형 데이터
ex) 키, 몸무게, ...
범주형 데이터
ex) 성별(남자, 여자)
이 두 데이터에 회귀선을 그어보겠습니다.
연속형 데이터는 올바르게 회귀선이 그어졌지만, 범주형 데이터는 회귀선이 올바르지 않습니다.
연속형 데이터는 선형 함수의 회귀 최적선을 찾는 것이지만, 범주형 데이터는 로지스틱 회귀를 사용하여, 시그모이드 함수의 최적선을 찾고 이 시그모이드 함수의 반환 값을 확률로 간주해 확률에 따라 분류를 간주합니다.
로지스틱 회귀
위는 시그모이드 함수의 식과 그래프입니다. 시그모이드 함수는 아무리 작거나 커지더라도 0과 1에 수렴하고,
x가 0일 때는 0.5입니다. 범주형 데이터는 항상 0과 1에 수렴하므로 이 함수를 사용합니다.
예를 들어 암을 진단하는 문제를 회귀 문제에 이용해보겠습니다. 범주형 데이터이고 암이냐(Yes=1) 아니냐(No=1) 이 두 개의 분류로 나뉩니다. 암의 종양의 크기가 x, 종양의 여부를 y로 표시할 때
회귀 라인은 0과 1을 제대로 예측하지 못하고 있습니다, 반면에 로지스틱 회귀는 0과 1을 잘 예측하는 곡선입니다. 로지스틱 회귀는 이처럼 선형 회귀 방식을 기반으로 하되 시그모이드 함수를 이용해 분류를 수행하는 회귀입니다.
Threshold
-확률 값을 범주형으로 변환할 때의 기준
Threshold가 0.5일 때, 확률이 0.5 보다 크면 1, 확률이 0.5 보다 작으면 0
위와 같을 때 정확도는 2/3입니다.
함수를 구하는 식은 시그모이드 함수의 x에 회귀식을 대입하여 확률을 구합니다.
y = w0 + w1*x의 회귀 식이 있다고 가정했을 시
위와 같은 회귀식이 나오고,
위와 같은 로지스틱 회귀식이 나옵니다.
코드
위스콘신 유방암 데이터 세트를 이용해 로지스틱 회귀로 암 여부를 판단해 보겠습니다.
import pandas as pd
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, roc_auc_score
cancer = load_breast_cancer()
scaler = StandardScaler()
data_scaled = scaler.fit_transform(cancer.data)
X_train, X_test, y_train, y_test = train_test_split(data_scaled, cancer.target, test_size=0.3)
log = LogisticRegression()
log.fit(X_train, y_train)
pred = log.predict(X_test)
print('accuracy: {:.3f}'.format(accuracy_score(y_test, pred)))
print('roc_auc: {:.3f}'.format(roc_auc_score(y_test, pred)))
'머신러닝' 카테고리의 다른 글
[머신러닝] 의사결정트리(Decision Tree) 알고리즘 (2) | 2022.05.05 |
---|---|
[머신러닝] 성능 평가 지표 (0) | 2022.05.04 |
[머신러닝] 회귀(Regression) (0) | 2022.05.03 |
[머신러닝] 지도학습 (학습/테스트/검증 데이터 분리) (0) | 2022.05.03 |
[머신러닝] 머신러닝이란? (0) | 2022.05.03 |
댓글