[플레이데이터]
[PlayData - Day 53] 트리 알고리즘
EYZ27
2023. 3. 9. 17:37
1. K-Digital Training 과정
- 빅데이터 기반 지능형SW 및 MLOps 개발자 양성과정 19기 (Day 53)
2. 목차
- 결정 트리
- 교차 검증과 그리드 서치
- 트리의 앙상블
3. 수업 내용
5-1.ipynb
0.63MB
5-2.ipynb
0.23MB
5-3.ipynb
0.01MB
세 가지 특성을 가진 와인 데이터셋을 가지고 이진 분류를 하고자 함
앞선 챕터에서 배운 로지스틱 회귀로 분류 실시
로지스틱 회귀로 와인 분류하기
데이터를 불러온 후 데이터 형태 확인하기 : pandas의 메서드 이용
1. head() 함수: 처음 5개의 샘플 확인
import pandas as pd
wine = pd.read_csv('https://bit.ly/wine_csv_data')
wine.head() # 레드와인 0, 화이트와인 1
2. info() 함수: 데이터프레임 각 열의 데이터 타입과 누락된 데이터 정보 확인
wine.info()
각 열(Column)의 데이터타입(Dtype)은 모두 float 타입이고, null 데이터가 없는 것을 확인할 수 있다.
3. describe() 함수
wine.describe()
각 컬럼별 평균, 표준편차, 최소, 최대, 사분위수를 확인할 수 있다.
- pandas 데이터프레임을 numpy 배열로 변환하고 훈련 세트와 테스트 세트로 나누기
data = wine[['alcohol', 'sugar', 'pH']].to_numpy()
target = wine['class'].to_numpy()
from sklearn.model_selection import train_test_split
train_input, test_input, train_target, test_target = train_test_split(
data, target, test_size=0.2, random_state=42)
# test_size=0.2, 즉 테스트 세트의 비율 20%
print(train_input.shape, test_input.shape)
>>> (5197, 3) (1300, 3)
# 세트가 잘 나누어진 것을 확인할 수 있다.
- 표준화 작업(스케일링, Scaling)
# 표준화 작업
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
ss.fit(train_input)
train_scaled = ss.transform(train_input)
test_scaled = ss.transform(test_input)
# 표준 점수로 세가지 특성 데이터의 스케일을 다 맞추어 주었다.
# 표준화 작업을 마친 데이터로 로지스틱 회귀 훈련, 평가
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
lr.fit(train_scaled, train_target)
print('훈련', lr.score(train_scaled, train_target))
print('테스트', lr.score(test_scaled, test_target))
>>>
훈련 0.7808350971714451
테스트 0.7776923076923077
# 테스트 세트보다 훈련 세트의 정확도가 조금 더 높으나, 전반적으로 낮다. 과소적합.
설명하기 쉬운 모델과 어려운 모델
print(lr.coef_, lr.intercept_)
>>> [[ 0.51270274 1.6733911 -0.68767781]] [1.81777902]
위의 결과로 로지스틱 회귀모델을 설명하려면?
['alcohol', 'sugar', 'pH' ]
[ 0.51270274, 1.6733911, -0.68767781]
- 알콜도수와 당도가 높을수록 화이트와인일 가능성이 높고, pH가 높을수록 레드와인일 가능성이 높다
이 숫자의 의미를 쉽게 설명할 수 있도록 하려면 결정 트리를 이용하자.
결정 트리
...업데이트중