机器学习实验一代码2

本文介绍了如何在Python中使用K-近邻(KNN)算法对数据进行分类,通过读取食品、包和电器三种类型的数据,计算欧氏距离并基于最邻近的K个样本预测新数据的类别。
摘要由CSDN通过智能技术生成

from __future__ import division # 导入除法运算相关设置,使整数相除会得到浮点数结果
import math # 导入用于数学计算的模块
import numpy # 导入用于科学计算的模块

# 读取数据文件并处理数据
def get_data(file):
data = []
with open(file, 'r') as file_data: # 打开文件
for line in file_data: # 遍历文件中的每一行
data.append([float(x) for x in line.strip().split(',')]) # 将每行数据按逗号分隔,并转换为浮点数后添加到data列表中
return data # 返回处理后的数据

# K-近邻算法
def KNN_algorithm(food_data, packet_data, elc_data, expected_data, k):
distances = [] # 存储距离及类别的列表
labels = ['零食', '包', '电器'] # 类别标签列表

# 遍历三类数据集
for data, label in zip([food_data, packet_data, elc_data], labels):
for point in data: # 遍历每个数据点
distance = math.sqrt((expected_data[0] - point[0]) ** 2 + (expected_data[1] - point[1]) ** 2) # 计算欧氏距离
distances.append((distance, label)) # 将距离和类别添加到列表中

distances.sort(key=lambda x: x[0]) # 按照距离大小排序

nearest_labels = [x[1] for x in distances[:k]] # 获取距离最近的k个数据点的类别

# 统计最近的 k 个邻居中各类别的数量
count = {label: nearest_labels.count(label) for label in labels}

# 找到数量最多的类别作为预测结果
prediction = max(count, key=count.get)

print(f"该类别为{prediction}") # 输出预测结果


if __name__ == "__main__":
expected_data = [10, 10] # 待预测的数据点
k = 8 # 设置K值
food_file = "./零食.txt" # 食品数据文件路径
pack_file = "./包.txt" # 包数据文件路径
elc_file = "./电器.txt" # 电器数据文件路径

food_data = get_data(food_file) # 读取食品数据
packet_data = get_data(pack_file) # 读取包数据
elc_data = get_data(elc_file) # 读取电器数据
print(food_data, packet_data, elc_data) # 打印三类数据
KNN_algorithm(food_data, packet_data, elc_data, expected_data, k) # 调用K-近邻算法进行预测

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值