1. 기본 회귀모델 평가 - score() : R², predict()¶
다른 모델과 비교하기 위한 간단한 기본 회귀 모델¶
사이킷런 DummyRegressor : 기본 모델로 사용할 더미 모델 생성¶
DummyRegrssor 클래스는 실제 모델과 비교하기 위해 사용할 수 있는 매우 간단한 모델을 만든다.
기존 제품이나 시스템의 단순한 예측 방식을 흉내 내는 데 종종 사용하게 된다.
예를 들면 모든 새로운 사용자는 특성에 상관없이 첫 달에 100만원을 사용할 것이라고 가정하도록 애초부터 시스템에 하드코딩되어 있을지 모른다. 이런 가정을 기본 모델로 삼으면 머신러닝 방식을 사용했을 때 장점을 명확히 확인할 수 있다.
# 라이브러리 임포트
from sklearn.datasets import load_boston
from sklearn.dummy import DummyRegressor # 기본 모델로 사용할 더미 모델 생성 라이브러리
from sklearn.model_selection import train_test_split
# 보스턴 데이터 로드
boston = load_boston()
# 특성 생성
features, target = boston.data, boston.target
# 훈련세트와 테스트 세트 분할
feature_train, feature_test, target_train, target_test = train_test_split(features, target, random_state=0)
# 더미 회귀 모델 생성 (평균)
dummy = DummyRegressor(strategy='mean')
# 더미 회귀 모델 훈련
dummy.fit(feature_train, target_train)
DummyRegressor()
# R² 점수 계산
dummy.score(feature_test, target_test)
-0.001119359203955339
# 라이브러리 임포트
from sklearn.linear_model import LinearRegression
# 간단한 선형 회귀 모델 훈련
ols = LinearRegression()
ols.fit(feature_train, target_train)
LinearRegression()
# R² 점수 계산
ols.score(feature_test, target_test)
0.635463843320211
DummyRegrssor 클래스는 strategy 매개변수를 사용해 예측 방법을 지정한다. 훈련 세트의 평균 또는 중간값을 사용할수도 있다. 또한 strategy를 constant로 지정하고 constant 매개변수를 사용하면 모든 샘플에 대해 일정한 값으로 예측하는 더미 회귀 모델을 만들 수 있다.
- stragety가 mean일 때 평균값으로 예측하고, median일 때 중간값으로 예측한다.
stragety='quantile
로 지정하면 분위값을 예측으로 사용한다. 매개변수에는 0과 1사이의 실숫값을 지정하며 0.5일 때 중간값과 같고 0이면 최솟값, 1이면 최댓값이 된다.
# 모든 샘플에 대해 20으로 예측하는 더미 회귀 모델 생성
clf = DummyRegressor(strategy='constant', constant=20)
clf.fit(feature_train, target_train)
DummyRegressor(constant=array(20), strategy='constant')
# 점수 계산
clf.score(feature_test, target_test)
-0.06510502029325727
#Score 메소드¶
스코어 메소드는 기본적으로 결정계수 R²값을 반환한다. 이 점수가 1에 가까울수록 특성이 타깃 벡터의 분산을 잘 설명한다.
훈련세트의 타깃값의 최댓값으로 예측을 만드는 DummyRegressor¶
clf = DummyRegressor(strategy = 'quantile', quantile=1.0)
clf.fit(feature_train, target_train)
DummyRegressor(quantile=1.0, strategy='quantile')
#예측
clf.predict(feature_test)
array([50., 50., 50., 50., 50., 50., 50., 50., 50., 50., 50., 50., 50.,
50., 50., 50., 50., 50., 50., 50., 50., 50., 50., 50., 50., 50.,
50., 50., 50., 50., 50., 50., 50., 50., 50., 50., 50., 50., 50.,
50., 50., 50., 50., 50., 50., 50., 50., 50., 50., 50., 50., 50.,
50., 50., 50., 50., 50., 50., 50., 50., 50., 50., 50., 50., 50.,
50., 50., 50., 50., 50., 50., 50., 50., 50., 50., 50., 50., 50.,
50., 50., 50., 50., 50., 50., 50., 50., 50., 50., 50., 50., 50.,
50., 50., 50., 50., 50., 50., 50., 50., 50., 50., 50., 50., 50.,
50., 50., 50., 50., 50., 50., 50., 50., 50., 50., 50., 50., 50.,
50., 50., 50., 50., 50., 50., 50., 50., 50., 50.])
import numpy as np
# 훈련 세트의 타깃에서 최댓값 확인
np.max(target_train)
50.0
2. 기본 분류 모델 평가 - score() :R², predict()¶
분류 모델의 성능을 측정하는 일반적인 방법은 랜덤한 추측보다 얼마나 더 나은지 비교하는 것이다.
사이킷런의 DummyClassifier를 사용하면 이런 비교를 쉽게 할 수 있다.
# 데이터 로드
from sklearn.datasets import load_iris
iris = load_iris()
# 타깃 벡터와 특성 행렬 생성
irisfeature, iristarget = iris.data, iris.target
# 훈련세트와 테스트 세트 분할
irisfeature_train, irisfeature_test, iristarget_train, iristarget_test = train_test_split(irisfeature, iristarget, random_state=0)
# 더미 분류모델 생성
from sklearn.dummy import DummyClassifier
irisdummy = DummyClassifier(strategy='uniform', random_state=1)
strategy 매개변수는 예측값을 생성하는 여러 가지 옵션을 제공한다. 첫번째 stratified 옵션은 훈련 세트에 있는 타깃 벡터의 클래스 비율에 비례하는 예측을 만든다. (즉 훈련 세트에서 샘플의 20%가 여성이라면 DummyClassfier는 20%를 여성으로 예측), 두 번째 uniform 옵션은 클래스 비중이 균등하도록 랜덤하게 예측(샘플의 20%가 여성이고 80%가 남성일 때 uniform 옵션은 50%여성, 50%남성으로 예측한다.)
# 모델 훈련
irisdummy.fit(irisfeature_train, iristarget_train)
DummyClassifier(random_state=1, strategy='uniform')
# 정확도 점수 계산
irisdummy.score(irisfeature_test,iristarget_test)
0.42105263157894735
# 라이브러리 임포트
from sklearn.ensemble import RandomForestClassifier
# 분류 모델 생성
classifier = RandomForestClassifier()
# 모델 훈련
classifier.fit(irisfeature_train, iristarget_train)
RandomForestClassifier()
# 정확도 점수 계산
classifier.score(irisfeature_test, iristarget_test)
0.9736842105263158
#strategy 옵션 most_frequent¶
이 옵션은 무조건 훈련 세트에서 가장 많은 타깃 레이블로 예측을 만든다.
irisdummy = DummyClassifier(strategy='most_frequent')
irisdummy.fit(irisfeature_train,iristarget_train)
DummyClassifier(strategy='most_frequent')
# 타깃의 배열에 값 확인
iristarget_train
array([1, 1, 2, 0, 2, 0, 0, 1, 2, 2, 2, 2, 1, 2, 1, 1, 2, 2, 2, 2, 1, 2,
1, 0, 2, 1, 1, 1, 1, 2, 0, 0, 2, 1, 0, 0, 1, 0, 2, 1, 0, 1, 2, 1,
0, 2, 2, 2, 2, 0, 0, 2, 2, 0, 2, 0, 2, 2, 0, 0, 2, 0, 0, 0, 1, 2,
2, 0, 0, 0, 1, 1, 0, 0, 1, 0, 2, 1, 2, 1, 0, 2, 0, 2, 0, 0, 2, 0,
2, 1, 1, 1, 2, 2, 1, 1, 0, 1, 2, 2, 0, 1, 1, 1, 1, 0, 0, 0, 2, 1,
2, 0])
# 훈련 세트 타깃에서 가장 많은 값으로 예측
irisdummy.predict(irisfeature_test)
array([2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])
# 훈련 세트의 타깃 개수 확인
# 훈련 세트에 있는 타깃값을 확인해보면 클래스 레이블 2가 가장 많다.
# Numpy array에서 각각의 빈도수를 카운트하는데 사용되는 메소드입니다. 0부터 가장 큰 값까지 각각의 발생 빈도수를 체크
# 0이 37, 1이 34, 2가 41
np.bincount(iristarget_train)
array([37, 34, 41])
'파이썬 > 머신러닝' 카테고리의 다른 글
머신러닝 다중클래스 분류 모델 예측 평가 및 성능 시각화 (0) | 2022.11.24 |
---|---|
머신러닝 이진 분류모델의 예측 평가와 임곗값 평가 (0) | 2022.11.24 |
모델 평가란? 로지스틱회귀에서 KFold 교차검증 사용해보기 (0) | 2022.11.21 |
넘파이numpy 와 서킷런sklearn을 활용한 데이터 이상치 확인 및 해결 (0) | 2022.11.17 |
서킷런 sklearn으로 수치형 데이터 전처리 [스케일링 - 표준화, 로버스트, MinMax, 정규화] (1) | 2022.11.16 |
댓글