Q . Cardinality의 뜻은?
A . 특정 데이터 집합의 유니크( Unique )한 값의 개수이다. 범주형 데이터에서 많은 범주를 가지는 카테고리 특성들이 있는지 확인한다.
train.describe(exclude='number').T.sort_values(by='unique')
Q . Pipeline이란?
A . 데이터 사전 처리 및 분류의 모든 단계를 포함하는 단일 개체를 만든다.
- 여러 ML 모델을 같은 전처리 프로세스에 연결시킬 수 있다.
- 그리드서치(grid search)를 통해 여러 하이퍼파라미터를 쉽게 연결할 수 있다.
from sklearn.pipeline import make_pipeline
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)
import matplotlib.pyplot as plt
model_lr = pipe.named_steps['logisticregression']
enc = pipe.named_steps['onehotencoder']
encoded_columns = enc.transform(X_val).columns
coefficients = pd.Series(model_lr.coef_[0], encoded_columns)
plt.figure(figsize=(10,30))
coefficients.sort_values().plot.barh();
Q . Decision Tree( 결정트리 )란 ?
A . 스무고개를 하는 것과 같이 특성들의 수치를 가지고 질문을 통해 정답 클래스를 찾아가는 과정이다.
- 결정트리(의사결정나무) 모델은 특성들을 기준으로 샘플을 분류해 나가는데 그 형태가 나무의 가지가 뻗어나가는 모습과 비슷해서 결정트리라는 이름을 가지고 있다.
* 지니불순도( Gini Impurity or Gini Index ) :
* 엔트로피( Entropy ) :
Q . 불순도( Impurity )란?
A . 여러 범주가 섞여 있는 정도를 말한다.
ex)
1. A : B = 45% : 55%
2. A : B = 80% : 20%
라고 했을 때, 2번이 불순도가 더 낮다.
불순도가 낮은경우 지니불순도나 엔트로피는 낮은값을 가지게 됩니다. 결국 노드를 분할하는 시점에서 가장 비용함수를 줄이는 분할특성과 분할지점을 찾아 내는 프로세스가 필요하다.
분할에 사용할 특성이나 분할지점( 값 )은 타겟변수를 가장 잘 구별해 주는( 불순도의 감소가 최대가 되는, 정보획득이 가장 큰 )것을 선택한다.
정보획득( Information Gain )은 특정한 특성을 사용해 분할했을 때 엔트로피의 감소량을 뜻한다.
from sklearn.tree import DecisionTreeClassifier
pipe = make_pipeline(
OneHotEncoder(use_cat_names=True),
SimpleImputer(),
DecisionTreeClassifier(random_state=1, criterion='entropy')
)
pipe.fit(X_train, y_train)
print('훈련 정확도: ', pipe.score(X_train, y_train))
print('검증 정확도: ', pipe.score(X_val, y_val))
# graphviz 설치방법: conda install -c conda-forge python-graphviz
import graphviz
from sklearn.tree import export_graphviz
model_dt = pipe.named_steps['decisiontreeclassifier']
enc = pipe.named_steps['onehotencoder']
encoded_columns = enc.transform(X_val).columns
dot_data = export_graphviz(model_dt
, max_depth=3
, feature_names=encoded_columns
, class_names=['no', 'yes']
, filled=True
, proportion=True)
display(graphviz.Source(dot_data))
Q . 표준화 과정은 필요없는 이유는 ?
A . 스케일에 구애받지 않기에 표준화를 하는건 의미가 없다.
Q . 트리모델이 과접합이 되기 쉬울까?
A . 복잡한 트리는 과적합 가능성을 높이기 때문에 복잡도를 낮추어 일반화를 유도한다.
min_samples_split
min_samples_leaf
: 말단 노드에 최소한 존재해야 하는 샘플들의 수를 정해준다.max_depth
# decisiontreeclassifier의 step에 접근한다.
model_dt = pipe.named_steps['decisiontreeclassifier']
# importances를 시각화
importances = pd.Series(model_dt.feature_importances_, encoded_columns)
plt.figure(figsize=(10,30))
importances.sort_values().plot.barh();
Q . 특성상호작용( feature interaction )이란?
A . 특성상호작용은 특성들끼리 서로 상호작용을 하는 경우를 말한다. 회귀분석에서는 서로 상호작용이 높은 특성들이 있으면 개별 계수를 해석하는데 어려움이 있고 학습이 올바르게 되지 않을 수 있다. 하지만, 트리모델은 이런 상호작용을 자동으로 걸러내는 특징이 있다.