score(x, y) : 회귀 모델은 score()의 결과가 r2 Score가 나오지만 로지스틱은 정확도를 출력
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
# 1. 가상 데이터 생성 (X: 특징 데이터, y: 0 또는 1의 이진 레이블)
np.random.seed(42)
X = np.random.normal(0, 1.5, (100, 1))
y = (X[:, 0] > 0).astype(int)
# 2. 로지스틱 회귀 모델 학습
model = LogisticRegression()
model.fit(X, y)
# 3. 곡선을 그리기 위한 촘촘한 x축 데이터 및 예측 확률 계산
X_test = np.linspace(-4, 4, 300).reshape(-1, 1) #-4부터 4까지의 구간을 똑같은 간격으로 300등분
y_prob = model.predict_proba(X_test)[:, 1] # 클래스 1에 속할 확률 추출
# 4. 그래프 그리기
plt.figure(figsize=(8, 5))
plt.scatter(X, y, color='gray', alpha=0.6, label='Data') # 실제 데이터 점
plt.plot(X_test, y_prob, color='blue', linewidth=2, label='Logistic Curve') # S자 결정 곡선
plt.axhline(0.5, color='red', linestyle='--', alpha=0.5, label='Threshold (0.5)') # 분류 기준선(임계값)
plt.title('Logistic Regression')
plt.xlabel('X')
plt.ylabel('Probability')
plt.legend()
plt.grid(True)
plt.show()
혼동 행렬
이진 분류의 예측 오류가 얼마인지, 어떠한 유형의 오류가 발생하는지를 나타내는 지표
TN(True Negative) : 예측 값 Negative(0), 실제 값 Negative(0)
FP(False Positive) : 예측 값 Positive(1), 실제 값 Negative(0)
FN(False Negative) ; 예측 값 Negative(0), 실제 값 Positive(1)
TP(True Positive) : 예측 값 Positive(1) , 실제 값 Positive(1)
정확도
실제 데이터와 예측 데이터가 얼마나 같은가?
(TN + TP) / (TN + TP + FN + FP)
정밀도
양성 예측도
TP / (TP + FP)
ex) 스팸 메일인지 아닌지 판별
재현율
TP / (TP +FN)
ex) 암 진단 판단, 신용카드 사기 탐지
F1_Score
정밀도와 재현율을 결합한 분류 성능 지표
어느 한 쪽에 치우치지 않고 적절하게 조화를 이루었을 때 높은 수치를 나타냄
(2 * TP) / (2 * TP + FP + FN)
정밀도,재현율, F1_Score는 다중 뷴류 모델에서 일반적인 계산 X(error 발생)
average
'macro'
다중 분류에서 각각의 점수들이 생성이 되면 점수들의 평균을 출력
ex) A : 90점, B : 30점, C : 50점, D : 10점
점수들의 평균 : 45점
'weighted'
각 클래스 별 가중치(비율)를 생성하여 계산
ex) A : 90점 (100/150), B : 30점 (30/150), C : 50점 (20/150)