机器学习Python代码实战(二)分类算法:k-最近邻

一.k-最近邻算法步骤

1.选择适当的k值。它表示在预测新的数据点时要考虑的邻居数量。

2.计算距离。计算未知点与其他所有点之间的距离。常用的距离计算方法主要有欧氏距离,曼哈顿距离等。

3.选择邻居。在训练集中选择与要预测的数据点距离最近的k个邻居。

4.预测响应。统计这k个邻居中各类别的数量,并将要预测的数据点预测为这k个邻居中数量最多的类别。

下面以使用K-最近邻算法预测糖尿病(不需要特征标准化)为例说明k-最近邻算法的使用。

二.导入库和数据集

其中变量的中文含义如下:

Pregnancies:怀孕次数

Glucose:葡萄糖测试值

BloodPressure:血压

SkinThickness:皮肤厚度

Insulin:胰岛素

BMI:身体质量指数

Predigree:糖尿病遗传函数

Age:年龄

Outcome:糖尿病标签(即预测结果)

三.数据清洗

可以看到在上一步中某些列均出现了异常值0,此时需要进行数据清洗把异常值先替换为NaN,然后用该列的平均值填充。

四.划分测试集和训练集

先获取x,y如下。

然后进行训练集和测试集的划分,依旧是训练集占80%,测试集占20%。打印x的测试集如下。

五.模型训练

由于本数据集的自变量之间的数量级差别不是很大,故不需要使用特征标准化。

先导入k-最近邻分类器,再开始在训练集上训练模型

六.预测结果并输出混淆矩阵

混淆矩阵可视化如下:

采用准确率(Accurancy),精确率(precision),召回率(Recall),F1分数(F1 score)来评估模型。

模型的准确率、精确率、召回率和 F1 分数都在 50% 到 70% 之间,说明模型有一定的预测能力,但效果并不是特别好。

因此,我们尝试改进模型。

七.尝试优化

试着采用改变K值的方法。

把k值设置为6,运行。得到混淆矩阵如下。

可视化如下:

接下来计算指标值。

模型的准确率、精确率、召回率和 F1 分数都在 50% 到 80% 之间,说明模型有较好的预测能力,但仍有改进空间。

至于后续的优化,可能就需要继续调整k值或者采用其他的分类算法了,在这里不做过多讨论。

欢迎各位大佬批评指正,别忘了点赞加关注喔~

相关推荐
砚底藏山河1 分钟前
量化实战:行情数据 Schema 演进与向后兼容
java·python·金融·maven
苏离~Hack3 分钟前
InfoScraper:面向授权目标的一站式资产信息收集工具
python
计算机毕业编程指导师6 分钟前
【计算机毕设选题推荐】基于Hadoop+Django高频电力消耗大数据分析系统从0到1 源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
hadoop·python·数据分析·spark·毕业设计·课程设计·电力
FYKJ_20108 分钟前
springboot手工蜀绣在线销售系统60947-计算机课程设计、毕业设计
java·spring boot·后端·python·mysql·spark·课程设计
vx_Biye_Design11 分钟前
springboot老年人用药智能管理系统38605-计算机课程设计、毕业设计
java·spring boot·后端·python·django·课程设计·express
сокол16 分钟前
【Python-基础-环境搭建】Ubuntu Python 开发环境搭建:编译、pipenv、pyenv、远程连接
开发语言·python·ubuntu
vx_Biye_Design17 分钟前
springbootNBA数据分析系统平台42434-计算机课程设计、毕业设计
java·vue.js·spring boot·python·django·课程设计·express
计算机毕业编程指导师18 分钟前
【计算机毕设选题推荐】基于Spark的多源影视数据整合质量评估与可视化分析系统全解析 源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·数据分析·spark·影视
苏离~Hack22 分钟前
惠民云平台开发实战:基于 Vue3 + Django 的社区服务系统设计与实现
后端·python·django
山顶夕景9 小时前
【Jev】Jev模型和Laya架构
分类·大模型·dev