Decision Tree
특정 변수에 대한 의사결정 규칙을 트리 형태로 계속 분류하는 모델
정보 이득이 큰 순서대로 트리를 분류함
Root Node(뿌리 마디): 전체 자료를 갖는 시작하는 마디
Child Node(자식 마디): 마디 하나로부터 분리된 2개 이상의 마디
Parent Node(부모 마디): 주어진 마디의 상위 마디
Terminal Node(끝 마디): 자식 마디가 없는 마디(=Leaf Node)
Internal Node(중간 마디): 부모 마디와 자식 마디가 모두 있는 마디
Branch(가지): 연결되어 있는 2개 이상의 마디 집합
Depth(깊이): 뿌리 마디로부터 끝 마디까지 연결된 마디 개수(위 그림의 경우 4)
전체 샘플 623개를 sex_male <= 0.5를 기준으로 나눔
각각 396개, 227개로 분류
가장 많은 데이터 = die
gini 불순도 = 0.46
분류의 경우 마지막 노드의 최빈값을 예측값으로 결정
회귀의 경우 마지막 노드의 샘플의 평균을 예측값으로 결정
따로 파라미터를 지정하지 않으면, 과적합이 될 수 있음
모델링
#분류
from sklearn.tree import DecisionTreeClassifier
#회귀
from sklearn.tree import DecisionTreeRegressor
코드로 임포트 한 다음
#분류
model = import DecisionTreeClassifier(criterion = , splitter= , max_depth= ,min_samples_split= , min_samples_leaf = , max_features , random_tate = )
#회귀
model = DecisionTreeRegressor(criterion = , splitter= , max_depth= ,min_samples_split= , min_samples_leaf = , max_features , random_tate = )
로 모델을 선언한다
각각 파라미터는
- criterion: 분할 품질을 측정하는 기능을 지정 , "mse"(평균 제곱 오차), "friedman_mse"(Friedman의 평균 제곱 오차), "mae"(평균 절대 오차), 기본값= "mse"
- splitter: 각 노드에서 분할을 선택하는 데 사용되는 전략을 지정 , "best"(최적 분할), "random"(최적 또는 무작위 분할),기본값= "best"
- max_depth: 트리의 최대 깊이를 지정 (기본값 = None)
- min_samples_split: 노드를 분할하기 위해 필요한 최소 샘플 수를 지정 (기본값=2)
- min_samples_leaf: 리프 노드에 필요한 최소 샘플 수를 지정 (기본값 =1)
- max_features : 각각의 분기점에서 고려해야 할 feature들의 수 (기본값=None).
- random_state : 난수 발생 시드
이다 만약 기본 설정을 그대로 쓸 생각이라면 그냥 함수명()으로 선언해도 된다
학습 및 예측
model.fit(x_train, y_train)
fit매소드로 학습을 시킬 수 있다
이후
y_pred = model.predict(x_test)
코드를 사용하여 완성된 모델에 x_test를 넣어 예측값을 생성 할 수 있다
평가
from sklearn.metrics import *
코드로 평가 함수들을 임포트 한 다음
https://bigcat5312.tistory.com/77
머신러닝 지도학습 - 회귀와 분류, 분석도구
회귀(Regression) 이미 결과값이 있는 데이터를 사용하여 연관성을 찾아 연속적인 숫자를 예측해 내는 것 ex) 집값 분석도구 평가도구 LinearRegression KNeighborsRegressor DecisionTreeRegressor RandomForestRegressor XG
bigcat5312.tistory.com
게시글을 참고하여 원하는 평가함수(y_test , y_pred)를 사용해 평가 할 수 있다
시각화
트리
# 시각화 모듈
from sklearn.tree import export_graphviz
from IPython.display import Image
# 이미지 파일
export_graphviz(model, # 모델 이름
out_file='tree.dot', # 파일 이름
feature_names=x.columns, # Feature 이름
class_names=['die', 'survived'], # Target Class 이름 **타겟이 알파벳이면 무조건 알파벳순
rounded=True, # 둥근 테두리
precision=2, # 불순도 소숫점 자리수
filled=True) # 박스 내부 채우기
# 변환
!dot tree.dot -Tpng -otree.png -Gdpi=300
# 이미지 파일 표시
Image(filename='tree.png')
변수 중요도
시각화
plt.figure(figsize=(6, 8))
plt.barh(list(x), model.feature_importances_)
plt.ylabel('Features')
plt.xlabel('Importances')
plt.show()
정렬해서 보기
df = pd.DataFrame()
df['feature'] = list(x)
df['importance'] = model.feature_importances_
df.sort_values(by = 'importance', ascending= True, inplace=True)
plt.barh(y= 'feature', width = 'importance', data = df)
plt.show()
그냥 확인하기
print(model.feature_importances_)
'파이썬 > 머신러닝-지도학습' 카테고리의 다른 글
파이썬 머신러닝 지도학습 - 앙상블 (0) | 2023.09.16 |
---|---|
파이썬 머신러닝 지도학습 - Logistic Regression(로지스틱 회귀) (분류) (0) | 2023.09.16 |
파이썬 머신러닝 지도학습 - K-Nearest Neigbor(KNN) (분류, 회귀) (0) | 2023.09.16 |
파이썬 머신러닝 지도학습 - 데이터 분리 (sklearn - train_test_split (0) | 2023.09.16 |
머신러닝 지도학습 - 분류모델 성능 평가 데이터의 이해 - sklearn.metrics (0) | 2023.09.16 |