监督学习之最邻近分类算法KNN原理与代码实现

最邻近分类算法KNN:

近朱者赤近墨者黑,由邻居判读你的分类。
为了判断未知样本的类别,以所有已知类别的样本作为参照,计算未知样本与所有已知样本的距离,从中选取与未知样本距离最近的K个已知样本,根据少数服从多数的投票法则,将未知样本与K个最邻近样本中所属类别占比较多的归为一类。

在这里插入图片描述
在这里插入图片描述

距离怎么算?

在这里插入图片描述

K怎么确定?

通过交叉验证和网格搜索,从选取一个较小的K值开始,不断增加K的值,然后计算验证集合的mean_square_error,最终找到一个比较合适的K值。

关于交叉验证的详细信息可以参考这篇博客:
https://blog.csdn.net/FlatTiger/article/details/111170574

代码实现:

import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
# 交叉验证
from sklearn.model_selection import KFold
# 模型评分
from sklearn.model_selection import cross_validate

data = pd.read_csv(r'G:\学习文件\机器学习\data_mining_data\breast_cancer.csv')
# 切分特征和标签
features = data.iloc[:, :-1]
labels = data.iloc[:, -1]
# 标准化
ss = StandardScaler()
# ss.fit(features)
features_std = ss.fit_transform(features)
df = pd.DataFrame(features_std, columns=features.columns)
# 交叉验证
kf = KFold(n_splits=5)
# for i in range(3, 8):
#     mean = 0
#     for train_index,test_index in kf.split(features_std):
#         # 创建模型
#         knn_model = KNeighborsClassifier(n_neighbors=i)
#         knn_model.fit(df.loc[train_index], labels.loc[train_index])
#         score = knn_model.score(df.loc[test_index], labels.loc[test_index])
#         mean += score
#         # 评分
#     mean = mean / 5
#     print('i={},score={}'.format(i, mean))
for i in range(3, 8):
    knn_model = KNeighborsClassifier(n_neighbors=i)
    # cross_validate评分
    score = cross_validate(knn_model, df, labels)
    print(score)

优缺点及使用场景

  • 简单,易于理解,易于实现,无需估计参数,无需训练。
  • 懒惰算法,对测试样本分类时的计算量大,内存开销大。
  • 必须指定K值,K值选择不当则分类精度不能保证。
  • 使用场景:数据量较小的场景,几千-几万条。注意使用KNN算法时需要进行标准化。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值