>  기사  >  기술 주변기기  >  KNN 알고리즘 분류의 기본 원리 및 예시

KNN 알고리즘 분류의 기본 원리 및 예시

王林
王林앞으로
2024-01-23 11:24:20694검색

KNN 알고리즘 분류의 기본 원리 및 예시

KNN 알고리즘은 소규모 데이터 세트 및 저차원 특징 공간에 적합한 간단하고 사용하기 쉬운 분류 알고리즘입니다. 이미지 분류, 텍스트 분류 등의 분야에서 성능이 뛰어나며, 구현이 간단하고 이해가 쉬워 인기가 높습니다.

KNN 알고리즘의 기본 아이디어는 분류할 표본의 특성과 훈련 표본의 특성을 비교하여 가장 가까운 K개의 이웃을 찾고, 이를 기반으로 분류할 표본의 범주를 결정하는 것입니다. 이 K 이웃의 카테고리. KNN 알고리즘은 분류된 범주가 있는 훈련 세트와 분류할 테스트 세트를 사용합니다. KNN 알고리즘의 분류 프로세스는 다음 단계를 포함합니다. 먼저 분류할 샘플과 모든 훈련 샘플 사이의 거리를 계산합니다. 두 번째로 K개의 가장 가까운 이웃을 선택한 다음 K개의 이웃의 범주에 따라 투표합니다. 분류된 샘플의 카테고리는 최종적으로 투표 결과에서 가장 많은 표를 얻은 카테고리로 분류될 샘플의 카테고리를 결정한다. 이러한 단계를 통해 KNN 알고리즘은 분류 대상 샘플을 정확하게 분류할 수 있습니다.

1. 거리 계산

분류되지 않은 테스트 샘플의 경우 해당 샘플과 훈련 세트의 모든 샘플 사이의 거리를 계산해야 합니다.

2. K개의 이웃 선택

계산된 거리에 따라 분류할 샘플에 가장 가까운 K개의 훈련 세트 샘플을 선택합니다. 이러한 샘플은 분류할 샘플의 K개 이웃입니다.

3. 카테고리 결정

K 이웃의 카테고리를 기준으로 분류할 샘플의 카테고리를 결정합니다. "과반수 투표 방식"은 일반적으로 분류할 샘플의 카테고리를 결정하는 데 사용됩니다. 즉, K개의 이웃 중에서 가장 많이 나타나는 카테고리를 분류할 샘플의 카테고리로 선택합니다.

KNN 알고리즘은 비교적 간단하지만 주의가 필요한 몇 가지 문제가 있습니다. 우선, K 값의 선택은 알고리즘의 성능에 큰 영향을 미치며, 일반적으로 교차 검증 및 기타 방법을 통해 최적의 K 값을 결정하는 것이 필요합니다. 둘째, KNN 알고리즘은 데이터 세트의 크기와 차원에 민감하여 대규모 및 고차원 데이터 세트를 처리할 때 효율성 문제가 있습니다. 또한 KNN 알고리즘에는 "범주 불균형" 문제도 있습니다. 즉, 특정 범주의 샘플 수가 적어 알고리즘이 해당 범주에 대한 분류 효과가 좋지 않을 수 있습니다.

다음은 Python을 사용하여 KNN 알고리즘을 구현한 분류 예제입니다. 코드는 다음과 같습니다.

import numpy as np
from collections import Counter

class KNN:
    def __init__(self, k):
        self.k = k

    def fit(self, X, y):
        self.X_train = X
        self.y_train = y

    def predict(self, X_test):
        predictions = []

        for x_test in X_test:
            distances = []
            for x_train in self.X_train:
                distance = np.sqrt(np.sum((x_test - x_train)**2))
                distances.append(distance)
            idx = np.argsort(distances)[:self.k]
            k_nearest_labels = [self.y_train[i] for i in idx]
            most_common = Counter(k_nearest_labels).most_common(1)
            predictions.append(most_common[0][0])

        return np.array(predictions)

이 KNN 클래스의 생성자에 전달된 매개변수 k는 분류를 위해 선택된 이웃 수를 나타냅니다. 피팅 방법은 모델을 훈련하는 데 사용되며 훈련 세트 X와 해당 레이블 y를 받아들입니다. 예측 메소드는 테스트 세트를 분류하고 X_test 테스트 세트를 승인하고 예측된 라벨을 반환하는 데 사용됩니다.

예측 방법에서는 각 테스트 샘플에 대해 먼저 훈련 세트에 있는 모든 샘플과의 거리를 계산하고 가장 가까운 k개의 샘플을 선택합니다. 그런 다음, 이 k개의 샘플 중 가장 빈번하게 발생하는 레이블을 계산하여 테스트 샘플의 분류 레이블로 사용합니다.

다음은 분류를 위해 이 KNN 클래스를 사용하는 예입니다. 데이터 세트는 2차원 평면에 있는 점 세트입니다. 여기서 빨간색 점은 카테고리 1을 나타내고 파란색 점은 카테고리 2를 나타냅니다.

import matplotlib.pyplot as plt

# 生成数据集
X = np.random.rand(200, 2) * 5 - 2.5
y = np.zeros(200)
y[np.sum(X**2, axis=1) > 2] = 1

# 分割训练集和测试集
train_idx = np.random.choice(200, 150, replace=False)
test_idx = np.array(list(set(range(200)) - set(train_idx)))
X_train, y_train = X[train_idx], y[train_idx]
X_test, y_test = X[test_idx], y[test_idx]

# 训练模型并进行预测
knn = KNN(k=5)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)

# 计算准确率并绘制分类结果
accuracy = np.mean(y_pred == y_test)
print("Accuracy:", accuracy)

plt.scatter(X_test[:, 0], X_test[:, 1], c=y_pred)
plt.show()

After 이 코드를 실행하면 분류 결과 이미지를 볼 수 있습니다. 그 중 색상은 예측 카테고리를 나타내고, 빨간색은 카테고리 1, 파란색은 카테고리 2를 나타냅니다. 분류 결과를 바탕으로 모델의 정확도를 계산할 수 있습니다.

이 예는 2차원 평면에 KNN 알고리즘을 적용하여 거리를 계산하여 이웃을 결정하고 카테고리에 따라 분류하는 방법을 보여줍니다. 실제 응용 분야에서 KNN 알고리즘은 이미지 분류, 텍스트 분류 및 기타 분야에 사용될 수 있으며 간단하고 효과적인 분류 알고리즘입니다.

위 내용은 KNN 알고리즘 분류의 기본 원리 및 예시의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 163.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제