분류 문제의 개요
머신러닝 문제, 그 중 지도학습 문제중 하나인 분류 문제는 주어진 데이터가 어느 클래스에 속할 것인지를 예측해야 하는 문제이다. 이진 분류 문제일수도 있고 여러 개의 클래스로 분류할수도 있다.
분류 문제의 지표
분류 문제에서는, 얼마나 틀렸나? 를 확인하면 될 것이다. 즉 원하는 클래스가 아닌 다른 클래스로 배치되는 정도를 지표로 만들면 될 것이다. 이를 불순도 지표라고 한다.
불순도 지표에는 여러가지 예시가 있는데 대표적으로는 엔트로피, 지니불순도, 분류 오차가 있다.
엔트로피
만일 분류가 100% 정확하게 분류되어서, 엔트로피 값은 0이 되나, class가 2개의 샘플에 1 : 1로 동일하게 분포될 경우 엔트로피가 1의 값을 가지게 된다.
지니 불순도
잘못 분류될 확률을 최소화 시키기 위한 기준으로 여사건을 활용하는 방법이다.
만일 class가 2개의 샘플에 1 : 1로 동일하게 분포될 경우 지니 불순도가 0.5로 최대가 된다.
Decision Tree
scikit-learn의 Decision Tree는 스무고개와 비슷한 원리로, True/False를 바탕으로 데이터를 분류한다.
Iris data를 통해 결정트리의 예시를 확인해본다.
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
iris = load_iris()
X = iris['data']
y = iris['target']
decision_tree = DecisionTreeClassifier(random_state = 0,
max_depth=4,
criterion='gini')
decision_tree = decision_tree.fit(X,y)
한편으로, 트리의 결과를 시각화 하는 방법이 있다. graphiz 패키지를 통해 이를 할 수 있다.
import graphviz
dot_data = tree.export_graphviz(decision_tree, out_file=None,
feature_names = iris.feature_names,
filled = True,
class_names=iris.target_names)
graph = graphviz.Source(dot_data)
graph
Random Forest
랜덤 포레스트는, 머신러닝 앙상블 기법 중 하나인 Bagging에 속한다.
랜덤 포레스트에서는 여러개의 결정 트리가 생성된다. 각자의 방법으로 데이터를 sampling하여 독립적으로 학습한다. 각 분류기에서 나온 결과를 최종적으로 voting을 통해 데이터에 대한 예측을 수행한다.
여기서. Bagging을 사용한다는 것은 샘플을 나눠서 각 트리별로 별도로 학습을 시킨다는 것을 의미한다.
Example
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
forest = RandomForestClassifier(n_estimators = 100, # 트리의 개수
max_depth = 5, # 각 트리당 최대 깊이
criterion='gini') # 분류지표
forest.fit(X_train, y_train)
y_pred = forest.predict(X_test)
print(accuracy_score(y_test, y_pred))
'Archive > 데이터 분석 관련' 카테고리의 다른 글
[Data] UnderSampling, OverSampling (0) | 2021.07.31 |
---|---|
[Data] GridSearchCV (0) | 2021.06.14 |
[Data] 로지스틱 회귀분석 (0) | 2021.06.01 |
[Data] Scikit-learn을 통한 Pipeline 구축 (0) | 2021.06.01 |
[Data] p-value Revisited, p-hacking이란? (0) | 2021.05.27 |