머신러닝/machine learning

classification, regression tree

Olivia-BlackCherry 2023. 5. 18. 00:03

regression tree

regression은 회귀이다. 데이터셋이 이러한 회귀의 특성을 갖는데, 분류 모델로 decision tree를 쓴다면 

이를 regression tree 라고 말한다. 모든 트리 기반의 알고리즘은 분류뿐만 아니라 회귀도 가능하다. 트리 생성이 CART(classification and regression tree) 알고리즘에 기반하기 때문이다.

 

회귀 트리는 트리 구조로 표현되며, 각 내부 노드는 특정한 예측 변수의 값을 기준으로 데이터를 분할한다.

종속 변수를 잘 예측할 수 있는 가장 좋은 분할을 찾는 것이 핵심인데, 분할 기준(criterion)으로 MSE 또는 MAE를 최소로 만드는 값을 선택한다. 

 

과도한 오버피팅을 방지하기 위해 max_depth 깊이를 조절하거나, pruning  가지치기를 한다. 

min_samples_split, min_sample_leaf 등을 사용하여 모델을 효율적으로 조절하기도 한다.

#pre-processing
#결측값 확인 후 제거
data.isna().sum()
data.dropna(inplace=True)
data.isna().sum()

# target값 정하기
X = data.drop(columns=["MEDV"])
Y = data["MEDV"]

#train/test split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=.2, random_state=1)

#modeling
regression_tree = DecisionTreeRegressor(criterion = "mse")
regression_tree.fit(X_train, Y_train)

#model evaluation
regression_tree.score(X_test, Y_test)

#prediction *evaluation
prediction = regression_tree.predict(X_test)
print((prediction - Y_test).abs().mean()*1000)