KNN学习

news2024/9/27 21:23:38

学习B站 【什么是KNN(K近邻算法)?【知多少】】 https://www.bilibili.com/video/BV1Ma411F7Y4/?share_source=copy_web&vd_source=d928ac2eb2c6b562d9488d15f78dfbf4

什么是KNN

NN neural network
并不是
KNN 是k-Nearest Neighbors
K 近邻算法 是机器学习中常见的分类算法
K-Nearest neighbors for classification

要判断一个新数据的类别
就要看他的邻居都是谁

KNN 中的K指的是【K个】邻居
eg: K=3 就是通过离得最近得3个样本,来判断新数据的类别
大小、颜色是数据的特征
苹果和梨是数据的【标签】
在这里插入图片描述
欧式距离:两点之间的直线距离
坐标轴距离的绝对值的和:曼哈顿距离

K的值太小,会受到个别因素的影响
K的值太大,又会受距离较远的特殊数据影响

K的取值受问题自身和数据集大小决定

KNN算法能做什么
讲文本分词、统计词频等处理后判断文章的类型
电商、视频网站可以找到与你类似的用户

But
计算新样本与所有样本的距离
按由近及远的顺序排列后
再按K值进行分类
因此数据越多KNN的计算量越大
效率就越低
很难

# # sklearn中的k近邻分类器在sklearn库中,可以使sklearn.neighbors.KNeighborsClassifier
# from sklearn.neighbors import KNeighborsClassifier
# #设置最近的3个邻居作为分类的依据
# neigh = KNeighborsClassifier(n_neighbors= 3, weights = 'uniform', algorithm = 'auto')
#
# X=[[0],[1],[2],[3]]
# y=[0,0,1,1]
#
# neigh.fit(X,y)
#
# text = [[1.1],[2.1]]
# data = neigh.predict(text)
# print(data)
# print(neigh.score(X,y))

import csv

# 读取
import random

with open('Prostate_Cancer.csv','r') as file:
    # 以一个字典的形式来读取文件
    reader = csv.DictReader(file)

    # for row in reader:
        # orderdict 是有序的字典
        # print(row)

    # for row in reader是做一个推到
    # row把所有的row都给抽出来
    # 存到一个datas里面
    datas = [row for row in reader]

    #读取
    # [{'id': '1', 'diagnosis_result': 'M', 'radius': '23', 'texture': '12', 'perimeter': '151', 'area': '954', 'smoothness': '0.143', 'compactness': '0.278', 'symmetry': '0.242', 'fractal_dimension': '0.079'},
    # print(datas)

# 分组
# 先打乱顺序
random.shuffle(datas)
# 一个训练组,一个测试组
# 确保我的算法是有效的
# 出来是个小数,用整除
n = len(datas)//3
# print(n)

test_set = datas[0:n]
train_set= datas[n:]

# 距离
def distance(d1,d2):
    res = 0

    for key in ("radius","texture","perimeter","area","smoothness","compactness","symmetry","fractal_dimension"):
        res+=(float(d1[key])-float(d2[key]))**2

    return res**0.5

K = 5
def knn(data):
    #距离
    res=[
        {"result":train['diagnosis_result'],"distance":distance(data,train)}
        for train in train_set
    ]
    #升序排列
    sorted(res,key=lambda item:item['distance'])
    # print(res)

    #取前K个
    res2 = res[0:K]
    # print(res2)
    #加权平均
    result = {'B':0,'M':0}
    # 总距离
    sum=0
    for r in res2:
        sum+=r['distance']

    for r in res2:
        result[r['result']]+=1-r['distance']/sum

    if result['B']>result['M']:
        return 'B'
    else:
        return 'M'

correct = 0
for test in test_set:
    result = test['diagnosis_result']
    result2 = knn(test)

    if result == result2:
        correct += 1

print("准确率:{:2f}%".format(100*correct/len(test_set)))

knn(test_set[0])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/97248.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]Node.js计算机毕业设计孤儿院救助平台Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

jsp+ssm计算机毕业设计大学生就业信息检索系统【附源码】

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: JSPSSM mybatis Maven等等组成,B/S模式 Mave…

《Python多人游戏项目实战》第四节 实现房间功能

目录 4.1 确定同一聊天室玩家及房主 4.2 绘制开始或准备按钮 4.3 实现按钮功能 4.4 完整代码下载地址: 在本节,我们会在原有的程序基础上加上房间的功能。当玩家打开游戏窗口后,会自动出现在1号或者2号聊天室。只有当1号聊天室所有玩家准…

【5G MAC】Beam Failure Recovery(BFR)

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…

https建立连接加解密原理

https建立连接加解密原理 本文目录https建立连接加解密原理加密并建立连接过程CA的作用服务器获取数字证书过程客户端认证证书过程如何防止中间人攻击解决问题的方法加密并建立连接过程 1.客户端发起HTTPS请求 用户在浏览器里输入一个https网址,然后连接到server的…

EEG- gan:用于脑电图(EEG)大脑信号的生成对抗网络2018

EEG-GAN: Generative adversarial networks for electroencephalograhic (EEG) brain signals Abstract 生成对抗网络(GANs)最近在涉及图像的生成应用中非常成功,并开始应用于时间序列数据。在这里,我们将EEG- gan描述为生成脑电图(EEG)大脑信号的框架…

