코드스테이츠 부트캠프 #일차
S2-Week 2: Tree Based Model - Decision Trees
Decision Trees
키워드
- category_encoders
- graphviz
- numpy
- pandas
- scikit-learn
- 파이프라인(pipelines)
- 결정트리(decision tree)
- 특성 중요도(feature importances)
- 사이킷런 파이프라인(pipelines) 을 이해하고 활용 할 수 있습니다.
- 사이킷런 결정트리(decision tree) 를 사용할 수 있습니다.
- 결정트리의 특성 중요도(feature importances) 를 활용할 수 있습니다.
- 결정트리 모델의 장점을 이해하고 선형회귀모델과 비교할 수 있습니다.
카디널리티
-컬럼 개수(=차수), 컬럼 안에 있는 데이터 개수
사이킷럿 파이프라인(Pipelines)
-모델을 만들 때 진행했던 결측치 처리, 스케일링, 모델학습 등 머신러닝 프로세스에서 중복 코드를 최소화하여 연결을 쉽게할 수 있다.
-똑같은 작업을 하면 코드가 간결해지고 가독성이 증가한다.
여러 ML 모델을 같은 전처리 프로세스에 연결시킬 수 있다.
그리드서치(grid search)를 통해 여러 하이퍼파라미터를 쉽게 연결할 수 있다.'
1
2
3
4
5
6
7
8
9
10
11
12
|
#파이프라인 z
pipe = make_pipeline(
OneHotEncoder(),
SimpleImputer(),
StandardScaler(),
LogisticRegression(n_jobs=-1)
)
pipe.fit(X_train, y_train)
print('검증세트 정확도', pipe.score(X_val, y_val))
y_pred = pipe.predict(X_test)
|
cs |
Decision Tree (결정트리)
-분류와 회귀문제에 모구 적용 가능
-데이터를 분할해 가는 알고리즘
-분류 과정은 새로운 데이터가 특정 말단 노드에 속한다는 정보를 확인한 뒤 말단노드의 빈도가 가장 높은 범주로 데이터를 분류한다.
-분류과정을 직관적으로 확인이 가능하다.
entropy
얼마만큼의 정보를 담고 있는가'를 엔트로피(entropy)라고 한다.
엔트로피가 클 수록 데이터 정보가 잘 분포되어 있기 때문에 좋은 지표라고 예상할 수 있다.
#결정트리 코드
1
2
3
4
5
6
7
8
9
10
11
|
from sklearn.tree import DecisionTreeClassifier
pipe = make_pipeline(
OneHotEncoder(use_cat_names=True),
SimpleImputer(),
DecisionTreeClassifier(random_state=2, criterion='entropy')
)
pipe.fit(X_train, y_train)
print('훈련 정확도: ', pipe.score(X_train, y_train))
print('검증 정확도: ', pipe.score(X_val, y_val))
훈련 정확도: 0.9908667674880646 검증 정확도: 0.7562566718064286 y_val.value_counts(normalize=True) |
cs |
트리의 복잡를 줄여주는 하이어파라미터
- min_samples_split
- min_samples_leaf
- max_depth
*결정트리의 비용함수를 최소화 하도록 분할하는 것이 트리모델 학습이다.
비용함수 중에서 지니불순도와 엔트로피가 있다
-지니불순도(Gini impurity) : 샘플이 한 쪽이 더 많은 비율을 차지할 수록 불순도가 낮은 것이다.
ex) 45%, 55%인 샘플은 불순도가 높은 것이다.
-분할된 데이터 세트들의 불순도가 작을수록 정보 획득량은 증가한다.
-생성된 데이터 세트의 크기에 따라 가중치가 적용된 정보 획득량(Weighted Information Gain)을 계산해볼 수 있을 거다.
EDA 및 모델 만드는데 편리하게 쓸 코드 복붙
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
#데이터 셋 확인
train.head().T
#데이터 타입 확인
train.dtypes
#훈련데이터를 훈련/검증 세트로 나누겠습니다
train, val = train_test_split(train, train_size=0.80, test_size=0.20,
stratify=train[target], random_state=2)
#데이터 확인하기
from pandas_profiling import ProfileReport
profile = ProfileReport(train, minimal=True).to_notebook_iframe()
#실수형 타입 확인
from pandas_profiling import ProfileReport
profile = ProfileReport(train, minimal=True).to_notebook_iframe()
#중복이 있는지 확인
train.T.duplicated()
*결측치, 중복된 특성 확인한다. 데이터 클리닝이 필요하면 작업을 한다.
#너무 많은 범주를 가지는 카테고리 특성들이 있는지 카디널리티(cardinality)를 확인
train.describe(exclude='number')
train.describe(exclude='number').T.sort_values(by='unique')
#특성을 엔지니어링 해보겠습니다. 이부분에서 여러분의 아이디어를 여러가지 실험해 볼 수 있습니다.
def engineer(df):
return df
train = engineer(train)
val = engineer(val)
test = engineer(test)
#데이터를 타겟과 특성을 분리
features = train.drop(columns=[target]).columns
# 훈련/검증/테스트 데이터를 특성과 타겟으로 분리합니다
X_train = train[features]
y_train = train[target]
X_val = val[features]
y_val = val[target]
X_test = test[features]
|
cs |
1
2
3
4
5
6
7
8
9
10
11
|
* 프로파일링
#데이터에 대해서 잘 모르는 상황이니 Profiling을 사용하여 데이터리포트를 만들어 본다.
#라이브러리 먼저 설치해줘야함
!pip install -U pandas-profiling
#설치하고 난 후에 아래 코드를 실행
from pandas_profiling import ProfileReport
profile = ProfileReport(train, minimal=True).to_notebook_iframe()
|
cs |
'개발 관련자료 > ML, DL' 카테고리의 다른 글
Confision Matrix (0) | 2021.05.05 |
---|---|
Random Forests (0) | 2021.04.25 |
Ridge Regression (0) | 2021.04.24 |
Multiple Regression (0) | 2021.04.22 |
Simple Regression (0) | 2021.04.22 |