데이터분석

분류분석

장수우 2024. 11. 9. 00:44

분류 분석의 주요 목적

  • 예측: 주어진 데이터를 통해 새로운 데이터가 속할 범주를 예측하는 것.(연속형 속성)
  • 분류 : 범주형 속성
  • 패턴 인식: 특정 클래스에 속하는 데이터의 특징을 식별하고, 분류 규칙을 이해하는 것.
  • 의사결정 지원: 고객 분류, 질병 진단, 사기 탐지 등의 비즈니스 의사결정에 활용.
  • 선형회귀 분석
    • 종속 변수 : 연속형 변수
    • 계수 추정법 : 최소제곱법
    • 모형 검정 : F-검정, t-검정
  • 로지스틱 회귀분석
    • 종속 변수 : 0, 1
    • 계수 추정법 : 최대우도추정법
    • 모형 검정 : 카이제곱 검정

1.  로지스틱 회귀 (Logistic Regression)

로지스틱 회귀는 이진 분류 문제에서 많이 사용되는 방법으로, 종속 변수가 특정 범주에 속할 확률을 예측합니다.
데이터가 선형적으로 분리 가능한 경우에 적합합니다.

from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 데이터 로드 및 분할
iris = load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 로지스틱 회귀 모델 학습 및 평가
model = LogisticRegression(max_iter=200, solver='liblinear')
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print("로지스틱 회귀 정확도:", accuracy_score(y_test, y_pred))

조정 가능한 매개변수

  • max_iter:
    모델 학습을 위한 최대 반복 횟수를 설정합니다.
    복잡한 데이터수렴이 어려운 경우에는 값을 더 크게 설정할 수 있습니다.
  • solver:
    최적화 알고리즘을 설정합니다. 데이터 특성에 따라 다른 solver('lbfgs', 'liblinear', 'sag', 'saga')가 더 좋은
    성능을 보일 수 있습니다. 예를 들어, 'liblinear'는 작은 데이터셋에 적합하고, 'saga'는 큰 데이터셋에 적합합니다.
  • penalty:
    과적합을 방지하기 위해 가중치 규제를 설정할 수 있습니다. l1, l2, elasticnet, none 중 선택 가능하며,
    l1은 특성 선택에도 도움이 됩니다.

 

장점:

  • 구현이 간단하고 해석이 용이.
  • 확률 기반 예측이 가능.

단점:

  • 데이터가 선형적이지 않으면 성능이 떨어짐.
  • 다중 클래스 분류 시 확장성이 제한적.

2. 의사결정 트리 (Decision Tree)

의사결정 트리는 데이터의 특징에 따라 트리 구조를 사용하여 분류 규칙을 만들고 예측을 수행합니다.
트리 노드는 특징을 기준으로 데이터가 분리되는 조건을 나타내고, 잎 노드는 최종 분류를 나타냅니다.

from sklearn.tree import DecisionTreeClassifier

# 의사결정 트리 모델 학습 및 평가
model = DecisionTreeClassifier(max_depth=5, criterion='entropy', min_samples_split=4)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print("의사결정 트리 정확도:", accuracy_score(y_test, y_pred))

조정 가능한 매개변수

  • max_depth:
    트리의 최대 깊이를 제한하여 과적합을 방지합니다. 깊이가 깊을수록 모델이 복잡해지고 과적합 위험이 커집니다.
  • criterion:
    분할 기준으로 'gini'와 'entropy'가 있으며, 데이터의 특성에 따라 성능 차이가 날 수 있습니다.
  • min_samples_split:
    노드를 분할할 때 필요한 최소 샘플 수로, 값이 커질수록 트리 분할이 제한됩니다.
    이를 통해 노이즈나 과적합을 줄일 수 있습니다.
  • min_samples_leaf:
    리프 노드의 최소 샘플 수로, 값이 클수록 모델이 간단해지고 과적합이 줄어듭니다.

장점:

  • 해석이 쉽고 시각화 가능.
  • 비선형 데이터에도 적합.
  • 대용량 데이터도 빠르게 만들 수 있다.
  • 한 변수와 상관성이 높은 다른 불필요한 변수가 있어도 크게 영향 받지 않는다.
  • 모형 분류 정확도가 높다.

단점:

  • 과적합 위험이 있음.
  • 작은 데이터 변화에도 민감하게 반응할 수 있음
  • 분류 경계선 부근의 자료값에 대해 오차가 크다
  • 설명번수 간의 중요도를 판단하기 쉽지않다.

3. 랜덤 포레스트 (Random Forest)

랜덤 포레스트는 여러 개의 의사결정 트리를 무작위로 학습하여, 각 트리의 예측을 종합하여 최종 예측을 만듭니다.
배깅(Bagging) 기법을 사용하여 안정적이고 강력한 성능을 보입니다.

from sklearn.ensemble import RandomForestClassifier

# 랜덤 포레스트 모델 학습 및 평가
model = RandomForestClassifier(n_estimators=200, max_depth=10, max_features='sqrt', random_state=42)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print("랜덤 포레스트 정확도:", accuracy_score(y_test, y_pred))

