Rumah  >  Artikel  >  Peranti teknologi  >  Prinsip asas dan contoh klasifikasi algoritma KNN

Prinsip asas dan contoh klasifikasi algoritma KNN

王林
王林ke hadapan
2024-01-23 11:24:20694semak imbas

Prinsip asas dan contoh klasifikasi algoritma KNN

Algoritma KNN ialah algoritma pengelasan yang ringkas dan mudah digunakan sesuai untuk set data berskala kecil dan ruang ciri berdimensi rendah. Ia berprestasi baik dalam bidang seperti klasifikasi imej dan klasifikasi teks, dan digemari kerana kesederhanaan pelaksanaan dan kemudahan pemahaman.

Idea asas algoritma KNN adalah untuk mencari jiran K yang paling hampir dengan membandingkan ciri-ciri sampel yang akan dikelaskan dengan ciri-ciri sampel latihan, dan menentukan kategori sampel yang akan dikelaskan berdasarkan kategori jiran K ini. Algoritma KNN menggunakan set latihan dengan kategori berlabel dan set ujian untuk dikelaskan. Proses pengelasan algoritma KNN merangkumi langkah-langkah berikut: pertama, hitung jarak antara sampel yang akan dikelaskan dan semua sampel latihan kedua, pilih jiran terdekat K kemudian, undi mengikut kategori jiran K untuk mendapatkan; Kategori sampel terkelas akhirnya, kategori sampel yang akan dikelaskan ditentukan sebagai kategori dengan undian terbanyak dalam keputusan pengundian. Melalui langkah-langkah ini, algoritma KNN boleh mengelaskan sampel yang akan dikelaskan dengan tepat.

1. Kira jarak

Untuk sampel ujian yang tidak dikelaskan, adalah perlu untuk mengira jarak antara mereka dan semua sampel dalam set latihan yang biasa digunakan seperti Euclidean dan Manhattan.

2. Pilih jiran K

Mengikut jarak yang dikira, pilih sampel set latihan K yang paling hampir dengan sampel untuk dikelaskan. Sampel ini adalah jiran K bagi sampel yang akan dikelaskan.

3. Tentukan kategori

Tentukan kategori sampel yang hendak dikelaskan berdasarkan kategori jiran K. “Kaedah pengundian majoriti” biasanya digunakan untuk menentukan kategori sampel yang akan dikelaskan iaitu kategori yang paling banyak muncul di kalangan jiran K dipilih sebagai kategori sampel yang akan dikelaskan.

Algoritma KNN agak mudah, tetapi terdapat beberapa isu yang memerlukan perhatian. Pertama sekali, pilihan nilai K mempunyai kesan yang besar terhadap prestasi algoritma, dan biasanya perlu untuk menentukan nilai K optimum melalui pengesahan silang dan kaedah lain. Kedua, algoritma KNN sensitif kepada saiz dan dimensi set data, dan akan terdapat masalah kecekapan apabila memproses set data berskala besar dan berdimensi tinggi. Selain itu, algoritma KNN juga mempunyai masalah "ketidakseimbangan kategori", iaitu bilangan sampel dalam kategori tertentu adalah kecil, yang mungkin menyebabkan algoritma mempunyai kesan pengelasan yang lemah pada kategori ini.

Berikut ialah contoh klasifikasi menggunakan Python untuk melaksanakan algoritma KNN Kodnya adalah seperti berikut:

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)

Parameter k yang diluluskan dalam pembina kelas KNN ini menunjukkan bilangan jiran yang dipilih untuk pengelasan. Kaedah muat digunakan untuk melatih model, menerima set latihan X dan label sepadannya y. Kaedah ramalan digunakan untuk mengklasifikasikan set ujian, menerima set ujian X_test dan mengembalikan label yang diramalkan.

Dalam kaedah ramalan, untuk setiap sampel ujian, mula-mula kira jaraknya dari semua sampel dalam set latihan, dan pilih k sampel yang paling hampir. Kemudian, label yang paling kerap berlaku di kalangan sampel k ini dikira dan digunakan sebagai label pengelasan sampel ujian.

Berikut ialah contoh penggunaan kelas KNN ini untuk pengelasan Set data ialah set titik pada satah dua dimensi, di mana titik merah mewakili kategori 1 dan titik biru mewakili kategori 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()

Selepas. menjalankan kod ini, anda boleh melihat imej hasil pengelasan. Antaranya, warna mewakili kategori yang diramalkan, merah mewakili kategori 1, dan biru mewakili kategori 2. Berdasarkan keputusan pengelasan, ketepatan model boleh dikira.

Contoh ini menunjukkan aplikasi algoritma KNN pada satah dua dimensi, menentukan jiran dengan mengira jarak, dan mengelaskannya mengikut kategorinya. Dalam aplikasi praktikal, algoritma KNN boleh digunakan dalam klasifikasi imej, klasifikasi teks dan bidang lain Ia adalah algoritma pengelasan yang mudah dan berkesan.

Atas ialah kandungan terperinci Prinsip asas dan contoh klasifikasi algoritma KNN. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:163.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam