이번 포스팅에서는 로지스틱 회귀에 대한 실습 과정을 알아보도록 하겠습니다.
본 포스팅은 혼자 공부 하는 머신러닝(박해선 저)와 충남대학교 AI 중급교육과정을 참고하였습니다.
로지스틱 회귀와 관련된 이론은 아래 포스팅을 참고해주시기 바랍니다.
https://math-love.tistory.com/25
<머신러닝 이론 02> 로지스틱 회귀
이번 포스팅에서는 로지스틱 회귀에 대한 기본적인 과정을 알아보도록 하겠습니다. 로지스틱 회귀 예를 들어 Target_set에 정확히 이진으로 분류된 집합이 존재한다고 가정하겠습니다. (남자, 여
math-love.tistory.com
로지스틱 회귀
마찬가지로 데이터를 불러올게요.
import pandas as pd
fish = pd.read_csv('/content/drive/MyDrive/Colab Notebooks/fish_logistic.csv')
fish.head()
Input_data와 Target_data를 지정하겠습니다.
Weight, Length, Diagonal, Height, Width 를 Input_data로 지정하고
Species를 Target_data로 지정하겠습니다.
그리고 지정한 Data들을 numpy_array로 바꿀게요.
fish_input = fish[['Weight','Length','Diagonal','Height','Width']].to_numpy()
fish_target = fish['Species'].to_numpy()
Train_set과 Target_set을 분리해주겠습니다.
from sklearn.model_selection import train_test_split
train_input, test_input, train_target, test_target = train_test_split(fish_input, fish_target, test_size = 0.2, random_state = 42)
Standard_Scale까지 해보겠습니다.
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
ss.fit(train_input)
train_scaled = ss.transform(train_input)
test_scaled = ss.transform(test_input)
이제 로지스틱 회귀를 해봅시다.
먼저 이진 분류로 결과를 보겠습니다.
물고기 종류로 Bream과 Smelt만 Target_set으로 지정해서 로지스틱 회귀를 진행해보겠습니다.
beam_smelt_indexes = (train_target == 'Bream') | (train_target == 'Smelt')
우선 이렇게 코드를 작성하면 Bream과 Smelt는 True로 출력되고 나머지 종들에 대해서는 False가 출력될겁니다.
지금은 Bream과 Smelt만으로 이진 분류를 해볼 것이기 때문에 나머지 종들은 False로 두어도 관계없습니다.
위에서 만든 index_set을 scale을 진행한 set에 넣어 Bream과 Smelt만 남겨보겠습니다.
train_bream_smelt = train_scaled[beam_smelt_indexes]
target_beam_smelt = target_scaled[beam_smelt_indexes]
로지스틱 회귀로 훈련을 시켜보겠습니다.
sklearn.linear_model 모듈에 LogisticRegression이라는 class가 있습니다.
LogisticRegression 객체를 만들고 fit까지 시켜보겠습니다.
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
lr.fit(train_bream_smelt, target_bream_smelt)
학습을 완료했습니다.
predict 함수를 통해 Train_set에서 LogisticRegression은 어떻게 예측했는지 확인해보겠습니다.
Train_set 자체의 크기가 너무 크니까 5번째 index까지만 확인해볼게요.
print(lr.predict(train_bream_smelt[:5]))
예측한 값에 대해 확률도 측정할 수 있습니다.
지금 0번째 index를 Bream이라고 예측했는데
0번째 index가 Bream이 될 확률을 측정해주는 메서드입니다.
predict_porba()를 활용해줍니다.
print(lr.predict_proba(train_bream_smelt[:5]))
위 결과값을 봤을 때 좌측이 Bream일 확률
우측이 Smelt일 확률입니다.
0.5를 기준으로 0.5보다 값이 큰 쪽을 더 분류 클래스에 맞다고 판단하는 겁니다.
로지스틱 회귀에서도 Log loss라는 손실함수가 있었죠.
지금은 독립변수 자체가 5개 입니다.
그러니까 logit변환을 일차결합으로 표현하게되면 아래와 같습니다.
각각은 core_, intercept_ 메서드를 통해 값을 알 수 있습니다.
print(lr.coef_, lr.intercept_)
Data_set이 들어왔을 때 logit 값을 계산해줄 수도 있습니다.
decision_funtion() 이라는 메서드를 활용합니다.
decisions = lr.decision_function(train_bream_smelt[:5])
print(decision)
'데이터 사이언스 > 하계 AI 중급과정' 카테고리의 다른 글
Ch 6. Gradient descent (경사하강법) (0) | 2023.07.14 |
---|---|
Ch 5. Multiple Regression (다중 회귀) (0) | 2023.07.12 |
Ch 4. Polynomial Regression (다항회귀) (0) | 2023.07.12 |
Ch 3. Linear Regression(선형회귀) (0) | 2023.07.12 |
Ch 2. 훈련 및 테스트 세트 (Train set, Test set) (0) | 2023.07.11 |