본문 바로가기

Study/class note

머신러닝 / 파이썬으로 회귀트리 구현하기

64 파이썬으로 회귀트리 구현하기

수치예측을 하는 의사결정트리를 사용하면 됨.

#1. 데이터 로드

#2. 결측치 확인

#3. 종속변수가 정규분포 보이는지 확인

#4. 훈련데이터 테스트데이터 분리

#5. 모델생성

#6. 모델훈련

#7. 모델예측

#8. 모델평가

#9. 모델성능개선

 

#python
#1. 데이터 로드
import pandas as pd
wine = pd.read_csv("c:\\data\\whitewines.csv")
wine.head()

#2. 결측치 확인
wine.isnull().sum()

#3. 종속변수가 정규분포 보이는지 확인
wine.quality.plot(kind = 'hist')

#4. 훈련데이터 테스트데이터 분리
from sklearn.model_selection import train_test_split

x = wine.iloc[:,:-1]
y = wine.iloc[:,-1]

x_train, x_test, y_train, y_test = train_test_split(x,y, test_size = 0.1, random_state = 1)

print(x_train.shape)  #(4408, 11)
print(x_test.shape)  #(490, 11)
print(y_train.shape)  #(4408,)
print(y_test.shape)  #(490,)

#5. 모델생성
from sklearn.tree import DecisionTreeRegressor

model = DecisionTreeRegressor(random_state = 1)

#6. 모델훈련
model.fit(x_train,y_train)

#7. 모델예측
result = model.predict(x_test)
result

#8. 모델평가
print(sum(result == y_test) / len(y_test)) # 정확도 0.610204081632653

#상관계수
import numpy as np
np.corrcoef(y_test, result)  # 0.58180875

#오차
def mae(x,y):
    return np.mean(abs(x-y))

print(mae(y_test, result))  #0.47551020408163264, R의 경우는 오차가 모델트리일때 0.57

from sklearn.ensemble import RandomForestClassifier 랜덤포레스트 분류

from sklearn.ensemble import RandomForestRegressor 랜덤포레스트 수치예측(회귀)

 

#9. 모델성능개선
from sklearn.ensemble import RandomForestRegressor  # 앙상블을 이용한 의사결정트리 회귀모델

model2 = RandomForestRegressor(random_state = 1)
model2.fit(x_train, y_train)  #모델훈련
result2 = model2.predict(x_test) #예측

sum(np.round(result2) == y_test) / len(y_test)  #정확도 0.6857142857142857

np.corrcoef(result2, y_test)  #상관계수 0.71178998

mae(y_test, result2) #오차 0.4348979591836732

 

ㅇ파이썬에서 수치예측하는 모델 패키지 정리

1. 다중회귀모델

: from sklearn.linear_model import LinearRegression

 

2. 의사결정트리 회귀모델

: from sklearn.tree import DecisionTreeRegressor

 

3. 랜덤포레스트 회귀모델

: from sklearn.ensemble import RandomForestRegressor

 

 

문제323. 미국 보스톤 지역의 집값을 예측하는 회귀모델을 만드는데 다중회귀 모델인 LinearRegression으로 모델을 만들고 성능을 확인하시오.

#1. 데이터 로드
import pandas as pd

boston = pd.read_csv("c:\\data\\boston.csv")
boston.head()

#2. 결측치 확인
boston.isnull().sum()

#3. 종속변수가 정규분포 보이는지 확인
boston.price.plot(kind = 'hist')

#4. 훈련데이터 테스트데이터 분리
from sklearn.model_selection import train_test_split

x = boston.iloc[:,:-1]
y = boston.iloc[:,-1]

x_train, x_test, y_train, y_test = train_test_split(x,y, test_size = 0.1, random_state = 1)

print(x_train.shape, x_test.shape, y_train.shape, y_test.shape)  #(455, 14) (51, 14) (455,) (51,)

#다중회귀모델
#5. 모델생성
from sklearn.linear_model import LinearRegression

model = LinearRegression()

#6. 모델훈련
model.fit(x_train, y_train)

#7. 모델예측
result = model.predict(x_test)

#8. 모델평가
import numpy as np
print(np.corrcoef(y_test, result))  #상관계수 0.88804528
print(mae(y_test, result))  #오차 3.7468103368637924

 

이번에는 의사결정트리 회귀모델(from sklearn.tree import DecisionTreeRegressor)로 진행해보자.

# 의사결정트리 회귀모델
#5. 모델생성
from sklearn.tree import DecisionTreeRegressor

model2 = DecisionTreeRegressor(random_state = 1)

#6. 모델훈련
model2.fit(x_train, y_train)

#7. 모델예측
result2 = model2.predict(x_test)

#8. 모델평가
print(np.corrcoef(y_test,result2))  #상관계수 0.93594231
print(mae(y_test,result2))  #오차 2.509803921568628

 

문제325. 그럼 이번에는 RandomForestRegressor로 구현해서 성능을 평가하시오.

#랜덤포레스트 회귀모델
#5. 모델생성
from sklearn.ensemble import RandomForestRegressor

model3 = RandomForestRegressor(random_state = 1)

#6. 모델훈련
model3.fit(x_train, y_train)

#7. 모델예측
result3 = model3.predict(x_test)

#8. 모델평가
print(np.corrcoef(y_test,result3))  #상관계수 0.96688151
print(mae(y_test,result3))  #오차 1.927784313725491

 

  상관계수 오차
다중회귀모델 0.88804528 3.7468103368637924
의사결정트리 회귀모델 0.93594231 2.509803921568628
랜덤포레스트 회귀모델 0.96688151 1.927784313725491

> 랜덤포레스트 회귀모델의 성능이 가장 좋음.

 

 

반응형