SVM(Support Vector Machine)은 분류 작업에 특히 효과적인 지도형 기계 학습 알고리즘의 강력하고 다양한 클래스입니다. Python의 scikit-learn과 같은 라이브러리는 SVM의 강력한 구현을 제공하므로 실무자와 연구원 모두가 액세스할 수 있습니다. 이 응답에서는 scikit-learn을 사용하여 SVM 분류를 구현하는 방법을 설명하고 관련 주요 기능을 자세히 설명하며 예시를 제공합니다.
SVM 소개
서포트 벡터 머신(Support Vector Machine)은 데이터를 여러 클래스로 가장 잘 분리하는 초평면을 찾는 방식으로 작동합니다. 2차원 공간에서 이 초평면은 단순히 선이지만, 더 높은 차원에서는 평면 또는 초평면이 됩니다. 최적의 초평면은 두 클래스 사이의 마진을 최대화하는 초평면입니다. 여기서 마진은 초평면과 각 클래스의 가장 가까운 데이터 점(서포트 벡터라고 함) 사이의 거리로 정의됩니다.
Scikit-learn 및 SVM
Scikit-learn은 데이터 마이닝 및 데이터 분석을 위한 간단하고 효율적인 도구를 제공하는 기계 학습을 위한 강력한 Python 라이브러리입니다. NumPy, SciPy 및 matplotlib를 기반으로 구축되었습니다. scikit-learn 내의 `svm` 모듈은 SVM 알고리즘의 구현을 제공합니다.
주요 기능
1. `svm.SVC`: SVM을 이용하여 분류를 수행하기 위한 메인 클래스이다. SVC는 지원 벡터 분류를 나타냅니다.
2. `적합`: 이 방법은 주어진 데이터에 대한 모델을 훈련하는 데 사용됩니다.
3. `예측하다`: 모델이 훈련되면 이 방법을 사용하여 주어진 테스트 데이터에 대한 클래스 레이블을 예측합니다.
4. `점수`: 이 방법은 테스트 데이터에 대한 모델의 정확도를 평가하는 데 사용됩니다.
5. `그리드서치CV`: SVM 모델에 가장 적합한 매개변수를 찾기 위한 하이퍼파라미터 튜닝에 사용됩니다.
scikit-learn을 사용하여 SVM 분류 구현
scikit-learn을 사용하여 SVM 분류를 구현하는 데 필요한 단계를 고려해 보겠습니다.
1단계: 라이브러리 가져오기
먼저 필요한 라이브러리를 가져옵니다.
python import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.svm import SVC from sklearn.metrics import classification_report, confusion_matrix
2단계: 데이터 세트 로드
데모 목적으로 기계 학습 커뮤니티에서 잘 알려진 데이터 세트인 Iris 데이터 세트를 사용합니다.
python # Load the Iris dataset iris = datasets.load_iris() X = iris.data y = iris.target
3단계: 데이터 세트 분할
데이터 세트를 훈련 세트와 테스트 세트로 분할합니다.
python # Split the data into training and testing sets X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
4단계: 특성 크기 조정
SVM의 경우 입력 기능의 크기에 민감하므로 기능 크기 조정이 중요합니다.
python # Standardize features by removing the mean and scaling to unit variance scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test)
5단계: SVM 모델 훈련
SVM 분류기를 인스턴스화하고 훈련 데이터에 대해 훈련시킵니다.
python # Create an instance of SVC and fit the data svc = SVC(kernel='linear', C=1.0) svc.fit(X_train, y_train)
여기서는 선형 커널을 사용하고 정규화 매개변수 'C'를 1.0으로 설정했습니다. 커널 매개변수는 데이터를 분리하는 데 사용되는 초평면 유형을 지정합니다. 일반적인 커널에는 '선형', '폴리'(다항식), 'rbf'(방사형 기저 함수) 및 '시그모이드'가 포함됩니다.
6단계: 예측하기
학습된 모델을 사용하여 테스트 데이터에 대해 예측합니다.
python # Predict the class labels for the test set y_pred = svc.predict(X_test)
7단계: 모델 평가
혼동 행렬 및 분류 보고서와 같은 측정항목을 사용하여 모델 성능을 평가합니다.
python # Evaluate the model print(confusion_matrix(y_test, y_pred)) print(classification_report(y_test, y_pred))
혼동 행렬은 예측 결과에 대한 요약을 제공하고 분류 보고서에는 정밀도, 재현율, F1 점수 및 각 클래스에 대한 지원이 포함됩니다.
GridSearchCV를 사용한 초매개변수 조정
SVM 모델의 성능을 최적화하려면 하이퍼파라미터 튜닝이 필수적입니다. Scikit-learn의 `GridSearchCV`를 사용하여 지정된 매개변수 그리드에 대해 철저한 검색을 수행할 수 있습니다.
python from sklearn.model_selection import GridSearchCV # Define the parameter grid param_grid = { 'C': [0.1, 1, 10, 100], 'gamma': [1, 0.1, 0.01, 0.001], 'kernel': ['rbf'] } # Create a GridSearchCV instance grid = GridSearchCV(SVC(), param_grid, refit=True, verbose=2) grid.fit(X_train, y_train) # Print the best parameters and the corresponding score print("Best parameters found: ", grid.best_params_) print("Best score: ", grid.best_score_) # Use the best estimator to make predictions grid_predictions = grid.predict(X_test) # Evaluate the model with the best parameters print(confusion_matrix(y_test, grid_predictions)) print(classification_report(y_test, grid_predictions))
이 예에서는 RBF 커널을 사용하여 'C' 및 'gamma' 값 그리드를 검색했습니다. `GridSearchCV` 인스턴스는 검색 중에 찾은 최상의 매개변수로 모델을 다시 맞춥니다.
결정 경계 시각화
SVM 분류기가 작동하는 방식을 더 잘 이해하려면 결정 경계를 시각화하는 것이 유용한 경우가 많습니다. 이는 2차원 특징 공간에서 더 간단합니다. 다음은 합성 데이터 세트를 사용하는 예입니다.
python from sklearn.datasets import make_blobs # Generate a synthetic dataset X, y = make_blobs(n_samples=100, centers=2, random_state=6) # Fit the SVM model svc = SVC(kernel='linear', C=1.0) svc.fit(X, y) # Create a mesh to plot the decision boundary h = .02 x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1 y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1 xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h)) # Predict the class for each point in the mesh Z = svc.predict(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) # Plot the decision boundary plt.contourf(xx, yy, Z, alpha=0.8) plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', marker='o') plt.xlabel('Feature 1') plt.ylabel('Feature 2') plt.title('SVM Decision Boundary') plt.show()
위의 코드는 두 개의 클래스가 있는 합성 데이터 세트를 생성하고 선형 커널로 SVM 모델을 맞추고 결정 경계를 시각화합니다. 'contourf' 함수는 결정 경계를 그리는 데 사용되며 산점도는 데이터 포인트를 보여줍니다. Scikit-learn은 Python에서 SVM 분류를 구현하기 위한 포괄적이고 사용자 친화적인 인터페이스를 제공합니다. 'svm.SVC', 'fit', 'predict', 'score'와 같은 핵심 기능은 SVM 모델을 구축하고 평가하는 데 필수적입니다. 'GridSearchCV'를 사용한 하이퍼파라미터 튜닝은 최적의 매개변수를 찾아 모델 성능을 더욱 향상시킵니다. 결정 경계를 시각화하면 분류자의 동작에 대한 귀중한 통찰력을 얻을 수 있습니다. 이러한 단계를 수행하면 scikit-learn을 사용하여 SVM 분류를 효과적으로 구현하고 최적화할 수 있습니다.
기타 최근 질문 및 답변 Python을 사용한 EITC/AI/MLP 머신 러닝:
- 선형 회귀 분석에서 b 매개변수(가장 적합한 선의 y절편)는 어떻게 계산되나요?
- SVM의 결정 경계를 정의하는 데 서포트 벡터는 어떤 역할을 하며 훈련 과정에서 어떻게 식별됩니까?
- SVM 최적화의 맥락에서 가중치 벡터 'w'와 편향 'b'의 중요성은 무엇이며 어떻게 결정됩니까?
- SVM 구현에서 `visualize` 방법의 목적은 무엇이며 모델 성능을 이해하는 데 어떻게 도움이 됩니까?
- SVM 구현의 '예측' 방법은 새로운 데이터 포인트의 분류를 어떻게 결정합니까?
- 기계 학습의 맥락에서 SVM(Support Vector Machine)의 주요 목표는 무엇입니까?
- SVM 최적화에서 제약조건(y_i (mathbf{x}_i cdot mathbf{w} + b) geq 1)의 중요성을 설명하세요.
- SVM 최적화 문제의 목적은 무엇이며 수학적으로 어떻게 공식화됩니까?
- SVM에서 기능 세트의 분류는 결정 함수의 부호(text{sign}(mathbf{x}_i cdot mathbf{w} + b))에 따라 어떻게 달라지나요?
- SVM(Support Vector Machine)의 맥락에서 초평면 방정식(mathbf{x} cdot mathbf{w} + b = 0)의 역할은 무엇입니까?
Python을 사용한 EITC/AI/MLP 기계 학습에서 더 많은 질문과 답변 보기
더 많은 질문과 답변:
- 들: 인공지능
- 프로그램 : Python을 사용한 EITC/AI/MLP 머신 러닝 (인증 프로그램으로 이동)
- 교훈: 서포트 벡터 머신 (관련 강의 바로가기)
- 주제 : 벡터 머신 최적화 지원 (관련 항목으로 이동)
- 심사 검토