조정 가능한 매개변수

  • n_estimators:
    트리의 개수를 조정합니다. 트리가 많을수록 모델이 복잡해지며,
    성능이 개선될 수 있지만 학습 속도와 메모리 사용량이 증가합니다.
  • max_depth:
    개별 트리의 최대 깊이를 제한하여 모델이 과적합되지 않도록 할 수 있습니다.
  • max_features:
    각 트리가 사용할 최대 특성 수를 조정할 수 있습니다.
    'sqrt'는 전체 특성의 제곱근만큼을 사용하도록 하여 계산 효율성을 높입니다.
  • min_samples_split:
    트리 노드 분할을 위한 최소 샘플 수로, 과적합을 방지하는 데 유용합니다.

장점:

  • 과적합에 강하고 높은 성능.
  • 변수 중요도를 계산하여 해석 가능.

단점:

  • 학습 속도가 느릴 수 있음.
  • 너무 많은 트리를 사용하면 메모리 사용량 증가.

4. k-최근접 이웃 (k-Nearest Neighbors, k-NN)

k-NN새로운 데이터 포인트가 속할 클래스를 주변 가장 가까운 k개의 이웃의 클래스를 기반으로 예측합니다.
거리 기반 방법이기 때문에 데이터의 분포특성이 예측에 큰 영향을 미칩니다.

from sklearn.neighbors import KNeighborsClassifier

# k-NN 모델 학습 및 평가
model = KNeighborsClassifier(n_neighbors=5, weights='distance', metric='minkowski', p=2)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print("k-NN 정확도:", accuracy_score(y_test, y_pred))

조정 가능한 매개변수

  • n_neighbors:
    가장 가까운 이웃의 수를 결정합니다. 일반적으로 작은 값은 과적합을, 큰 값은 과소적합을 유발할 수 있습니다.
  • weights:
    각 이웃의 가중치를 설정합니다. uniform(모든 이웃에 동일 가중치), distance(가까운 이웃에 더 높은 가중치)가 존재.
  • metric:
    거리를 측정하는 기준으로, 기본값은 minkowski 거리입니다. minkowski의 경우,
    p 매개변수를 통해 거리 계산 방식을 변경할 수 있습니다.
  • p:
    metric='minkowski'일 때 거리 계산에 사용하는 지수를 설정합니다. p=2는 유클리드 거리, p=1은 맨해튼 거리입니다.

장점:

  • 단순하고 구현이 쉬움.
  • 비선형 데이터에도 유연하게 대응 가능.

단점:

  • 데이터가 많거나 차원이 높으면 계산 비용이 높음.
  • 데이터에 노이즈가 많으면 성능이 저하될 수 있음.

5. 서포트 벡터 머신 (Support Vector Machine, SVM)

SVM최적의 초평면을 찾아 데이터를 분류합니다.
주로 고차원 데이터복잡한 경계가 있는 데이터에 적합하며,
데이터가 선형적으로 구분되지 않는 경우에도 커널 기법을 사용해 잘 분류할 수 있습니다.

from sklearn.svm import SVC

# SVM 모델 학습 및 평가
model = SVC(kernel='rbf', C=1.0, gamma='scale')
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print("SVM 정확도:", accuracy_score(y_test, y_pred))

조정 가능한 매개변수

  • kernel:
    커널 함수로, 데이터의 특성에 따라 'linear', 'poly', 'rbf', 'sigmoid' 중 선택 가능합니다.
    'linear'는 선형 분리, 'rbf'는 비선형 분리에 적합합니다.
  • C:
    정규화 파라미터로, 큰 값은 과적합을 유발할 수 있습니다.
    C 값이 클수록 모델이 데이터에 더 잘 맞추려 하므로, 과적합 가능성이 있습니다.
  • gamma:
    rbf, poly, sigmoid 커널에 적용되는 매개변수로, 값이 크면 과적합 위험이 있고, 작으면 과소적합될 수 있습니다. 'scale'은 데이터의 특성을 반영한 기본값입니다.

장점:

  • 복잡한 데이터 구조도 분류 가능.
  • 고차원 데이터에서도 강력한 성능.

단점:

  • 데이터셋 크기가 커지면 학습 시간이 오래 걸림.
  • 매개변수 조정이 까다로움.

분류 분석에서는 교차 검증을 통해 여러 조합을 실험하여 최적의 하이퍼파라미터를 찾는 것이 중요합니다.
예를 들어, 랜덤 포레스트의 n_estimators와 max_depth 조합을 테스트할 수 있습니다.

from sklearn.model_selection import GridSearchCV

# 랜덤 포레스트의 파라미터 조정
param_grid = {
    'n_estimators': [100, 200],
    'max_depth': [10, 20, None],
    'max_features': ['auto', 'sqrt']
}

grid_search = GridSearchCV(RandomForestClassifier(random_state=42), param_grid, cv=5)
grid_search.fit(X_train, y_train)

# 최적의 파라미터와 점수 출력
print("Best Parameters:", grid_search.best_params_)
print("Best Score:", grid_search.best_score_)

