본문 바로가기
CODING/AI & ML & DL

[기계학습] 로지스틱 회귀 | Logistic Regression

by 밍톨맹톨 2020. 9. 30.
728x90
728x90

[ 지난 글 ] 에서 다중선형회귀가 무엇인가에 대해 다뤄봤다.

 

다중선형회귀에서는 연속성 숫자를 가진 종속변수 Y는 구할 수 있지만 

0 or 1 (범주형 숫자)에 적용이 되지 않는 것을 볼 수있다. 

 

아래의 그림은 나이에 따른 암 발병 여부인데 빨간 선이 의미가 없다는 것을 알 수 있다.

 

이런 문제는 로지스틱 회귀 모델을 적용할 수 있다.

 

🔎 로지스틱 함수 [ Logistic Function ]  

  •     s - 커브 함수를 나타냄
  •    x값은 어떤 값을 받아도 상관없지만 y값은 항상 0 ~ 1로 정해져 있음 
  •    시그모이드 함수라고 하기도 함

이항 로지스틱 회귀 결정경계란 

2개의 클래스가 있을 때 클래스를 분류하는 기준

위와 같이 Y가 1이 될 확률이 0이될 확률보다 높으면 1로 분류하고

그 반대가 되면 0으로 분류하는데

그 확률이 같게 되면 그걸 하이퍼 플레인 [ hyperplane ] = 로지스틱 결정경계 라고 한다.

 

✔️ [ 실습 ] IRIS 데이터 

import seaborn as sns # seaborn을 불러오고 SNS로 축약
iris = sns.load_dataset('iris')  # iris라는 변수명으로 Iris data를 download

X = iris.drop('species', axis=1) # 'species'열을 drop하고 input X를 정의
y = iris['species']

1️⃣ Iris 데이터를 다운로드 받고 x, y에 데이터를 넣어줌

 

# y data를 범주형으로 변환
from sklearn.preprocessing import LabelEncoder    # LabelEncoder() method를 불러옴
classle = LabelEncoder()
y = classle.fit_transform(iris['species'].values) # species 열의 문자열을 categorical 값으로 전환

2️⃣ LabelEncoder로  y데이터를 범주형으로 바꿈

 

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
sc.fit(X_train)
X_train_std = sc.transform(X_train)

 

3️⃣ StandardScaler로 x_train 데이터를 스케일링

✔️StandardScaler
     - 평균을 제거하고 데이터를 단위 분산으로 조정
🔺 이상치가 있다면 평균과 표준편차에 영향을 미쳐 균형잡힌 척도를 보장할 수 없음

 

from sklearn.linear_model import LogisticRegression
Logit = LogisticRegression(C=200, random_state=11)  # C = 1/λ. 디폴트: L2, Auto.  
l_1=Logit.fit(X_train_std, y_train)
y_train_pred = Logit.predict(X_train_std)

C 값이 크면 regularization 이 적게 적용되고 ➡️ Overfitting ( train결과에만 너무 치중 ) 발생 가능

C 값이 작으면 regularization이 크게 적용되어 ➡️ Underfitting 발생 가능

 

from sklearn.metrics import accuracy_score
print(accuracy_score(y_train,y_train_pred)) 

from sklearn.metrics import confusion_matrix
print(confusion_matrix(y_train, y_train_pred))

정확도와 matrix가 이렇게 나오는 것을 알 수 있음

728x90

댓글