k-Nearest Neighbors(k-NN) 분류는 특징 공간에서 가장 가까운 이웃의 클래스를 기반으로 데이터 포인트를 분류하기 위해 기계 학습에 사용되는 비모수적 인스턴스 기반 학습 알고리즘입니다. . k개의 가장 가까운 이웃 클래스를 고려하여 데이터 포인트에 클래스를 할당합니다. k-NN 분류의 주요 목적은 기존 레이블 데이터와의 유사성을 활용하여 새로운 데이터 포인트의 클래스를 예측하는 것입니다.
1. 거리 측정법: 알고리즘은 거리 측정법(일반적으로 유클리드 거리)을 사용하여 데이터 포인트의 "가까움"을 결정합니다.
2. k 선택: 매개변수 k는 분류 결정을 내릴 때 고려해야 할 최근접 이웃의 수를 지정합니다.
3. 다수 투표: 새로운 데이터 포인트에 대한 예측 클래스는 k개의 최근접 이웃 중에서 가장 일반적인 클래스입니다.
4. 가중 투표: 경우에 따라 거리에 따라 이웃에 가중치가 부여되며, 가까운 이웃이 분류에 더 많은 영향을 미칩니다.
비모수적: k-NN은 비모수적 방법입니다. 즉, 데이터의 기본 분포에 대해 어떠한 가정도 하지 않습니다. 이를 통해 다양한 유형의 데이터를 유연하게 처리할 수 있습니다.
인스턴스 기반 학습: 알고리즘은 전체 교육 데이터 세트를 저장하고 데이터의 로컬 패턴을 기반으로 예측합니다. 쿼리가 이루어질 때까지 처리를 지연시키기 때문에 "게으른" 학습 알고리즘이라고도 합니다.
거리 계산: 거리 측정법의 선택은 모델 성능에 큰 영향을 미칠 수 있습니다. 일반적인 측정항목으로는 유클리드 거리, 맨해튼 거리, 민코프스키 거리 등이 있습니다.
k의 선택: k 값은 중요한 하이퍼 매개변수입니다. 교차 검증은 주어진 데이터 세트에 대한 최적의 k 값을 결정하는 데 종종 사용됩니다.
k-NN(k-Nearest Neighbors) 분류는 가장 가까운 이웃의 클래스를 기반으로 데이터 포인트를 분류하는 데 사용되는 비모수적 인스턴스 기반 학습 알고리즘입니다. 이 예에서는 합성 데이터를 사용하여 다중 클래스 분류를 위한 k-NN을 구현하고, 모델 성능을 평가하고, 세 클래스에 대한 결정 경계를 시각화하는 방법을 보여줍니다.
1. 라이브러리 가져오기
import numpy as np import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import accuracy_score, classification_report
이 블록은 데이터 조작, 플로팅 및 기계 학습에 필요한 라이브러리를 가져옵니다.
2. 3가지 클래스로 샘플 데이터 생성
np.random.seed(42) # For reproducibility n_samples = 300 # Class 0: Cluster at the top-left corner X0 = np.random.randn(n_samples // 3, 2) * 0.5 + [-2, 2] # Class 1: Cluster at the top-right corner X1 = np.random.randn(n_samples // 3, 2) * 0.5 + [2, 2] # Class 2: Cluster at the bottom-center X2 = np.random.randn(n_samples // 3, 2) * 0.5 + [0, -2] # Combine all classes X = np.vstack((X0, X1, X2)) y = np.array([0] * (n_samples // 3) + [1] * (n_samples // 3) + [2] * (n_samples // 3))
이 블록은 특징 공간의 서로 다른 영역에 위치한 세 가지 클래스에 대한 합성 데이터를 생성합니다.
3. 데이터세트 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
이 블록은 모델 평가를 위해 데이터세트를 훈련 세트와 테스트 세트로 분할합니다.
4. k-NN 분류기 생성 및 학습
k = 5 # Number of neighbors knn_classifier = KNeighborsClassifier(n_neighbors=k) knn_classifier.fit(X_train, y_train)
이 블록은 지정된 수의 이웃으로 k-NN 분류기를 초기화하고 훈련 데이터 세트를 사용하여 훈련합니다.
5. 예측
y_pred = knn_classifier.predict(X_test)
이 블록은 훈련된 모델을 사용하여 테스트 세트에 대해 예측합니다.
6. Evaluate the Model
accuracy = accuracy_score(y_test, y_pred) print(f"Accuracy: {accuracy:.2f}") print("\nClassification Report:") print(classification_report(y_test, y_pred))
Output:
Accuracy: 1.00 Classification Report: precision recall f1-score support 0 1.00 1.00 1.00 22 1 1.00 1.00 1.00 16 2 1.00 1.00 1.00 22 accuracy 1.00 60 macro avg 1.00 1.00 1.00 60 weighted avg 1.00 1.00 1.00 60
This block calculates and prints the accuracy and classification report, providing insights into the model's performance.
7. Visualize the Decision Boundary
h = 0.02 # Step size in the mesh 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)) Z = knn_classifier.predict(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) plt.figure(figsize=(12, 8)) plt.contourf(xx, yy, Z, cmap=plt.cm.RdYlBu, alpha=0.8) plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.RdYlBu, edgecolors='black') plt.xlabel('Feature 1') plt.ylabel('Feature 2') plt.title(f'k-NN Classification (k={k})') plt.colorbar() plt.show()
This block visualizes the decision boundaries created by the k-NN classifier, illustrating how the model separates the three classes in the feature space.
Output:
This structured approach demonstrates how to implement and evaluate k-NN for multiclass classification tasks, providing a clear understanding of its capabilities and the effectiveness of visualizing decision boundaries.
위 내용은 K 최근접이웃 분류, 분류: 지도 머신러닝의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!