KNN算法的使用

目录

一、KNN 算法简介

二、KNN算法的使用

1.读取数据

2.处理数据

三、训练模型

1.导入KNN模块

2.训练模型

3.出厂前测试

四、进行测试

1.处理数据

2.进行测试

总结


一、KNN 算法简介

        KNN 是一种基于实例的学习算法。它通过比较样本之间的距离来进行预测。算法的核心思想是:对于一个未知样本,通过找到距离该样本最近的 (k) 个已知样本,根据这些已知样本的标签来预测未知样本的标签或数值。

 

二、KNN算法的使用

1.读取数据

import pandas as pd

# numpy 读取二维数据
# pandas 读取表格类的数据 本文使用xlsx数据 所以用pandas

# 读取数据
"""
train_data:训练集
test_data:测试集
"""
train_data = pd.read_excel("鸢尾花训练数据.xlsx")
test_data = pd.read_excel("鸢尾花测试数据.xlsx")

 

2.处理数据

  • 提取出特征和分类标签
"""
处理训练集数据;
数据重排;
变量与标签分离.
"""
train_x = train_data[['萼片长(cm)', '萼片宽(cm)', '花瓣长(cm)', '花瓣宽(cm)']]  # 特征
train_y = train_data[['类型_num']]  # 提取单列返回series 需要用[]将其变成列表   # 标签
  • 将每一列数据进行标准化处理,减小误差(大部分情况下能够减小误差)
"""
标准化语法       归一化:0~1 是对每一个特征列进行归一化
Z-Score标准化         -1~1
"""

# 这里用的是scale模块 即Z-Score标准化方法
from sklearn.preprocessing import scale

data = pd.DataFrame()
# 对每一列数据进行标准化  目标: 让每个特征数据都在差不多大小范围内
data['萼片长标准化'] = scale(train_x['萼片长(cm)'])
data['萼片宽标准化'] = scale(train_x['萼片宽(cm)'])
data['花瓣长标准化'] = scale(train_x['花瓣长(cm)'])
data['花瓣宽标准化'] = scale(train_x['花瓣宽(cm)'])

 

三、训练模型

1.导入KNN模块

"""
使用sklearn库中的KNN模块
"""
from sklearn.neighbors import KNeighborsClassifier

 

2.训练模型

  1. knn = KNeighborsClassifier(n_neighbors=9): 创建一个 KNN 分类器对象

  2. n_neighbors=9 表示选择 9 个最近邻居来进行分类

  3. 使用交叉验证等方法选择合适的 K 值。常用的选择方式是尝试不同的 K 值,并选择表现最好的 K。
  4. 选择奇数的 K 值可以避免在分类时出现平局情况。

  5. knn.fit(data, train_y): 使用 data 作为特征数据和 train_y 作为目标标签训练 KNN 模型。训练完成后,knn 变成一个已经训练好的模型,可以用来对新数据进行预测。

knn = KNeighborsClassifier(n_neighbors=9)  # 参数最好是奇数 均值好判断
knn.fit(data, train_y)  # 训练模型  knn就是训练好的模型

 

3.出厂前测试

  • 使用训练集数据和分类对这个训练好的模型进行出厂前的测试
train_predicted = knn.predict(data)  # 用knn模型对训练集data进行预测  相当于复习
score = knn.score(data, train_y)  # 直接将使用data数据预测后的数据与data数据原分类进行对比 可以用来判断复习的正确率
print(score)
  • 测试结果:
0.9696969696969697  # 说明该模型存在一点误差

 

四、进行测试

1.处理数据

  • 测试集的数据在读取数据时已经读取过了,直接处理数据即可
# 测试
test_x = test_data[['萼片长(cm)', '萼片宽(cm)', '花瓣长(cm)', '花瓣宽(cm)']]  # 特征
test_y = test_data[['类型_num']]  # 标签

test_data = pd.DataFrame()
# 对每一列数据进行标准化
test_data['萼片长标准化'] = scale(test_x['萼片长(cm)'])
test_data['萼片宽标准化'] = scale(test_x['萼片宽(cm)'])
test_data['花瓣长标准化'] = scale(test_x['花瓣长(cm)'])
test_data['花瓣宽标准化'] = scale(test_x['花瓣宽(cm)'])

 

2.进行测试

test_predicted = knn.predict(test_data) # 使用knn模型对test_data数据进行预测
print(test_predicted)
score = knn.score(test_data, test_y)    # 判断测试集正确率
print(score)

测试结果:

[0 0 0 0 0 1 0 1 1]
0.8888888888888888

 

总结

        KNN 算法是一种直观且实用的机器学习算法,适用于许多实际问题。它的优点在于简单易用,但在处理大数据集或高维数据时可能会遇到计算性能问题。通过合理选择 K 值和距离度量,可以提高 KNN 算法的效果。

  • 13
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: KNN(k-nearest neighbors)算法是一种常用的分类算法。在病例中,KNN算法可用于根据患者的病情数据分类为不同的疾病或疾病风险等级。 首先,我们需要收集一些与患者病情相关的数据,如年龄、性别、症状、生活方式等。这些数据将被用作特征向量,而疾病或疾病风险等级将作为标签。 接下来,我们需要选择一个合适的K值,即邻居数量。K值的选择对算法的分类效果有影响,需要进行一定的调试和优化。 然后,我们计算患者与训练集中每个病例的距离,并选择距离最近的K个病例作为邻居。常用的距离度量方法包括欧氏距离、曼哈顿距离等。 最后,我们根据邻居的标签进行投票,将患者分类为标签数量最多的疾病或疾病风险等级。如果K=1,即只考虑最近的邻居,可以直接将患者分类为与该邻居相同的标签。 需要注意的是,在使用KNN算法时,我们需要对数据进行预处理和特征工程,以确保数据的质量和准确性。同时,KNN算法对数据量大和维度高的情况不太适用,可能会导致计算复杂度高和计算效率低的问题。 总结起来,通过使用KNN算法,我们可以根据患者的病情数据将其分类为不同的疾病或疾病风险等级,为医疗决策提供参考。 ### 回答2: KNN(K最近邻)算法是一种常用的分类算法。在病例中,如果我们要使用KNN算法来实现病例,具体步骤如下: 1. 数据收集:首先需要收集相关的病例数据,包括病人的基本信息和病情数据。 2. 数据预处理:对收集到的数据进行预处理,包括数据清洗、缺失值处理、特征选择等。确保数据的质量和完整性。 3. 特征提取:从病例数据中提取有意义的特征。这些特征可以包括病人的年龄、性别、病症的严重程度、体征指标等。 4. 数据划分:将数据划分为训练集和测试集。一般来说,可以将数据集的70%用于训练,30%用于测试。 5. 计算距离:对于测试集中的每一个实例,计算它与训练集中各个实例的距离。可以使用欧氏距离或其他相似性度量来计算距离。 6. 选取K值:选择一个合适的K值,即选择距离测试实例最近的K个邻居。 7. 执行分类:根据K个邻居的标签,通过投票的方式决定测试实例所属的类别。选取标签最多的类别作为测试实例的分类结果。 8. 评估性能:使用测试集来评估KNN算法的性能,比较分类结果与实际类别的差异。 9. 模型优化:根据评估结果,进行参数调整或特征选择等优化操作,提升KNN算法的分类性能。 总的来说,使用KNN算法实现病例需要进行数据收集、预处理、特征提取、数据划分、计算距离、选取K值、执行分类、评估性能和模型优化等步骤。这样可以从已知病例中学习并预测未知病例的分类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃什么芹菜卷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值