-
회귀- 회귀 트리Python Machine Learning/회귀 2020. 8. 22. 17:36
선형 회귀의 경우 회귀 계수의 관계를 모두 선형으로 가정하는 방식입니다. 일반적으로 선형 회귀는 회귀 계수를 선형으
로 결합하는 회귀 함수를 구해, 여기에 독립변수를 입력해 결과값을 예측하는 방식이며, 비선형 회귀 역시 비선형 회귀
함수를 통해 결과값을 예측합니다. 다만 비선형 회귀는 회귀 계수의 결합이 비선형일 뿐. 머신러닝 기반의 회귀는 회귀
계수를 기반으로 하는 최적 회귀 함수를 도출하는 것이 주요 목표입니다.
반면에 회귀 트리는 회귀 함수를 기반으로 하지 않고 결정 트리와 같이 트리기반으로 합니다. 즉, 회귀를 위한 트리를 생
성하고 이를 기반으로 회귀 예측을 하는 것으로, 회귀 트리의 경우 분류 트리와 크게 다르지 않습니다. 다만 리프 노드에
서 예측 결정값을 만드는 과정에 차이가 있으며 분류 트리가 특정 클래스 레이블을 결정하는 것과는 달리 회귀 트리는
리프 노드에 속한 데이터 값의 평균값을 구해 회귀 예측값을 계산합니다.
결정 트리, 랜덤 포레스트, GBM, XGBoost, LightGBM 등의 분류에서 소개한 모든 트리 기반의 알고리즘은 분류뿐만 아니
라 회귀도 가능합니다. 트리 생성이 CART 알고리즘에 기반하고 있기 때문이다. CART(Classification And Regression
Trees)는 이름에서도 알 수 있듯 분류뿐만 아니라 회귀도 가능하게 해주는 트리 생성 알고리즘입니다.
사이킷런에서는 결정 트리, 랜덤 포레스트, GBM에서 CART 기반의 회귀 수행을 할 수 있는 Estimator 클래스를 제공하고 또한 XGBoost, LightGBM도 사이킷런 래퍼 클래스를 통해 이를 제공합니다. 다음은 사이킷런의 트리 기반 회귀와 분류의 Estimator 클래스를 표로 나타낸 것입니다.
지금부터는 사이킷런릐 랜덤 포레스트 회귀 트리인 RandomForestRegressor를 이용해 보스턴 주택 가격 예측을 수행
해보겠습니다.
이번에는 결정트리, GBM, XGBoost, LightGBM의 Regressor를 모두 이용해보겠습니다.
사이킷런의 여러 회귀 트리 클래스를 이용하여 회귀 예측 -> get_model_cv_prediction( ) 함수는 입력 모델과 데이터 세트를 입력 받아 교차 검증으로 평균 RMSE를 계산하는 함수
회귀 트리 Regressor 클래스는 feature_importances_를 이용해 피처별 중요도를 알 수 있습니다.
다음으로는 회귀트리 Regressor가 어떻게 에측값을 판단하하는지 선형회귀와 비교해 시각화 해보겠습니다.
하이퍼 파라미터 max_depth를 변화시키면서 회귀 트리 예측선의 변화를 살펴보겠습니다.
-> 쉽게 표현하기 위해서 1개의 변수만 추출하고 price와 가장 밀접한 양의 상관관계를 가지는 RM칼럼만 이용해
선형 회귀와 결정 트리 회귀로 price 예측 회귀선을 표현.
다음으로 보스턴 데이터 세트에 대해 LinearRegression과 DecisionTreeRegressor를 max_depth를 각각 2,7로 바꿔
학습하고 Regressor에 RM 값을 4.5~8.5까지의 100개의 테스트 데이터 세트로 제공했을 때 예측값을 구해보겠습니다.
선형 회귀와 결정 트리 기반의 Regressor 생성하고 실제 예측을 적용할 테스트용 데이터 셋을 4.5 ~ 8.5 까지 100개 데이터 셋 생성하고 시각화를 위해 피처는 RM만, 그리고 결정 데이터인 PRICE 추출 후 학습과 예측 수행 X축값을 4.5 ~ 8.5로 변환하며 입력했을 때, 선형 회귀와 결정 트리 회귀 예측 선 시각화 선형 회귀로 학습된 모델 회귀 예측선, DecisionTreeRegressor의 max_depth를 2와 7로 했을 때 회귀 예측선 정리
선형회귀는 직선으로 예측 회귀선을 표현하는데 반해, 회귀 트리의 경우 분할되는 데이터 지점에 따라 브랜치를 만들고
계단 형태로 회귀선을 만듭니다. DecisionTreeRegressor의 max_depth가 7인 경우에는 학습 데이터 세트의 이상치
데이터도 학습하면서 복잡한 계단 형태의 회귀선을 만들어 과적합이 되기 쉬운 모델이 되었음을 알 수 있습니다.
'Python Machine Learning > 회귀' 카테고리의 다른 글
회귀 - 주택 가격 (0) 2020.08.24 회귀 - 실습 자전거 대여 수요 예측 (0) 2020.08.24 회귀 - 로지스틱 회귀 (0) 2020.08.22 회귀 - 선형 회귀 모델을 위한 데이터 변환 (0) 2020.08.22 회귀 - 규제 선형 모델 ( 릿지, 라쏘, 엘라스틱넷 ) (0) 2020.08.17