오랑우탄의 반란
[ML] (다중)로지스틱회귀 분류 분석 파이썬 실습 (VSCode) 본문
머신러닝 로지스틱회귀분석 실습
앞서 배원 로지스틱 회귀를 사용한 분석 분류를 직접 파이썬에서 데이터셋으로 실습해보겠습니다.
캐글 타이타닉 예측 대회의 Titanic - Machine Learning from Disaster 데이터를 사용하겠습니다.
대회 주제는 탑승한 승객의 정보를 바탕으로 생존 유무를 예측하는 분류 문제였는데요
종속변수 Y를 사망(0) / 생존(1)으로 두고 독립변수 X를 티켓등급, 성별, 요금 등으로 넣어보며 확인해보는 분류 분석을 아래의 단계에 따라 진행하겠습니다. (데이터 전처리 단계는 생략하고 바로 회귀분석만 진행한다는 점 참고)
- 데이터 확인
- 변수 설정 및 로지스틱회귀 모델 훈련
1차 모델: Fare
2차 모델: Pclass, Sex, Fare - 모델 평가
accuracy
f1_score
과정 자체는 선형회귀와 거의 동일해서 간단합니다.
1. 데이터 확인
우선 칼럼 설명과 1차 모델에서 사용할 데이터를 체크해둡니다.
Column | Details | Datatype |
PassengerId | 승객 ID (PK) | |
Survived | 사망 (0) 생존 (1) | 종속변수 Y |
Pclass | 티켓 등급 (1,2,3) | 범주형 |
Name | 이름 | |
Sex | 성별 | 범주형 |
Age | 나이 | 숫자형 |
SibSp | 형제와 배우자 수 | 숫자형 |
Parch | 부모와 자식 수 | 숫자형 |
Ticket | 티켓 번호 | |
Fare | 요금 | 숫자형, 1차 독립변수 X |
Cabin | 객실 이름 | 범주형 |
Embarked | 승선 항구 (C,Q,S) | 범주형 |
그리고 필요한 라이브러리와 데이터 파일을 불러와서 데이터를 간단하게 확인해줍니다.
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import sklearn
titanic_df = pd.read_csv(r'C:\Users\김예진\data_python\ml\titanic\train.csv')
titanic_df.head(3)
titanic_df.info()
titanic_df.describe()
1차 모델에서 사용할 Survived, Fare 칼럼에 결측치가 없는 것을 확인했지만, Fare 의 분포를 보면 $500 의 이상치 데이터가 존재하긴 하지만 이번 포스트는 분류분석에 초점을 맞춘 것이기 때문에 이상치 처리는 생략합니다.
2. 모델 훈련 - 1차
Survived (Y) 와 Fare (X) 변수 설정을 해주고 모델을 불러와줍니다.
X_1 = titanic_df[['Fare']]
y_true = titanic_df[['Survived']]
from sklearn.linear_model import LinearRegression, LogisticRegression
model_lor = LogisticRegression()
model_lor.fit(X_1,y_true)
해당 모델의 속성을 확인해줍니다.
def get_att(x):
#x모델 넣기
print('클래스 종류', x.classes_)
print('독립변수 갯수', x.n_features_in_)
print('들어간 독립변수(x)의 이름', x.feature_names_in_)
print('가중치', x.coef_)
print('bias', x.intercept_)
get_att(model_lor)
3. 모델 평가
이제 모델에 대한 예측값을 구하고 평가를 진행합니다.
from sklearn.metrics import accuracy_score, f1_score
def get_metrics(true, pred):
print('정확도', accuracy_score(true, pred))
print('f1-score', f1_score(true, pred))
y_pred_1 = model_lor.predict(X_1)
get_metrics(y_true, y_pred_1)
머신러닝 다중로지스틱회귀분석 실습
X 변수가 여러 개일 때 사용하는 다중로지스틱회귀분석을 살펴봅시다.
1. 데이터 확인
이번에는 Fare 외에도 Sex, Pclass 로 분석을 진행하겠습니다.
Column | Details | Datatype |
PassengerId | 승객 ID (PK) | |
Survived | 사망 (0) 생존 (1) | 종속변수 Y |
Pclass | 티켓 등급 (1,2,3) | 범주형, 2차 독립변수 X |
Name | 이름 | |
Sex | 성별 | 범주형, 2차 독립변수 X |
Age | 나이 | 숫자형 |
SibSp | 형제와 배우자 수 | 숫자형 |
Parch | 부모와 자식 수 | 숫자형 |
Ticket | 티켓 번호 | |
Fare | 요금 | 숫자형, 2차 독립변수 X |
Cabin | 객실 이름 | 범주형 |
Embarked | 승선 항구 (C,Q,S) | 범주형 |
Pclass 는 숫자 형태의 데이터지만 Sex 는 'Female', 'Male' 문자로 구성되어 있기 때문에 숫자로 변환하는 작업이 필요합니다. 기존 칼럼은 그대로 두고 Sex_en 칼럼을 생성해서 데이터를 변환해줍니다.
def get_sex(x):
if x == 'female':
return 0
else:
return 1
titanic_df['Sex_en'] = titanic_df['Sex'].apply(get_sex)
2. 모델 훈련 - 2차
모델을 훈련시켜주고 앞서 작성했던 함수로 속성을 확인합니다.
X_2 = titanic_df[['Pclass','Sex_en','Fare']]
y_true = titanic_df[['Survived']]
model_lor_2 = LogisticRegression()
model_lor_2.fit(X_2,y_true)
get_att(model_lor_2)
독립변수가 잘 들어간 것을 확인했습니다.
이제 예측값을 구합니다.
각 데이터별 Y=1인 확률 (생존할 확률)을 추출해서 (사망할 확률, 생존할 확률) 쌍으로 array 가 출력됩니다.
여기서 생존할 확률이 0.5 미만이면 0, 0.5 이상이면 1로 출력됩니다.
# (사망확률, 생존확률) array 쌍 출력
model_lor_2.predict_proba(X_2)
# 0.5 기준 생존확률 출력
y_pred_2 = model_lor_2.predict(X_2)
y_pred_2
3. 모델 평가
1차 모델과의 모델 평가를 비교해봅니다.
# X변수 Fare
get_metrics(y_true,y_pred_1)
# X변수 Fare, Pclass, Sex
get_metrics(y_true,y_pred_2)
결과적으로 X변수를 여러 개에 대해 다중로지스틱회귀분석을 진행한 모델이 더 평가가 좋은 걸 확인할 수 있습니다.
'PYTHON > 머신러닝' 카테고리의 다른 글
[ML] 의사결정나무, 랜덤포레스트, KNN, 부스팅 알고리즘 (회귀/분류 모델링 알고리즘) (2) | 2024.08.14 |
---|---|
[ML] 데이터분석 예측모델링 파이썬 실습 (타이타닉) (0) | 2024.08.13 |
[ML] 로지스틱회귀 기초 이론 및 수식 정리 (분류 분석) (0) | 2024.08.09 |
[ML] 머신러닝 다중선형회귀분석 파이썬 실습 (VSCode) (0) | 2024.08.09 |
[ML] 머신러닝 선형회귀분석 파이썬 실습 (VSCode) (0) | 2024.08.09 |