세조목

머신러닝 기초 복습(로지스틱 회귀)(24.05.03) 본문

데이터 분석 공부/머신러닝

머신러닝 기초 복습(로지스틱 회귀)(24.05.03)

세조목 2024. 5. 3. 20:13

머신러닝

예측
숫자{(평균으로)회귀} 범주/카테고리(분류)
선형 회귀 로지스틱 회귀
선형 회귀를 차용해서 만든거라서 '회귀'가 붙음

 

다중공선성 제거 방법

1. pair plot, 상관관계로 상관관계 확인 후 하나의 독립변수 제거

2. PCA(차원축소)

 

로지스틱 회귀

로지스틱 회귀 : 확률 예측 時 사용됨

그림에서 확인할 수 있는대로 확률을 예측할 때는 선형회귀를 적용하는 것이 적절하지 않음

그래서 0과 1에 수렴하는 Logistic Regression이 나왔음

 

오즈비 = p / 1-p

 ※ 오즈비의 경우 확률이 증가할수록 급격히 발산하기 때문에 사용이 적절하지 않음

오즈비 + 로그 → 로짓(Logit) = log(p / 1-p)

 ※ 로그를 씌워주면 회귀모델로 사용하기에 적절하게 됨

로짓의 x, y 축을 바꿨을 때의 그래프

로지스틱 회귀의 임계값0.5(0.5 넘으면 '그럴 것이다'라고 봄)

 

 

선형회귀에서는 y에 y가 들어갔지만

로지스틱회귀에서는 y에 로짓이 들어감

  why? 어떠한 일이 일어날 '확률'을 구하는 것이기 때문에

 

 ※ 참고

   → 이진 분류 & 다중 분류(n개의 확률)

 

분류 평가 지표

정확도

예측이 맞는지 여부 : T/F

양성 여부 : Positive / Negative

 

모든 환자를 음성(암 환자 x)으로 판정하는 모델을 만들었는데

실제로는 양성인 경우가 5건 있을 수 있음

이 경우 정확도는 95%이지만 5%에 해당하는 환자들한테는 이 모델의 결과가 치명적일 수 있음

그렇기 때문에

'정확도'로는 모델이 제대로 작동하고 있는지 확인할 수 없음

 

 

F1-Score

 

1에 가까울수록 좋음

 

정확도와 f1 score를 함께 보자(정확도는 높은데 f1 score는 낮을 수 있으니까)

 

빨간색 부분에 데이터들이 분포하기를 기대했으나 전처리를 진행하지 않았기 때문에

위와 같이 확인 됨

 

기타

Pivot table aggfunc = size

pd.pivot_table(titanic_df, index='Sex', columns = 'Survived', aggfunc='size')

aggfunc에 'size'를 넣으면 성별 생존여부 수를 counting할 수 있음

 

 

sns.countplot

sns.countplot(data=titanic_df, x='Sex', hue='Survived')

barplot이 아닌 countplot을 사용하면 성별로 Survived여부를 counting할 수 있음

barplot으로 하면 아래와 같이 시각화 됨