✅ 분류 (Classification)
데이터가 어느 범주(클래스)에 속하는지 예측
ex) 스팸 메일 분류(스팸/정상), 질병 여부(양성/음성), 제조 공정 품질(불량/정상) 등…
- 분류 모델 사용 이유 : 이진 분류(양성/음성, 합격/불합격/ 정상/불량 등)는 직관적
❓ 지도학습
- 입력 데이터(Feature 특징)와 정답(Label)이 주어졌을 때, 모델이 정답을 예측하도록 학습하는 방식
- 회귀 - 연속값 예측
- 분류 - 범주 예측
🔸 로지스틱 회귀 (Logistic Regression)

- 선형 회귀처럼 입력값의 선형 결합을 취하지만, 결과를 0~1 사이의 확률로 변환하기 위해 로지스틱 함수(시그모이드 함수)를 사용
- 장점
- 계산이 빠르고 구현이 간단
- 결과 해석이 용이 (회귀 계수로 각 변수의 영향도 해석 가능)
- 단점
- 복잡한 비선형 패턴을 학습하기엔 한계가 있음
🔎 로지스틱 회귀 코드
📌 LogisticRegression()
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, classification_report
# 1. 데이터 로드
iris = load_iris()
X = iris.data # 특징(feature) 데이터
y = iris.target # 타깃(target) 데이터
# 2. 데이터 분할 (train : test = 8 : 2)
# stratify=y : 클래스 비율을 train, test가 유사하게끔 맞춤
X_train, X_test, y_train, y_test = train_test_split(X, y,
test_size=0.2,
random_state=42,
stratify=y)
# 3. Logistic Regression
logistic_model = LogisticRegression(max_iter=200)
logistic_model.fit(X_train, y_train)
# 4. 예측
y_pred_logistic = logistic_model.predict(X_test)
# 5. 성능 평가
print("=== Logistic Regression ===")
print("Accuracy:", accuracy_score(y_test, y_pred_logistic))
print(classification_report(y_test, y_pred_logistic, target_names=iris.target_names))
- LogisticRegression()
- 학습 데이터(X_train, y_train)를 이용해 로지스틱 회귀 모델을 학습
- max_iter(최대 반복 횟수)를 기본값(100)에서 조금 늘려 200으로 설정
- accuracy_score로 정확도(Accuracy) 계산
- classification_report로 클래스별 정밀도(precision), 재현율(recall), F1 점수, 지원된 샘플 수(support) 등을 확인
- target_names=iris.target_names를 통해 각 클래스의 이름(‘setosa’, ‘versicolor’, ‘virginica’)으로 보고서를 보기 쉽게 표시
🔸 SVM (Support Vector Machine)
데이터를 가장 잘(안전 여유공간을 크게) 구분하는 경계를 찾는 알고리즘
ex) 두 부류(ex: 고양이 vs 개)를 잘 구분해주는 경계를 찾는데, 두 부류가 최대한 멀리 떨어지도록(안전 여유공간이 넓도록) 찾는 방식
- 장점
- 차원이 높은 데이터에서도 좋은 성능을 보일 수 있음
- 결정 경계를 명확하게 찾는 경우, 예측 성능이 우수함
- 결정경계란? → SVM이 찾은 최적의 분류선(또는 초평면)
- ex) 한쪽 편을 '고양이'로, 다른 한편을 '개'로 구분해주는 기준선
- 단점
- 파라미터(C, 커널 종류 등)를 적절히 찾아야 하므로 튜닝 비용이 큼
- 대규모 데이터 세트에 대해서는 학습 속도가 느릴 수 있음
🔎 SVM 코드
📌 SVC()
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, classification_report
# 1. 데이터 로드
iris = load_iris()
X = iris.data # 특징(feature) 데이터
y = iris.target # 타깃(target) 데이터
print(X.shape)
print(y.shape)
# 2. 데이터 분할 (train : test = 8 : 2)
X_train, X_test, y_train, y_test = train_test_split(X, y,
test_size=0.2,
random_state=42,
stratify=y)
# 3. SVM(Support Vector Machine)
# C, gamma 등의 하이퍼파라미터를 설정해서 더 최적화할 수도 있습니다.
svm_model = SVC()
svm_model.fit(X_train, y_train)
# 4. 예측
y_pred_svm = svm_model.predict(X_test)
# 5. 성능 평가
# Accuracy(정확도)와 정밀 평가(classification_report)를 이용해 비교해봅니다.
print("=== SVM ===")
print("Accuracy:", accuracy_score(y_test, y_pred_svm))
print(classification_report(y_test, y_pred_svm, target_names=iris.target_names))
- SVM
- SVC()는 기본적으로 커널(kernel)을 ‘rbf’로 사용
- 다른 하이퍼파라미터(C, gamma 등)를 조정해서 성능 개선을 시도할 수 있음
- accuracy_score로 정확도(Accuracy) 계산
- classification_report로 클래스별 정밀도(precision), 재현율(recall), F1 점수, 지원된 샘플 수(support) 등을 확인
- target_names=iris.target_names를 통해 각 클래스의 이름(‘setosa’, ‘versicolor’, ‘virginica’)으로 보고서를 보기 쉽게 표시
'Sparta > Theory' 카테고리의 다른 글
| [251002] 통계검정 실습 01 - t-test (0) | 2025.10.02 |
|---|---|
| [250930] 머신러닝 03 - 회귀 (0) | 2025.09.30 |
| [250929] 머신러닝 02 (0) | 2025.09.29 |
| [250929] 머신러닝 01 (0) | 2025.09.29 |
| [250925] 스파르타코딩 본캠프 38일차 (0) | 2025.09.25 |