2021/02/01 - [Python] - [개미의 걸음 scikit-learn 1차시] 사이킷런의 이해
2021/02/02 - [Python] - [개미의 걸음 scikit-learn 2차시] Classification(분류)의 이해
2021/02/03 - [Python] - [개미의 걸음 scikit-learn 3차시] Classification① 의사결정트리(Decision Tree)의 이해
분류를 위한 클래스인 DecisionTreeClassifier와 회귀를 위한 클래스인 DecisionTreeRegressor
파라미터 명 | 설명 |
min_samples_split | 노드를 분할하기 위한 최소한의 샘플 데이터 수로 과적합 제어 용도로 사용 기본값[디폴트] : 2 작게 설정할 수록 분할되는 노드수가 많아져 과적합 가능성 증가 ex> 1로 설정할 경우, 분할되는 노드수가 많아져서 과적합 가능성 증가 |
min_samples_leaf | leaf가 되기 위한 최소한의 샘플 데이터 수로 과적합 제어 용도로 사용 [min_samples_split과 유사] 비대칭적 데이터의 경우 특정 클래스의 데이터가 극도로 작을 수 있으므로 이경우에는 작게 설정 |
max_features | 최적의 분할을 위해 고려할 최대 feature 개수 기본값[디폴트] : None으로 데이터 세트의 모든 feature를 사용해 분할 수행 int형으로 지정하면 대상 feature의 개수를 의미 float형으로 지정하면 전체 피처 중 대상 feature의 퍼센트를 의미 'None'은 전체 feature 선정 'sqrt'는 전체 feature의 제곱근만큼 선정 'auto'는 sqrt와 동일 'log'는 전체 feature 중 log2(전체 feature 개수)만큼 선정 |
max_depth | 트리의 최대 깊이를 규정 기본값[디폴트] : None으로 완벽하게 클래스 결정 값이 될때까지 깊이를 계속 키우며 분할하거나 노드가 가지는 데이터 개수가 min_samples_split보다 작아질 때까지 계속 깊이를 증가시킴 깊이가 깊어지면 min_samples_split 설정대로 최대 분할하여 과적합 가능성 증가[적절한 값으로 제어] |
max_leaf_nodes | 말단 노드[leaf]의 최대 개수 |
# min_samples_split의 이해
ex> min_samples_split=41인 경우, 41개 이상의 샘플만 split한다는 의미!
# min_sample_leaf의 이해
ex> min_samples_leaf=37인 경우, 생성될 노드들의 샘플 수가 모두 37개 이상이어야만 split한다는 의미!
# max_depth의 이해
ex> max depth=3인 경우, depth가 3일 때까지만 split한다는 의미!
# max_leaf_nodes의 이해
ex> max_leaf_nodes=4인 경우, leaf node들이 4가 될 때까지만 split한다는 의미!
## pandas 모듈
import pandas as pd
## iris 데이터 모듈
from sklearn.datasets import load_iris
## train과 test set 구분 모듈
from sklearn.model_selection import train_test_split
## 데이터 표준화 모듈
from sklearn.preprocessing import StandardScaler
## 의사결정트리 모델
from sklearn.tree import DecisionTreeClassifier
## 정확도 예측 모듈(연속적인 데이터에서 사용 안함)
from sklearn.metrics import accuracy_score
## 의사결정트리 시각화
from sklearn.tree import export_graphviz
import graphviz
[graphviz 설치하기 ↓]
2021/02/04 - [Python] - [개미의 걸음 scikit-learn 오류해결] graphviz 설치 및 오류 해결(with jupyter notebook)
iris = lad_iris()
## train, test 데이터를 각각 8:2로 구분
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=1)
## 데이터 표준화
sc = StandardScaler()
sc.fit(x_train)
x_train_std = sc.transform(x_train)
x_test_std = sc.transform(x_test)
tree_model = DecisionTreeClassifier(random_state=100)
tree_model.fit(x_train_std, y_train)
## graphviz가 읽어들여 그래프 형태로 시각화할 수 있는 출력 파일 생성
export_graphviz(tree_model, out_file='tree.dot', class_names=iris.target_names, feature_names=iris.feature_names, impurity=True, filled=True)
## 저장된 tree.dot파일을 사용해 시각화하기
with open("tree.dot")as f:
dot_graph = f.read()
graphviz.Source(dot_graph)
[format 오류가 발생하는 경우 ↓]
2021/02/04 - [Python] - [개미의 걸음 scikit-learn 오류해결] graphviz 설치 및 오류 해결(with jupyter notebook)
y_pred = linear_model.predict(x_test_std)
정확도/정밀도/재현율 구하기
## 정확도/정밀도/재현율 구하는 함수 만들기(여러 번 사용할 때 용이)
def get_clf_eval(y_test, y_pred):
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test,y_pred, average='macro')
recall = recall_score(y_test,y_pred,average='macro')
print('정확도 : {0:.4f}, 정밀도 : {1:.4f}, 재현율 : {2:.4f}'.format(accuracy, precision, recall))
## 값 출력하기
print(get_clf_eval(y_test, y_pred))
[개미의 걸음 scikit-learn 10차시] 회귀분석 (0) | 2021.02.10 |
---|---|
[개미의 걸음 scikit-learn 오류해결] graphviz 설치 및 오류 해결(with jupyter notebook) (0) | 2021.02.04 |
[개미의 걸음 scikit-learn 3차시] Classification① 의사결정트리(Decision Tree)의 이해 (0) | 2021.02.03 |
[개미의 걸음 scikit-learn 2차시] Classification(분류)의 이해 (0) | 2021.02.02 |
[개미의 걸음 scikit-learn 1차시] 사이킷런의 이해 (0) | 2021.02.01 |
댓글 영역