机器学习(3):KNN算法-分类

发布于:2025-08-06 ⋅ 阅读:(16) ⋅ 点赞:(0)

一、KNN算法 

 K-近邻算法(K-Nearest Neighbors,简称KNN),根据K个邻居样本的类别来判断当前样本的类别;如果一个样本在特征空间中的k个最相似(最邻近)样本中的大多数属于某个类别,则该类本也属于这个类别。

一些距离: 

距离类型 核心特点 典型应用场景
欧式距离 直线距离,直观但受尺度影响 图像识别、聚类分析(需先标准化)
曼哈顿距离 网格距离,计算快,抗异常值 路径规划、高维数据分类
切比雪夫距离 最大维度差异,关注极端值 质量检测、棋盘类问题
余弦距离 方向相似度,忽略长度 文本分类、推荐系统(如用户兴趣匹配)
马氏距离 考虑协方差,消除相关性和尺度 异常检测、金融风险评估
import joblib#用来保存模型
from sklearn.datasets import load_wine#加载红酒数据集
from sklearn.model_selection import train_test_split#引入数据集划分
from sklearn.neighbors import KNeighborsClassifier#KNN算法模型
from sklearn.preprocessing import StandScaler#标准化
import numpy as np

#加载数据集
x,y = load_wine(return_X_y=True)
x_train,x_test,y_train,_y_test = train_test_split(x,y,test_size=0.2,random.state=42)

#特征工程化——标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
#fit(x_train) 会计算训练集的均值和标准差
# transform(x_train) 会用训练集的均值和标准差对训练数据标准化
# transform(x_test) 同样用训练集的均值和标准差对测试数据标准化

#训练
model = KNeighborsClassifier(n_neighbors=7)#查询的近邻数为7
model.fit(x_train,x_test)

#预测
y_p = model.predict(x_test)

print(model.score(x_test,y_test))#计算准确率

#模型保存
joblib.dump(model,'../src/model/KNN.pkl')
joblib.dump(transfer,'../src/model/transfer.pkl')

我们用红酒的数据集训练好模型后并保存,可在其他地方引用这个模型来进行测试 

import joblib
model = joblib.load('../src/model/KNN.pkl')
transfer = joblib.load('../src/model/transfer.pkl')
x_new = [[5.1,3.5,1.4,0.2,1,2,3,4,5,6,7,8,9],
         [5.9,3.0,5.1,1.8,2,3,4,5,6,7,8,9,10],
]
x_new = transfer.transform(x_new)
y_predict = model.predict(x_new)

二、KNN算法的缺点:

1、对于大规模数据集,计算量大,因为需要计算测试样本与所有训练样本的距离

2、对于高维数据,距离度量可能变得不那么有意义,数值很大相差不大。

3、需要选择合适的k值和距离度量,这可能需要一些实验和调整

三、API

class sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, algorithm='auto')
参数:                                             
(1)n_neighbors: 
        int, default=5, 默认情况下用于kneighbors查询的近邻数,就是K
(2)algorithm:
    {‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’}, default=’auto’。找到近邻的方式,注意不是计算距离        的方式,与机器学习算法没有什么关系,开发中请使用默认值'auto'
方法:
 (1) fit(x, y) 
        使用X作为训练数据和y作为目标数据  
 (2) predict(X)    预测提供的数据,得到预测数据  


网站公告

今日签到

点亮在社区的每一天
去签到