1.knn算法介绍
1.1.基本概念
knn(K Near Neighbor):即k临近算法,就是每个样本都可以用与它最接近的k个邻居来代表。相近的
1.2.knn的基本原理
假设有10个样本点,x代表优良,y代表普通,预测c是优良还是普通,需要计算出c到所有样本的距离,选出距离最近的k个样本点,比较其中x与y的数量,测试样本c归于k个样本点中数量较多的类别。
计算公式:
2.实现步骤
1.准备数据集,对数据进行预处理
2.计算测试样本点到其他样本点的距离
3.按照距离进行排序,选出距离最小的k个样本点
4.根据样本点占比的多少进行分类
3.具体内容
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from collections import Counter
import numpy as np
iris = load_iris()
X = iris.data
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
print("Predicted values: ", y_pred)
print("Actual values: ", y_test)
print("Matching pairs: ", Counter(y_pred) == Counter(y_test))
加载 iris 数据集
iris = load_iris()
X = iris.data
y = iris.target
分割数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
标准化特征以便更好地比较
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
定义 KNN 分类器并设置 k 值为 3
knn = KNeighborsClassifier(n_neighbors=3)
使用训练集训练分类器
knn.fit(X_train, y_train)
对测试集进行预测
y_pred = knn.predict(X_test)
输出预测结果和实际结果的比较
print("Predicted values: ", y_pred)
print("Actual values: ", y_test)
print("Matching pairs: ", Counter(y_pred) == Counter(y_test))
4.总结
4.1.优点
简单明了,易于实现
方便进行多分类任务
4.2.缺点
效率较低,需要计算到每个点的距离
高度数据相关,当一个样本数量较大会影响,其他样本数量较少,会影响分类结果。
本文介绍了KNN算法的基本概念,包括其工作原理,通过Python示例展示了如何使用sklearn库实现KNN分类器。同时讨论了KNN的优缺点,如简单实现和多分类能力,以及较低的效率和对数据相关性的敏感性。
1243





