当前位置: 首页 > news >正文

机器学习实验一:KNN算法,手写数字数据集(使用汉明距离)(2)

KNN-手写数字数据集:

      使用sklearn中的KNN算法工具包( KNeighborsClassifier)替换实现分类器的构建,注意使用的是汉明距离

 运行结果:(大概要运行4分钟左右)

代码:

import pandas as pd
import osdef hamming(str1, str2):if len(str1) != len(str2):raise ValueError("两个字符串长度不相等")return sum(c1 != c2 for c1, c2 in zip(str1, str2))def get_train():path = 'digits/trainingDigits'trainingFileList0 = os.listdir(path)trainingFileList = [file[2:] if file.startswith('._') else file for file in trainingFileList0]train = pd.DataFrame()img = []labels = []for i in range(len(trainingFileList)):filename = trainingFileList[i]with open(f'digits/trainingDigits/{filename}', 'r') as f:txt = f.read().replace('\n', '')img.append(txt)filelabel = filename.split('_')[0]labels.append(filelabel)train['img'] = imgtrain['labels'] = labelsreturn traindef get_test():path = 'digits/testDigits'testFileList0 = os.listdir(path)testFileList = [file[2:] if file.startswith('._') else file for file in testFileList0]test = pd.DataFrame()img = []labels = []for filename in testFileList:with open(f'digits/testDigits/{filename}', 'r') as f:txt = f.read().replace('\n', '')img.append(txt)filelabel = filename.split('_')[0]labels.append(filelabel)test['img'] = imgtest['labels'] = labelsreturn testdef handwritingClass(train, test, k):n = train.shape[0]m = test.shape[0]result = []for i in range(m):dist = []for j in range(n):d = str(hamming(train.iloc[j, 0], test.iloc[i, 0]))dist.append(d)dist_l = pd.DataFrame({'dist': dist, 'labels': train.iloc[:, 1]})dr = dist_l.sort_values(by='dist')[:k]re = dr.loc[:, 'labels'].value_counts()result.append(re.index[0])result = pd.Series(result)test['predict'] = resultacc = (test.iloc[:, -1] == test.iloc[:, -2]).mean()print(f'模型预测准确率为{acc:.5f}')return test# 获取训练集和测试集
train = get_train()
test = get_test()# 调用函数
handwritingClass(train, test, 3)

http://www.lryc.cn/news/208513.html

相关文章:

  • docker应用部署---nginx部署的配置
  • Sql Server中的表组织和索引组织(聚集索引结构,非聚集索引结构,堆结构)
  • C++类对象反制机制实现_精简修改版
  • C#开发的IEnumerable接口
  • Redis详细安装教程
  • 36基于matlab的对分解层数和惩罚因子进行优化
  • 【Flutter】自定义分段选择器Slider
  • 【软考系统架构设计师】2023年系统架构师冲刺模拟习题之《软件工程》
  • 非遗主题网站的设计与实现基于PHP实现
  • YOLO目标检测——红外人员数据集【含对应voc、coco和yolo三种格式标签+划分脚本】
  • C++项目——云备份-⑧-客户端各模块实现
  • 分享一款基于 AI 的 Chrome 插件
  • Spring Authorization Server 1.1 扩展实现 OAuth2 密码模式与 Spring Cloud 的整合实战
  • 第二证券:AIGC概念活跃,焦点科技、三维通信涨停,万兴科技大涨
  • 7-4、S加减速转动实现【51单片机控制步进电机-TB6600系列】
  • RK3568-pcie接口
  • spring监听请求执行结束,移除当前ThreadLocal数据两种方法
  • 知识图谱--Jena基础操作和检索推理应用
  • GEE python——将GEE ASSETS中存储的影像或者矢量转化为数据格式XEE()
  • Java集合框架:List、Set、Map类型及泛型详解
  • Ubuntu 安装 docker
  • BUUCTF zip伪加密 1
  • p5.js 到底怎么设置背景图?
  • python+unittest+requests+HTMLRunner编写接口自动化测试集
  • Vue---监听div元素宽高改变时echart图表重新resize
  • Kubernetes Etcd不可用日志:NOSPACE 的问题修复
  • 分组卷积的思想神了
  • 北邮22级信通院数电:Verilog-FPGA(7)第七周实验(2):BCD七段显示译码器(关注我的uu们加群咯~)
  • LVS集群-DR模式
  • 行为型模式-状态模式