본문 바로가기
Machine Learning

[ML] Data split_ tree_ iris

by ram_ 2023. 1. 2.

STEP01. Import, Split Data 

load_iris 데이터를 import 해주고 iris 변수에 담아준다. features 변수에 test용 sample데이터를 2개만 나눠준다.

 

X_train, X_test, y_train, y_test 4개의 변수를 train_test_split 함수를(sklearn의 데이터를 잘 나눠주는 모델) 사용해서 반환받을 것이다.  (train훈련용 한세트, test샘플용 한세트)

test_size를 0.2로 설정하면 훈련용은 80%, 테스트용은 20%로 했다는 것이다.

 

.shape으로 확인해보면 8:2로 설정해준 비율값에 맞게 120개, 30개가 잘 들어간 것을 볼 수 있다.

 

 


STEP02. Check Data 

** 데이터 분리시에 주의해야 할 점은, 훈련용 / 테스트용이 잘 분리되어있는지 확인해야 한다는 것이다.

np.unique를 사용하여 확인한다. 

각 클래스(setosa, versicolor, verginica)별로 동일 비율이 되면 좋기에 , stritify=labels 옵션을 사용하여 같은 비율로 샘플데이터가 추출되게 해준다. np.unique에서 return_counts=True로 설정하여 해당 값의 갯수를 확인한다. class별 비율을 맞추는건 개인의 선택이지만 꼭 맞춰줘야하는 경우도 생기기에 기억해주자.

 

 


STEP03. Making Tree

.fit()은 훈련시킨다는 의미이다. 괄호 안의 X_train은 feature값, y_train은 label값을 의미한다.

max_depth를 2로 설정해주었기에 2번째 가지까지의 treemap이 나타난 것이다.

 

해석해보자면 setosa는 100% 40개 분류, versicolor는 versicolor40개 중 35개를 맞췄고 verginica1개가 넘어왔고, verginica는 40개 중 39 + versicolor에서 5개가 넘어와 분류된 것을 볼 수 있다.

 

 


STEP04. Check Data Accuracy 

train 데이터의 정확도는 95.3%인 것을 확인할 수 있다.

test 데이터의 정확도는 96.6%인 것을 확인할 수 있다.

 

보통의 경우에는 train데이터보다 test데이터의 정확도가 낮다. 

train데이터가 95.3%으로 test데이터의 accuracy값의 근처에 있으니 과적합은 일어나지 않았다는 점을 시사한다.

 

-> 누군가가 너의 그 모델이 과적합이 일어나지 않는다고 확신할 수 있어? 라고 묻는다면, 

01. 확신이 안간다면 데이터를 더 달라 or 더 모을 시간을 달라.

02. 내가 가진 데이터를 8:2로 나누어 봤더니 확인할 수 있었다.


STEP05. Check Data Decision_regions

과적합을 막기위해 max_depth를 한정하는 것이 중요하다.

 

+ 잔기술을 부려보자면 ..

scatter변수를 하나 만들어본다. 150개 데이터 전체를 표기하고, train데이터와 test데이터를 분리해서 표시하고, 결정경계까지 넣어줘서 그림을 그리게 속성값을 준다.

 

 

 

'Machine Learning' 카테고리의 다른 글

[ML] Titanic Survivor Prediction  (0) 2023.01.03
[ML] Data Split_ zip / unpacking  (0) 2023.01.02
[ML] Machine Learning  (0) 2022.12.28
[ML] Scikit Learn  (0) 2022.12.28
[ML] Decision Tree  (0) 2022.12.28