본문 바로가기
Python/MachineLearning

Logistic Regression - 개념

by 하니__ 2024. 4. 15.

 

 

Linear Regression 에서는

각종 데이터들 사이에서

어떤 값이 나올지 예측 하는거였다면

 

 

Logistic Regression은 조금 다르다

로지스틱리그레션은은 답이 0과 1 뿐이며

 

0일지 1일지 확률을 따지는것 뿐이다

 

 

 

 

평균값에 가까워지기 위해 변형된것인데

기존의 리니어 리그레션 에서 조금 달라지는 모습이 필요하다

 

 

 

 

비슷한 함수의 이름은 sigmoid function

이 시그모이드를 대입하여 일차방정식으로 만드는 것이다

 

그리하여

 

 

 

 

0 과 1뿐인 선택지의 확률을 알 수 있게 된다( p 는 확률)

 

 

 

 

 

물론 0.5를 기준으로 나뉘어 지게 되지만 0.1, 0.8 같은 값은 충분히 납득이 갈 수치다

 

 

 

from sklearn.linear_model import LogisticRegression
classifier = LogisticRegression()

 

 

LogisticRegression은 classifier 라고 이름 지어주자

 

 

 

 
classifier.fit(X_train,y_train)
classifier.predict(X_test)
array([0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1,
       1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
       1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1,
       0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
       0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0], dtype=int64)

 

 

기존의 리니어 레그리션과 같이 예측을 하면 되며

추가로

 

classifier.predict_proba(X_test)
 
 

 

 

각각의 확률을 알 수 있다

 [  a , b  ] 라고 했을때 a가 0인 확률, b가 1인 확률

 

 

 

이렇게 했을때 우리는 아직 눈으로 봐서

 

이게 얼마나 맞았는지 틀렸는지

0을 1로 틀렸는지

1을 0으로 틀렸는지

0이 맞았는지

1이 맞았는지

 

자세히 알지 못한다

 

 

 

 

이렇게 봐야 알기 편하다

 

 

이것을 Confusion Matrix 라고 하며 분류 결과표 라고 한다

 

 

from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score

 

알아보기 전에 임포트를 먼저 해준다

 

 

 

 
cm = confusion_matrix(y_test, y_pred)
cm
array([[52,  6],
       [14, 28]], dtype=int64)

 

이렇게 알려주며

 

 

정확도는

accuracy_score(y_test, y_pred)
0.8

 

이렇게 알아 볼 수 있다

 

 

 

 

 
from sklearn.metrics import classification_report
classification_report(y_test, y_pred)
 
'              precision    recall  f1-score   support\n\n           0       0.79      0.90      0.84        58\n           1       0.82      0.67      0.74        42\n\n    accuracy                           0.80       100\n   macro avg       0.81      0.78      0.79       100\nweighted avg       0.80      0.80      0.80       100\n'

 

 

그리고 classification_report는 평가지표를 출력해주며

 

Precision은 정밀도를 뜻하며 예측한 클래스중 실제로 해당 클래스인 데이터의 비율

Recall은 재현율을 뜻하며 실제 클래스중 예측한 클래스와 일치한 데이터의 비율

F1-score는 정밀도와 재현율의 조화 평균

Support는 각 클래스의 실제 데이터 수를 뜻 한다

 

 

그리고 시각화는 히트맵을 사용하여 볼 수 있다

 

 
import seaborn as sb
sb.heatmap(data = cm , cmap = 'OrRd', annot=True)
plt.show()