Python/Machine Learning

[Python ML]K-최근접이웃(K-NN), 의사결정나무(Decision Tree)

sohyunkimmm 2023. 1. 18. 23:26
728x90

* K-최근접 이웃(K-NN; K-Nearest Neighbor)

- 가장 근접하게 있는 데이터 종류에 따라서 해당 데이터의 종류를 정해주는 알고리즘 (유유상종)

- 판별하고 싶은 데이터와 인접한 k개의 데이터를 찾아, 해당 데이터의 라벨이 다수인 범주로 데이터를 분류하는 방식

- k는 '홀수'로 하는것이 좋음. 짝수일 경우 동점 상황이 만들어져 분류할 수 없는 경우가 발생할 수 있기 때문

 

A를 짜장 매니아로 볼 것인가, 짬뽕 매니아로 볼 것인가?
k를 3으로 두었을 때, A는 짜장 매니아로 분류

 

K-NN 과정
K-NN 적용 전과 후

 

 

* K-NN 코딩하기

1) KNeighbors Classifier(분류형)

- 순서: 데이터 분할 - 데이터 표준화 - 데이터 밸런싱 - 모델 생성 - 모델 적용 - 결과값 도출

- X는 이산형 변수만 가지고 있기 때문에, StandardScaler()만 적용

- 오버샘플링 SMOTE 적용

- knn 분류모델 생성: knn_model = KNeighborsClassifier(n_neighbors = 9, metric = "euclidean")

   -> k값을 9로 정하고, 값 사이의 거리를 'euclodean'을 통해 구하겠다

- 결과값 확인: accuracy, classification_report

KNeighborsClassifier
accuracy = 0.844, f1-score = (0.84 + 0.67) /2

 

 

2) KNeighbors Regressor(연속형)

- 순서: 데이터 분할 - 데이터 표준화 - 모델 생성 - 모델 적용 - 결과값 도출

- knn 회귀모델 생성: knn_reg = KNeighborsRegressor(n_neighbors = 9, p = 2)

   -> p= 1, manhattan distance(L1) / p=2, euclidean distance(L2) / p = arbitrary(임의), minkowsko distance

- 결과값 확인: accuracy, RMSE

KNeighborsRegressor

 

 

 

 

* 의사결정 나무(Decision Tree)

- 분류함수를 의사결정 규칙으로 이루어진 나무 모양으로 그리는 방법(얼마나 연관성이 없도록 쪼갰느냐)

- 제일 마지막 노드에는 더이상 겹치는 없이 0 1 분류됨

- 변수 분할의 기준: CART(이산형), C4.5(연속형)

 

- Decision Tree 모델을 사용하는 이유

"이해하기 쉽다"

1) 사람의 사고능력을 모방한 결정방식이기 때문

(Decision Trees usually mimic human thinking ability while making a decision, so it is easy to understand.) 

2) 트리모양의 구조를 가지는 의사결정 나무에 기반한 논리이기 때문

(The logic behind the decision tree can be easily understood because it shows a tree-like structure.)

 

Decision Tree의 구조

 

여러개의 decision tree들이 모여 Random Forest 형성
나무들이 모여 숲이 되었다! (정말 직관적인 네이밍이다)

 

 

* Decision Tree 코딩하기

1) DecisionTree Classifier(분류형)

- 순서: 데이터 분할 - (데이터 표준화) - 데이터 밸런싱 - 모델 생성 - 모델 적용 - 결과값 도출

- DT 분류모델 생성: DT_model = DecisionTreeClassifier(random_state = 0, max_depth = 3)

- 결과값 확인: accuracy, classification_report

DecisionTreeClassifier

 

- .feature_importance(): 변수 중요도 알아보는 함수. 수치가 높게 나올수록 중요도가 높은(Y에 영향을 많이 주는) 변수

.feature_importance로 변수 중요도 파악하기: '총매출액'이 가장 중요한 변수
DecisionTree 시각화

 

 

2) DecisionTree Regressor(연속형)

- 순서: 데이터 분할 - (데이터 표준화) - 모델 생성 - 모델 적용 - 결과값 도출

- DT 회귀모델 생성: DT_model_reg = DecisionTreeRegressor(random_state = 0, max_depth = 5)

- 결과값 확인: accuracy, RMSE

DecisionTreeRegressor
DecisionTree 시각화

 

 

 

 

<사진 출처>

https://m.blog.naver.com/bestinall/221760380344

https://medium.com/swlh/k-nearest-neighbor-ca2593d7a3c4

https://www.javatpoint.com/machine-learning-decision-tree-classification-algorithm

https://towardsdatascience.com/from-a-single-decision-tree-to-a-random-forest-b9523be65147

https://mlarchive.com/machine-learning/decision-trees-and-random-forest-all-you-need-to-know/

 

728x90
반응형