KNN算法的实现

import pandas as pd
from math import dist k = int(input("请输入k值:"))
dataTest = pd.read_csv('iristest.csv', header=None).values
trainData = pd.read_csv('iristrain.csv', header=None).values # 用于我懒得把测试数据和训练数据封装成不同类,所以就会在成员变量里面同时出现测试数据专有的属性和测试数据的专有属性
class Data:
"""
这个类用来封装每一个数据的信息
info:数据的前4列
Label:数据标签
predict_label:数据的使用knn算法预测的标签
dis:数据离测试数据的距离
"""
def __init__(self, info, label, dis=None, predict_label=None):
self.info = info
self.label = label
self.dis = dis
self.predict_label = predict_label def __str__(self):
return "info={0}、dis={1}、label={2}、predict_label={3}".format(self.info, self.dis, self.label,
self.predict_label) # 重写__lt__函数方便sort直接排序
def __lt__(self, other):
return self.dis < other.dis trainDataInClass = []
for item in trainData:
trainDataInClass.append(Data(item[0:4], item[-1])) def getTestLabel(test_data):
"""
:param test_data: 输入点
:return: 返回该点的类别
本函数用于做输入数据的分类
"""
# 定义一个列表,用来存储距离
distance = []
for m in trainDataInClass:
# dist是一个直接计算欧氏距离的函数
m.dis = dist(m.info, test_data.info)
distance.append(m)
distance.sort() # 定义一个列表来存储最近前k名的Label
label_top = []
for j in range(0, k):
label_top.append(distance[j].label) test_data.predict_label = max(label_top, key=label_top.count)
return test_data # 测试数据
# 定义一个存储预测之后的数据的列表
predict_list = []
for item in dataTest:
predict_list.append(getTestLabel(Data(item[0:4], item[-1]))) # 定义一个变量用于存储预测准确的数据数量
predict_true_cnt = 0
for item in predict_list:
if item.label == item.predict_label:
predict_true_cnt += 1
# 计算精度
precision = predict_true_cnt / len(predict_list)
print(precision)

没有做交叉验证,所以附上训练数据集和测试数据集

测试数据集,点击下载

直接显示

训练数据集,点击下载

直接显示

KNN算法实现对iris数据集的预测的更多相关文章

  1. kNN算法实例(约会对象喜好预测和手写识别)

    import numpy as np import operator import random import os def file2matrix(filePath):#从文本中提取特征矩阵和标签 ...

  2. 机器学习简要笔记(三)-KNN算法

    #coding:utf-8 import numpy as np import operator def classify(intX,dataSet,labels,k): ''' KNN算法 ''' ...

  3. 机器学习回顾篇(6):KNN算法

    1 引言 本文将从算法原理出发,展开介绍KNN算法,并结合机器学习中常用的Iris数据集通过代码实例演示KNN算法用法和实现. 2 算法原理 KNN(kNN,k-NearestNeighbor)算法, ...

  4. kNN算法:K最近邻(kNN,k-NearestNeighbor)分类算法

    一.KNN算法概述 邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一.所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它 ...

  5. Python 手写数字识别-knn算法应用

    在上一篇博文中,我们对KNN算法思想及流程有了初步的了解,KNN是采用测量不同特征值之间的距离方法进行分类,也就是说对于每个样本数据,需要和训练集中的所有数据进行欧氏距离计算.这里简述KNN算法的特点 ...

  6. 用Python实现支持向量机并处理Iris数据集

    SVM全称是Support Vector Machine,即支持向量机,是一种监督式学习算法.它主要应用于分类问题,通过改进代码也可以用作回归.所谓支持向量就是距离分隔面最近的向量.支持向量机就是要确 ...

  7. 吴裕雄--天生自然python机器学习实战:K-NN算法约会网站好友喜好预测以及手写数字预测分类实验

    实验设备与软件环境 硬件环境:内存ddr3 4G及以上的x86架构主机一部 系统环境:windows 软件环境:Anaconda2(64位),python3.5,jupyter 内核版本:window ...

  8. k-近邻(KNN) 算法预测签到位置

    分类算法-k近邻算法(KNN): 定义: 如果一个样本在特征空间中的k个最相似 (即特征空间中最邻近) 的样本中的大多数属于某一个类别,则该样本也属于这个类别 来源: KNN算法最早是由Cover和H ...

  9. iris数据集预测

    iris数据集预测(对比随机森林和逻辑回归算法) 随机森林 library(randomForest) #挑选响应变量 index <- subset(iris,Species != " ...

随机推荐

  1. HTML5背景知识

    目录 HTML5背景知识 HTML的历史 JavaScript出场 浏览器战争的结束 插件称雄 语义HTML浮出水面 发展态势:HTML标准滞后于其使用 HTML5简介 新标准 引入原生多媒体支持 引 ...

  2. spring提供的可拓展接口

    接口:SmartLifecycle(https://www.jianshu.com/p/7b8f2a97c8f5)

  3. 【UE4 C++】打印字符串与输出日志

    打印屏幕 默认打印屏幕 // 打印至屏幕 FString screenMessage = "(AddOnScreenDebugMessage) Hello world!"; GEn ...

  4. SpringCloud-初见

    目录 前言 微服务概述 微服务与微服务架构 微服务优缺点 微服务技术栈 为什么选择SpringCloud作为微服务架构 SpringCloud入门 SpringCloud和SpringBoot的关系 ...

  5. Beta-功能规格说明书

    项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 团队项目-计划-功能规格说明书 一.引言 1. 项目简介 项目团队:删库跑路对不队 项目名称:题士 项目内容 ...

  6. Flutter的环境配置以及一些常见问题

    flutter & AndroidStudio flutter的下载与配置 flutter是Google推出的基于Dart语言开发的跨平台开源UI框架,能够支持安卓与iOS. flutter框 ...

  7. oo第一单元学习总结

    写在开头: 第一次接触面向对象思想和java语言,在学习以及完成作业的过程经历了一个比较痛苦的过程, 虽然在每次写作业时总是会有一些小小的抱怨,虽然写出的代码还是很差, 但是看到自己有所进步,还是感觉 ...

  8. spring、spring boot中配置多数据源

    在项目开发的过程中,有时我们有这样的需求,需要去调用别的系统中的数据,那么这个时候系统中就存在多个数据源了,那么我们如何来解决程序在运行的过程中到底是使用的那个数据源呢? 假设我们系统中存在2个数据源 ...

  9. Noip模拟71 2021.10.7

    T1 签到题 结论题,找到规律就会做 规律是每个点的度数$\mod$颜色种数,如果不是$0$则贡献一个答案 1 #include<bits/stdc++.h> 2 #define int ...

  10. vim vi 高亮第80列 Python PEP8规范 行最大长度设置

    命令模式下 :set cc=80 或者 打开 vim的配置 文件 .vimrc vim ~/.vimrc 接着你会看到你的配置文件 在配置文件中加上这样行配置代码 set cc=80 ok 现在退出v ...