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. kafka初认识(一)

    首先贴出官网地址:https://kafka.apache.org/ 一. 简介 Kafka 是 linkedin 使用 Scala 编写具有高水平扩展和高吞吐量的分布式消息系统.Kafka 对消息保 ...

  2. 更好的 java 重试框架 sisyphus 背后的故事

    sisyphus 综合了 spring-retry 和 gauva-retrying 的优势,使用起来也非常灵活. 今天,让我们一起看一下西西弗斯背后的故事. 情景导入 简单的需求 产品经理:实现一个 ...

  3. 利用python爬取全国水雨情信息

    分析 我们没有找到接口,所以打算利用selenium来爬取. 代码 import datetime import pandas as pd from bs4 import BeautifulSoup ...

  4. 新產品SWOT分析實例

    推出新产品需要解决四个行销支柱: 价格 产品 促销 销售地点 要分析这些方面,请检查您的优势.劣势.机会和威胁,以帮助您在运行第一个广告或举行第一次促销之前将风险降至最低,并最大限度地利用资源.SWO ...

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

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

  6. 【二食堂】Alpha - 项目展示

    项目展示 1. 团队介绍 二食堂很难排队 姓名 介绍 职务 刘享 热爱游戏,尤其是RPG和metrovinia类的游戏. 会C/C++, python, java. 后端 左正 一个普通的大学生,Py ...

  7. 8M的摄像头,30fps摄像时,60hz的LCD刷新频率,请问camera每秒向BB传输多少数据,如何计算

    8M的摄像头,30fps摄像时,60hz的LCD刷新频率,请问camera每秒向BB传输多少数据,如何计算 xiang2012 Post at 2012/8/7 10:37:33 8M的摄像头,30f ...

  8. c语言编程基础入门必备知识

    数据类型 基本数据类型 类型名称说明char字符类型存放字符的ASCII码int整型存放有符号整数short短整型存放有符号整数long长整型存放有符号整数long long存放有符号整数float单 ...

  9. 20191310李烨龙Linux C语言编程基础

    Linux C语言编程基础 任务详情 0. 基于Ubuntu或OpenEuler完成下面的任务(OpenEuler有加分) 1. 选择教材第二章的一节进行编程基础练习(2.10,2.11,2.12,2 ...

  10. zabbix 监控redis 挂掉自动重启 并发送企业微信

    1.创建redis监控项[配置]-[主机]-[监控项]-创建监控项,监控6379端口(注意关闭防火墙或者开启防火墙端口6379) redis配置文件设置允许任何地址监听: 添加监控项 2.创建redi ...