18-19-20 - 深入特权级转移

---- 整理自狄泰软件唐佐林老师课程 文章目录1. 初识任务状态段(TSS,Task State Segment)1.1 TSS中不同特权级的栈信息1.2 特权级转移时的栈变化1.3 问题一1.4 目标实验(操作系统雏形)1.5 编程实验(特权级转…

QT系列第3节 QT中混合UI设计

QT开发过程中,经常使用Qt designer设计器和代码方式结合来及进行ui设计,本节将介绍这两种方式混合进行ui开发。 目录 1.工程添加图片资源 2.添加菜单 3.添加工具栏 4.简单文本编辑器实现 5. QT Creator常用快捷键 1.工程添加图片资源 (…

javaee之MyBatis框架1

什么是MyBatis框架 先来说一下,什么是框架,框架就是不断升级的半成品软件 框架主要解决的问题:就是应用自身的设计与具体实现解耦,重点放到应用自身的设计上,而不是具体技术实现,具体的技术实现是由底层支…

【JVM知识】插入式注解处理器实现java编程规范检测

【JVM知识】插入式注解处理器实现java编程规范检测一、前言二、Java 规范提案三、注解分类四、java编译器五、插入式注解处理器六、代码规范检测实现(代码示例)七、项目版本统一控制实现(代码示例)一、前言 最近在看**《深入理解…

人人都能看懂的Spring原理,看完绝对不会懵逼

人人都能看懂的Spring原理,绝对不会懵逼为什么要使用Spring?Spring的核心组件Spring是如何实现IOC和DI的?定义了BeanDefinition扫描加载BeanDefinition根据BeanDefinition进行Bean的实例化和初始化实例化属性赋值保存到单例缓冲池一个Bean从创…

【Java开发】 Staffjoy 01 :项目目标及案例需求

Staffjoy 是 Spring Boot & Kubernetes 云原生微服务实践,是一个贴近生产的微服务云原生教学案例,本文依波波老师的课程。新开了一个坑,希望能搞懂微服务框架,感兴趣的同学也欢迎讨论~ 目录 1 Staffjoy 项目目标 2 Staffjoy…

【Java寒假打卡】Java基础-StringBuilder类

【Java寒假打卡】Java基础-StringBuilder类一、概述二、构造方法三、常用方法四、StringBuilder提高效率的原理五、StringBuilder实现字符串反转一、概述 也就是使用String 拼接字符串每一次都要开辟新的堆内存空间,使用StringBuilder不需要开辟新的内存空间 String…

软件架构设计的七大原则

学习设计原则是学习设计模式的基础。千万不能形成强迫症。当碰到业务复杂的场景时,需要随机应变。 在实际开发过程中,并不是一定要求所有代码都遵循设计原则,而是要在适当的场景遵循设计原则,就可以帮助开发者设计出更加优雅的代…

glibc内存管理那些事儿

Linux内存空间简介 32位Linux平台下进程虚拟地址空间分布如下图: 进程虚拟地址空间分布 图中,0xC0000000开始的最高1G空间是内核地址空间,剩下3G空间是用户态空间。用户态空间从上到下依次为stack栈(向下增长)、mmap(匿名文件映射区)、Heap堆(向上增长…

网络编程之IO多路复用

目录 一. 同步与阻塞 1.1 同步阻塞 1.2 同步非阻塞 1.3 异步阻塞 1.4 异步非阻塞 1.5 I/O多路 二.多路复用的技术 2.1 UNIX I/O Models 2.1.1 blocking I/O 2.1.2 nonblocking I/O 2.1.3 I/O Multiplexing Model 2.1.4 SIGIO 2.1.5 asynchronous I/O 2.2 IO多路复…

【拓扑排序】课程表问题

一、拓扑排序问题描述 给定:一系列任务 (A,B,C …) 任务间的依赖关系 (B 和 C 必须在 A 之前完成, …) 输出:这些任务间的合法执行顺序 (C – B – A – …) 总之&am…

「图文讲解」浏览器原理与页面渲染过程

相信大家在面试的时候面试官总是会问一个问题:“可以说下浏览器从输入url到渲染页面完成过程吗?”,非官方标准答案来啦~ 那我们首先需要先来讲一下浏览器是什么,浏览器其实就是一个应用软件,在学习操作系统…

《数据结构、算法与应用C++语言描述》线性表-数组描述

《数据结构、算法与应用C语言描述》线性表-数组描述 5表示在 数据结构算法与应用C语言描述 书中所在章节。 本文包含了《数据结构、算法与应用C语言描述》第五章主要练习题答案,给出了线性表数组描述完整测试代码。 5.1 数据对象 5.1.1 定义 数据对象(data obj…

java开发的师生评教小程序学生对老师评价老师对班级评价打分题单选题意见框系统选课系统

简介 源码1.0(源码2.0选课功能,请往下看) 师生评教小程序,学生可以对老师进行评价,老师可以对班级行进评级。管理员可以创建不同的评教模板(单选题0分或者10分,打分题0-10分,意见框…