분류 : 입력받은 데이터를 특정 카테고리 중 하나로 분류해내는 문제
예시) 환자의 나이, 병력, 혈당 등을 입력받아 암의 양성/음성을 판정하는 문제
Decision Tree 모델(의사결정트리)
- 직관적이면서도 간단하게 사용할 수 있어 분류 문제를 풀 때 가장 기본적으로 쓰이는 모델
- 의사 결정을 할, 즉 데이터를 분리할 어떤 경계를 찾아내어 데이터를 체에 거르듯 한 단계씩 분류해나가는 모델
- 데이터를 분리해나가는 모습이 나무를 뒤집어놓은 것과 같은 모양이기 때문
- 결정경계가 데이터 축에 수직이어서 특정 데이터에만 잘 작동할 수 있다는 문제가 있다.
```
# 의사결정 모델 ( decision tree )
# 1. 생성
from sklearn.tree import DecisionTreeClassifier
decision_tree = DecisionTreeClassifier(random_state=32)
print(decision_tree._estimator_type)
# 2. 학습
decision_tree.fit(X_train, y_train)
# 3. 예측
y_pred = decision_tree.predict(X_test)
# 4. 평가
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_test, y_pred)
accuracy
```
- Decision Tres 모델을 극복하기 위해 제안된 모델이 Random Forest이며, 여러 개의 Decision Tree를 합쳐서 만들어놓은 개념
- 각각의 의사 결정 트리를 만들기 위해 쓰이는 특성들을 랜덤으로 선택한다.
- 이러한 기법을 앙상블(Ensemble) 기법이라고 합니다. 단일 모델을 여러 개 사용하는 방법을 취함으로써 모델 한 개만 사용할 때의 단점을 집단지성으로 극복하는 개념
from sklearn.ensemble import RandomForestClassifier
X_train, X_test, y_train, y_test = train_test_split(iris_data, iris_label, test_size=0.2, random_state=21)
random_forest = RandomForestClassifier(random_state=32)
random_forest.fit(X_train, y_train)
y_pred = random_forest.predict(X_test)
print(classification_report(y_test, y_pred))
- Support Vector Machine(SVM)은 원 훈련(또는 학습)데이터를 비선형 매핑(Mapping)을 통해 고차원으로 변환한다. 이 새로운 차원에서 초평면(hyperplane)을 최적으로 분리하는 선형분리를 찾는다. 즉, 최적의 Decision Boundary(의사결정 영역)를 찾는다.
그렇다면 왜 데이터를 고차원으로 보내는 것일까? 예를 들어, 아래의 [그림1]과 같이 A=[a, d], B=[b, c]는 2차원에서 non-linearly separable(비선형 분리)하다. 이를 통해 한 차원 높은 3차원으로 Mapping하게 되면 linearly separable(선형 분리)하게 된다. 따라서, 충분히 큰 차원으로 적절한 비선형 매핑을 이요하면, 두 개의 클래스를 가진 데이터는 초평면(hyperplane)에서 항상 분리될 수 있다.- SVM은 복잡한 비선형 의사결정 영역을 모형화 할 수 있기 때문에 매우 정확하며, 다른 모델들 보다 Over Fitting되는 경향이 적다.
출처: https://excelsior-cjh.tistory.com/66?category=918734
from sklearn import svm
svm_model = svm.SVC()
print(svm_model._estimator_type)
svm_model.fit(X_train, y_train)
y_pred = svm_model.predict(X_test)
print(classification_report(y_test, y_pred))
- 다음 글을 읽고 Stochastic Gradient Descent Classifier에 대해 알아봅시다.
사이킷런 공식문서-Stochastic Gradient Descent Classifier
SGD Classifier 모델은 다음과 같이 사용합니다.
from sklearn.linear_model import SGDClassifier
sgd_model = SGDClassifier()
print(sgd_model._estimator_type)
sgd_model.fit(X_train, y_train)
y_pred = sgd_model.predict(X_test)
print(classification_report(y_test, y_pred))
- 다음 글을 읽고 Logistic Regression 모델에 대해 알아봅시다.
로지스틱회귀(Logistic Regression) 쉽게 이해하기
Logistic Regression 모델은 다음과 같이 사용합니다.
from sklearn.linear_model import LogisticRegression
logistic_model = LogisticRegression()
print(logistic_model._estimator_type)
logistic_model.fit(X_train, y_train)
y_pred = logistic_model.predict(X_test)
print(classification_report(y_test, y_pred))
회귀 : 입력받은 데이터에 따라 특정 필드의 수치를 맞추는 문제
예시) 택시를 탄 시각, 내린 시각, 출발지, 도착지, 거리 등을 입력받아 택시 요금을 맞추는 문제
클러스터링(clustering), 군집화 : 그렇게 명확한 분류 기준이 없는 상황에서도 데이터들을 분석하여 가까운(또는 유사한) 것들끼리 묶어 주는 작업
차원 축소