6. 나이브 베이즈 분류 (Naive Bayes Classifier)

나이브 베이즈 분류는 조건부 확률을 기반으로 한 분류 기법입니다.
각 특성이 독립적이라고 가정하는 “나이브”한 가정 하에 베이즈 정리를 사용하여 분류합니다.

장점

  • 빠르고 효율적: 계산이 간단하고 학습 및 예측 속도가 빠릅니다.
  • 텍스트 분류에 유용: 예를 들어, 스팸 필터링에서 좋은 성능을 보입니다.
  • 적은 데이터에도 효과적: 적은 데이터로도 신뢰성 있는 결과를 도출할 수 있습니다.

단점

  • 독립성 가정의 한계: 각 특성이 독립적이라고 가정하므로, 특성 간 상호작용이 중요한 경우에는 성능이 떨어집니다.
  • 복잡한 데이터에 한계: 연속형 변수나 다차원적 데이터에서는 성능이 떨어지는 경우가 많습니다.

주 사용 사례

  • 스팸 이메일 탐지: 스팸과 정상 이메일을 텍스트 기반으로 분류하는 데 사용됩니다.
  • 문서 분류: 뉴스 기사나 리뷰 등 텍스트를 기반으로 한 분류 작업에서 자주 사용됩니다.

7. 인공신경망 (Artificial Neural Network, ANN)

인공신경망(ANN)은 인간의 뇌 신경망을 모방한 구조로, 다층 신경망을 통해 복잡한 패턴을 학습합니다.
주로 이미지 분류자연어 처리 등에서 높은 성능을 발휘합니다.

장점

  • 복잡한 패턴 학습 가능: 비선형적이고 고차원적 데이터에서 탁월한 성능을 보입니다.
  • 다양한 문제에 적용 가능: 이미지, 음성, 텍스트 등 다양한 종류의 데이터에 적합합니다.

단점

  • 높은 계산 비용: 학습에 많은 시간과 리소스가 필요합니다.
  • 해석의 어려움: “블랙박스” 모델로, 모델의 예측 과정을 해석하기 어렵습니다.
  • 과적합 위험: 데이터 양이 충분하지 않으면 과적합이 발생하기 쉽습니다.

주 사용 사례

  • 이미지 분류: 예를 들어, 손글씨 숫자 인식(MNIST)이나 얼굴 인식에서 사용됩니다.
  • 자연어 처리: 문장 생성, 기계 번역, 감정 분석 등에서 자주 사용됩니다.

8. 규칙기반 분류 (Rule-Based Classification)

규칙기반 분류는 데이터에서 도출된 규칙을 사용하여 특정 조건에 따라 데이터를 분류하는 방법입니다.
일반적으로 명확한 규칙이 존재하는 문제에 적합합니다.

장점

  • 해석이 용이: 규칙이 명확하여 모델의 예측 이유를 이해하기 쉽습니다.
  • 특정 규칙 기반 문제에 강점: 규칙이 잘 정의된 문제에 효과적입니다.

단점

  • 복잡한 문제에 적용 어려움: 규칙을 정의하기 어려운 데이터(예: 이미지, 텍스트)에는 부적합합니다.
  • 확장성의 한계: 데이터가 복잡해질수록 규칙 수가 늘어나며, 유지 및 관리가 어려워질 수 있습니다.

주 사용 사례

  • 신용 평가: 특정 조건에 따라 신용 위험을 평가하는 데 사용됩니다.
  • 의료 진단: 특정 증상이나 검사 결과에 따라 진단을 내리는 데 적용될 수 있습니다.

9. 사례기반 추론 (Case-Based Reasoning, CBR)

사례기반 추론(CBR)은 과거에 저장된 사례를 사용하여 현재 문제와 유사한 문제의 해결책을 찾는 방법입니다.
새로운 사례와 유사한 사례를 비교하여 분류합니다.

장점

  • 적응성: 새로운 데이터를 추가하면 사례기반으로 계속해서 학습할 수 있습니다.
  • 설명 가능성: 과거의 사례를 기반으로 유사도를 평가하므로, 왜 그 결과가 나왔는지 설명하기 쉽습니다.

단점

  • 데이터 저장 및 검색 비용: 사례가 많아질수록 저장 및 검색 비용이 증가합니다.
  • 데이터가 많이 필요함: 사례 기반이므로, 충분한 데이터가 있어야만 효과적입니다.

주 사용 사례

  • 고장 진단: 과거에 발생한 고장 사례를 기반으로 현재 고장의 원인을 추론.
  • 의료 진단 지원: 비슷한 증상을 가진 환자의 과거 진단 및 치료 기록을 참고하여 진단을 내리는 데 활용.
반응형

'데이터분석' 카테고리의 다른 글

군집 분석  (1) 2024.11.10
앙상블 기법  (1) 2024.11.10
오분류 추정 및 확인  (0) 2024.11.09
데이터 분할 시 양이 충분하지 않은 경우  (1) 2024.11.08
비모수 검정법  (0) 2024.11.06