NOTE
Decision Trees, Gini Impurity, Entrophy, Information Grain, Pipeline, feature importance
개념
high cardinality
pipeline
from sklearn.pipeline import make_pipeline
사이킷런에서 제공해준다. SimpleImputer
, OneHotEncoding
, StandarScaler
, modeling
등 다양한 작업을 훈련, 검증, 테스트 데이터에 해야하는데, 이 파이프라인 기능을 이용하면 코드 중복을 피하고 간결하게 작성할 수 있게 된다.pipe.named_steps
를 통해 각 스텝별로도 접근이 가능하다. 파이프라인 내의 특정 기능만을 뽑아오거나, coefficient등 특정 정보를 뽑기 위해서 활용하면 된다. pipe = make_pipeline(
OneHotEncoder(),
SimpleImputer(),
StandardScaler(),
LogisticRegression(n_jobs=-1) #참고로 n_jobs=-1은 내 컴퓨터 환경에서 가용한 리소스를 모두 사용하겠다는 뜻이라고 한다.
)
pipe.fit(X_train, y_train)
print('검증세트 정확도', pipe.score(X_val, y_val))
y_pred = pipe.predict(X_test)
standarscaler
도 해줄 필요가 없다. (로지스틱 회귀 모델에서는 특성 간의 관계를 가지고 분류를 하지만 결정트리모델은 한 노드에 하나의 피쳐! 기억!)DecisionTreeClassifier()
가 있어 모델 구축 자체는 어렵지 않다.min_samples_split, min_samples_leaf, max_depth
하이퍼 파라미터를 조절할 수 있다.feature_importances_
를 통해 중요도를 확인할 수 있다.실습 - 결정 트리 모델을 사용하여 위 캐글 대회에 참여하기!!
과정
train_test_split
함수의 파라미터 중 stratify
에 대해서 제대로 공부했다! 해당 파라미터는 지정한 클래스의 분포를 두 데이터로 나눌 때 유사하게 맞춰주는 역할을 한다. 분류 문제에서는 모델의 성능에 있어 매우 매우 중요한 파라미터라고 한다. 이걸 설정하지 않으면 데이터 불균형의 문제가 발생할 수 있으니 꼭 기억하자!duplicates()
에 대해서 제대로 공부했다. 해당 함수는 행의 중복 여부를 불린 형태로 반환하는데, 만약 1,3행이 같다면 3행을 True로 반환한다. keep
parameter를 통해 조절할 수도 있다. (첫 행을 제외하고 모두 True로 반환할지, 마지막 행을 제외하고 모두 True로 반환할지) train_data.T.duplicated()
이렇게 transpose해서는 행이 아닌 열(피쳐)간 중복되는 것이 있는지도 체크할 수 있으니 참고하자! X_train, y_train, X_val, y_val
)# Decision Tree 모델링
from sklearn.pipeline import make_pipeline
from category_encoders import OneHotEncoder
from sklearn.impute import SimpleImputer
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import f1_score
pipe = make_pipeline(
OneHotEncoder(use_cat_names = True),
SimpleImputer(), #default인 평균으로 대체
DecisionTreeClassifier(max_depth = 15) #max_depth는 줄이고 늘리며 f1_score 보고 임의로 조정해봄
)
pipe.fit(X_train, y_train) #학습
y_train_pred = pipe.predict(X_train)
y_val_pred = pipe.predict(X_val) #예측값 생성
f1_train = f1_score(y_train, y_train_pred)
f1_val = f1_score(y_val, y_val_pred) #예측값과 실제값의 비교를 통한 score 산출
f1_train, f1_val
트리모델은 부트캠프 하기 전부터 흥미롭게 봤던 건데 생각보다 개념이 어려워 당황했지만..! 다행히 파이썬에 기능이 잘 구현되어 있어서 모델 적용 자체는 괜찮았다. 오히려 EDA와 특성공학쪽이 훨씬 감을 잡기가 어려웠다. 파이썬에 기능있다고 원리 공부 소홀히할 생각 말고, 모델에 적용되는 원리에 대한 공부도 해야한다!!