Meiren

[ML] LogisticRegression(로지스틱 회귀) 본문

머신러닝(machine learning)

[ML] LogisticRegression(로지스틱 회귀)

meiren 2022. 11. 29. 17:59

로지스틱 회귀란?

회귀를 사용하여 데이털가 어떤 범주에 속할 확률을 0에서 1사이의 값으로 예측하고,

그 확률에 따라 가능성이 높은 범주에 속하는 것으로 분류

 

회귀로 연속적인 결과를 시그모이드 함수로 표준화시켜서 특정값을 기준으로 나누어 분류한다

다중회귀분석 + 시그모이드 함수 = 최종 값

- 시그모이드 함수 : 음의 무한대 ~ 양의 무한대까지의 실수값 -> 0~ 1의 실수값으로 1:1 대응

 

  • 로지스틱 회귀로 이진 분류 - 데이터를 이진 분류 문제로 바꾸어서 분류 실습
  • 로지스틱 회귀로 다중 분류 - 원래 데이터 그대로 분류 실습

 

 

 

linear regression(선형) vs logistic regression

linear regression

- 주어진 데이터에 대해 0 ~ 100사이의 값(y)를 예측

- gradient decent > cost를 최소화하는 w를 찾기 위한 알고리즘

 

logistic regression

- 0 ~ 1사이의 값 도출

- Binary Classification (이진분류)

- 두 개의 선택지 중 정답을 고르는 문제

 

Cost function

- linear : gradent descent 알고리즘 > 어디서 시작하든 최소점 1개

- logistic : gradient descent 알고리즘 > 시작하는 곳에 따라 최소점 다름, 선형회쉬 cost 함수 사용 불가

 

 

 

 

Logistic Regression Modeling

학습 : cost값이 가장 작은 수를 갖게 하는 W 찾는 것

  • 로지스틱 회귀 분석은 이진 분류를 수행하는 데 사용된다.
    즉, 데이터 샘플을 양성(1) 또는 음성(0) 클래스 둘 중 어디에 속하는지 예측한다.
  • 각 속성(feature)들의 계수 log-odds를 구한 후,
    Sigmoid 함수를 적용하여 실제로 데이터가 해당 클래스에 속할 확률을 0과 1사이의 값으로 나타낸다.
  • 손실함수(Loss Function)는 머신러닝 모델이 얼마나 잘 예측하는지 확인하는 방법이다.
    로지스틱 회귀의 손실함수는 Log Loss이다.
  • 데이터가 클래스에 속할지 말지 결정할 확률 컷오프를 Threshold(임계값)이라 한다.
    기본 값은 0.5이지만 데이터의 특성이나 상황에 따라 조정할 수 있다.
  • 파이썬 라이브러리 Scikit-learn을 통해 모델을 생성하고 각 속성(feature)들의 계수를 구할 수 있다.
    이 때 각 계수(coefficients)들은 데이터를 분류함에 있어 해당 속성이 얼마나 중요한지 해석하는 데에 사용할 수 있다.

 

parameter?

  • solver
    • olver 옵셔널 파라미터는 해당 모델을 어떤 방법을 사용해서 풀지에 대해서 정할 수 있게 해줍니다. 
    • 로지스틱 회귀 모델을 학습시키는데 saga라는 방법을 사용해서 학습해줘
  • random state
    • 실행할 떄 마다 값이 달라지니, 임의 랜덤값으로 고정함

 

 

 

Model Evaluation

2022.11.29 - [머신러닝(machine learning)] - [ML/Evaluation] Confusion Matrix (모델 성능 평가 지표, 오차행렬)

 

[ML/Evaluation] Confusion Matrix (모델 성능 평가 지표, 오차행렬)

pre linear model > R-squre, MSE 분류모델의 성능 평가? 정확도(Accuracy) 정밀도(Precision) 재현율(Recall) F1 Score Confusion Matrix (오차행렬) traing을 통한 prdiction 성능 측정을 위해, 예측값과 실제값을 비교하는

le-meiren.tistory.com

- predicted = tf.cast(나온 값 > 기준값, dtype=tf.float32) : 기준값 이상이면 1, 이하면 0으로 변환

- accuracy = tf.reduce_mean(tf.cast(tf.equal(예측 리스트, 정답 리스트), dtype=tf.float32))

: 정답 리스트와 예측한 리스트 비교해 정확도 반환해줌.

 

accuracy

acc = accuracy_score(y, y_pred) 
print('accuracy =', acc) 

# accuracy = 0.9733333333333334

confusion matrix

confusion_mtrx = confusion_matrix(y_true=y, y_pred=y_pred) 
confusion_mtrx