机器学习--KNN算法

本文介绍了KNN算法的基本概念,包括其工作原理,通过Python示例展示了如何使用sklearn库实现KNN分类器。同时讨论了KNN的优缺点,如简单实现和多分类能力,以及较低的效率和对数据相关性的敏感性。

1.knn算法介绍

        1.1.基本概念

        knn(K Near Neighbor):即k临近算法,就是每个样本都可以用与它最接近的k个邻居来代表。相近的

        1.2.knn的基本原理

        假设有10个样本点,x代表优良,y代表普通,预测c是优良还是普通,需要计算出c到所有样本的距离,选出距离最近的k个样本点,比较其中x与y的数量,测试样本c归于k个样本点中数量较多的类别。

        计算公式:d\left ( a,b \right )=\sqrt{\left ( x_{1a}-x_{1b} \right )^{2}+\left ( x_{2a}-x_{2b} \right )^{2}+\cdots +\left ( x_{na}-x_{nb} \right )^{2}}

                                        =\sqrt{\sum_{i=1}^{n}\left ( x_{ia}-x_{ib} \right )^{2}}

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.缺点

        效率较低,需要计算到每个点的距离

        高度数据相关,当一个样本数量较大会影响,其他样本数量较少,会影响分类结果。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值