机器学习2普通knn算法

news2024/11/24 6:33:51

文章目录

  • KNN算法-k近邻算法(k-Nearest Neighbors)前言
    • KNN优点:
    • 快捷键:
  • 一、普通knn算法是什么?
    • 解析:
  • 二、普通knn算法基础
    • 1.分布解析
    • 2.使用pycharm函数封装的形式运行KNN算法
    • 3.使用scikit-learn中的knn
  • 三、普通KNN小结


KNN算法-k近邻算法(k-Nearest Neighbors)前言

KNN优点:

1.思想极度简单;
2、应用数学知识少(近乎为零);
3、效果好;
4、可以解释机器算法使用过程中的很多细节问题;
5、更完整的刻画机器学习应用的流程;

快捷键:

Y :单元格转换成code类型。
M :单元格转换成Markdown类型。
R :单元格转换成Raw NBConvert类型。
Enter :进入编辑模式。
A :在当前单元格上方插入新单元格。
B :在当前单元格下方插入新单元格。
C :复制当前单元格。
D(两次) :删除当前单元格。
V :粘贴到当前单元格的下方。
Shift + V :粘贴到当前单元格的上方。
Z :撤销删除。
Ctrl+Shift+“-”:快速将一个代码块分割成两块

一、普通knn算法是什么?

解析:

如图,就是一个肿瘤病人相关的数据,横轴代表发现肿瘤病人肿块的大小,纵轴代表发现肿瘤块的时间,每一个病人肿瘤发现时间及大小就构成图上一个点,恶性肿瘤用蓝色点表示,良性用红色。这就是初始信息,如果现状新来一个病人(绿点),那么分析他最有可能是良性肿瘤患者还是恶性肿瘤患者?我们采用K近邻算法来算。首先取一个k值,k=3;
在所有的点中寻找离绿点最近的三个点,之后这三个点用自己的属性进行投票,如图,蓝色:红色=3:0,因此就说这个绿点有很高的概率也是蓝色的点,即这个新的病人很有可能是一个恶性肿瘤患者;
这就是k近邻算法;
在这里插入图片描述
在这里插入图片描述

二、普通knn算法基础

1.分布解析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.使用pycharm函数封装的形式运行KNN算法

使用pycharm函数封装的形式运行KNN算法:
import numpy as np
from math import sqrt
from collections import Counter
def kNN_classify(k,x_train,y_train,x):
assert 1<=k<=x_train.shape[0],“k must be valid”
assert x_train.shape[0]==y_train.shape[0],
“the size of x_train must equal to the size of y_train”
assert x_train.shape[1]==x.shape[0],
“the feature number of x must bu equal to x_train”
distances=[sqrt(np.sum((X_train-x)**2)) for X_train in x_train]
nearest = np.argsort(distances)
topK_y = [y_train[i] for i in nearest[:k]]
votes = Counter(topK_y)
return votes.most_common(1)[0][0]

import numpy as np
from math import sqrt
from collections import Counter
def kNN_classify(k,x_train,y_train,x):
    assert 1<=k<=x_train.shape[0],"k must be valid"
    assert x_train.shape[0]==y_train.shape[0],\
    "the size of x_train must equal to the size of y_train"
    assert x_train.shape[1]==x.shape[0],\
    "the feature number of x must bu equal to x_train"
    distances=[sqrt(np.sum((X_train-x)**2)) for X_train in x_train]
    nearest = np.argsort(distances)
    topK_y = [y_train[i] for i in nearest[:k]]
    votes = Counter(topK_y)
    return votes.most_common(1)[0][0]

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.使用scikit-learn中的knn

使用scikit-learn中的knn:
import numpy as np
from math import sqrt
from collections import Counter
class KNNClassifier:
# 初始化KNN分类器
def init(self,k):
assert k>=1,“k must be valid”
self.k=k
self._x_train=None
self._y_train = None
def fit(self,x_train,y_train):
“”“根据训练数据集训练knn分类器”“”
assert x_train.shape[0] == y_train.shape[0],
“the size of x_train must equal to the size of y_train”
assert self.k<=x_train.shape[0],
“the size of x_train must be at least k.”
self._x_train = x_train
self._y_train = y_train
return self
def predict(self,x_predict):
assert self._x_train is not None and self._y_train is not None,
“must fit before predict!”
assert x_predict.shape[1]==self._x_train.shape[1],
“the feature number of x_predict must be equal to x_train”
y_predict=[self._predict(x) for x in x_predict]
return np.array(y_predict)
def _predict(self,x):
“”“给一个单个预测数据x,返回x的预测结果”“”
assert x.shape[0] ==self._x_train.shape[1],
“the feature number of x must be equal to x_train”
distances = [sqrt(np.sum((X_train - x) ** 2)) for X_train in self._x_train]
nearest = np.argsort(distances)
topK_y = [self._y_train[i] for i in nearest[:self.k]]
votes = Counter(topK_y)
return votes.most_common(1)[0][0]

import numpy as np
from math import sqrt
from collections import Counter
class KNNClassifier:
    # 初始化KNN分类器
    def __init__(self,k):
        assert k>=1,"k must be valid"
        self.k=k
        self._x_train=None
        self._y_train = None
    def fit(self,x_train,y_train):
        """根据训练数据集训练knn分类器"""
        assert x_train.shape[0] == y_train.shape[0], \
            "the size of x_train must equal to the size of y_train"
        assert self.k<=x_train.shape[0],\
             "the size of x_train must be at least k."
        self._x_train = x_train
        self._y_train = y_train
        return self
    def predict(self,x_predict):
        assert self._x_train is not None and self._y_train is not None,\
        "must fit before predict!"
        assert x_predict.shape[1]==self._x_train.shape[1],\
        "the feature number of x_predict must be equal to x_train"
        y_predict=[self._predict(x) for x in x_predict]
        return np.array(y_predict)
    def _predict(self,x):
        """给一个单个预测数据x,返回x的预测结果"""
        assert x.shape[0] ==self._x_train.shape[1],\
        "the feature number of x must be equal to x_train"
        distances = [sqrt(np.sum((X_train - x) ** 2)) for X_train in self._x_train]
        nearest = np.argsort(distances)
        topK_y = [self._y_train[i] for i in nearest[:self.k]]
        votes = Counter(topK_y)
        return votes.most_common(1)[0][0]



在这里插入图片描述

在这里插入图片描述

三、普通KNN小结

knn算法可以说是机器算法中的唯一一种不需要训练过程的算法;
knn近邻算法是非常特殊的,可以被认为是没有模型的算法,为了和其他算法统一,可以认为训练数据集就是模型本身;

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

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

相关文章

《Redis基础篇》带你走进Redis的世界 ~ ⭐必看必看⭐

文章目录1. NoSQL数据库简介1.1 技术发展1.1.1. Web1.0时代1.1.2 Web2.0时代1.1.3. 解决CPU及内存压力(采用分布式)1.1.4. 解决IO压力1.2. NoSQL数据库1.2.1. NoSQL数据库概述1.2.2 NoSQL适用场景1.2.3 NoSQL不适用场景1.2.4 Memcache1.2.5 Redis1.2.6. MongoDB1.3. 行式存储数…

新的datax启动方式(直接使用java命令启动)

一开始用的python启动 &#xff08;很烦 还得有python环境 但是本着项目上线可以给客户装个python环境 也就用了&#xff09; 后续需要做个客户端 开始呢下载了源码直接再源码中启动(但是多个任务都在一个jvm中 我很抵触这样做) 又研究研究python启动的源码 发现最后还是调用…

Lerna入门与实战

一、Lerna简介 1.1 lerna背景 维护过多个package项目的同学可能都会遇到一个问题&#xff1a;package是放在一个仓库里维护还是放在多个仓库里单独维护。当package数量较少的时候&#xff0c;多个仓库维护不会有太大问题&#xff0c;但package数量逐渐增多时&#xff0c;一些…

数据驱动运营成功案例——内蒙古国大药房

国药控股国大药房内蒙古有限公司&#xff08;以下简称“内蒙古国大药房”&#xff09;&#xff0c;自2003年成立以来&#xff0c;销售额以每年35%以上的速度增长&#xff0c;现有直营门近400家&#xff0c;分布覆盖呼和浩特、包头、呼伦贝尔、乌兰察布、巴彦淖尔、赤峰、满洲里…

新加坡国立大学尤洋:我的四个选择,本质的喜欢催动长久的坚持丨青源专栏...

为了启发青年学者思考职业发展&#xff0c;激发科研灵感&#xff0c;智源社区推出青源专栏&#xff0c;定期邀请青源会员分享他们的研究思考和科研感悟。新加坡国立大学计算机系校长青年教授、青源会会员尤洋分享了他在高性能计算研究、创业经历以及在新加坡的生活所感。从求学…

006. 分割回文串

1.题目链接&#xff1a; 131. 分割回文串 2.解题思路&#xff1a; 2.1.题目要求&#xff1a; 给一个字符串 s &#xff0c;要求把 s 分割成一些子串&#xff0c;并使每个子串都是 回文串。 回文串的概念&#xff1a;正反顺序都一样的字符串。 举例&#xff1a; 输入&#…

IC模拟版图工程师高薪进阶之路,三年实现年薪30w+

模拟版图是模拟IC设计岗位的一种&#xff0c;随着国内半导体行业的不断发展&#xff0c;岗位的需求也越来越多。而每个芯片最终能够付诸于生产都离不开模拟版图设计师的功劳&#xff0c;所以目前芯片产业对于这类人才需求越来越大。 什么是模拟版图设计工程师&#xff1f; 模…

BSA牛血清白蛋白修饰Fe3O4纳米颗粒 BSA-MION

产品名称&#xff1a;BSA牛血清白蛋白修饰Fe3O4纳米颗粒 英文名称&#xff1a;BSA-MION 用途&#xff1a;科研 状态&#xff1a;固体/粉末/溶液 产品规格&#xff1a;1g/5g/10g 保存&#xff1a;冷藏 储藏条件&#xff1a;-20℃ 储存时间&#xff1a;1年 牛血清中的简单蛋白&am…

2022年第十一届认证杯数学中国数学建模国际赛小美赛:D题野生动物贸易是否应该长期禁止建模方案及代码实现

更新进展 &#xff08;1&#xff09;2022-12-2 9:00 发布预售 &#xff08;2&#xff09;2022-12-2 10:40 发布建模思路、代码以及参考文献 &#xff08;3&#xff09;待更新内容&#xff1a;进一步对全部数据分析 1 题目 野生动物市场被怀疑是当前疫情和2002年SARS疫情的…

blender中的灯光和相机

灯光环境光灯光基础灯光基本属性 EV渲染器日光面光天空盒IES灯光 &#xff08;灯光遮罩&#xff09;自发光移动摄像机切换摄像机摄像机属性环境光 在渲染视图中&#xff0c;没有任何光时&#xff0c;物体只受环境光的影响 灯光基础 1 四种灯光&#xff0c;点光&#xff0c;…

安卓期末大作业——仿番茄免费小说APP

《移动应用开发实践》实践报告 APP名称&#xff1a; 番茄免费小说 要求&#xff1a; 格式&#xff1a;宋体&#xff0c;小四号字&#xff1b;首行缩进&#xff1b;行距&#xff1a;1.5倍。 每人独立完成Android App的设计与开发App必须包含SOLite数据库操作 一、所调查的Ap…

Android -- 每日一问:能讲讲 Android 的 Handler 机制吗?

典型回答 讲清楚Android中的消息机制&#xff0c;先表述一下和Handler相关的一些类&#xff1a; Message&#xff1a;消息分为硬件产生的消息(如按钮、触摸)和软件生成的消息&#xff1b; MessageQueue&#xff1a;消息队列的主要功能向消息池投递消息(MessageQueue.enqueueMe…

疫情下为什么年轻、未婚女性更容易拿到offer

最近发现一个奇怪的现象&#xff0c;为什么会奇怪。大家别着急&#xff0c;容我慢慢道来。由于疫情开始后&#xff0c;也是大家开始躺平后&#xff0c;企业在有意、无意的疯狂裁员&#xff0c;导致人心惶惶&#xff0c;大家都不敢轻易跳槽了。甚至有的人很庆幸&#xff0c;有份…

一文弄懂JUnit5相关注解

JUnit5 JUnit是Java生态系统中最流行的单元测试框架之一。JUnit5版本包含许多令人兴奋的创新&#xff0c;其目标是支持Java8和更高版本中的新功能&#xff0c;并支持多种不同风格的测试。 Maven依赖 启动JUnit5.x.0非常简单&#xff1b;我们只需要将以下依赖项添加到pom.xml…

昆石网络 VOS3000虚拟运营支撑系统任意文件读取漏洞

漏洞描述&#xff1a; 昆石网络 VOS3000虚拟运营支撑系统 通过 %c0%ae%c0%ae 等字符绕过检测&#xff0c;可导致任意文件读取漏洞。 漏洞利用条件: 对⽤户查看或下载的⽂件没有限制或者限制绕过&#xff0c;就可以查看或下载任意⽂件 漏洞影响范围&#xff1a; VOS3000 漏…

阿里云Redis性能压力测试(二十)

文章目录1.云Redis性能压力测试2.安装redis-banchmark压测工具3.压测两节点的Redis集群4.压测四节点的Redis集群4.1.扩容集群为四节点4.2.压力测试5.压测结果对比1.云Redis性能压力测试 我们当前Redis集群是2个节点2个分片&#xff0c;使用redis-benchmark工具对Redis集群进行…

轨迹预测——day 57 基于车道交叉和考虑驾驶方式的终点生成模型的前目标车辆轨迹预测

Trajectory Prediction of Preceding Target Vehicles Based on Lane Crossing and Final Points Generation Model Considering Driving Styles导读II.问题表述与系统架构A. Trajectory Prediction for PTVs&#xff08;preceding target vehicles&#xff09;B. Position and…

python自学程序练习01:99乘法表

#完成99乘法表 #1*11 #1*22 2*24 #1*33 2*36 3*39 #很明显要两个循环print(打印99乘法表&#xff1a;) for i in range(1,10):for j in range(1, i1):print(f{j}*{i}{j * i}, end )结果如上图所示&#xff0c;很明显发现&#xff0c;是我们想要的数据但是他的形式需要有所修改。…

Vue3创建项目(四)main.js配置,避坑指南

系列文章目录 第一篇 Vue3创建项目&#xff08;一&#xff09;新手教程 第二篇 Vue3创建项目&#xff08;二&#xff09;router路由配置和使用 第三篇 Vue3创建项目&#xff08;三&#xff09;Vuex配置 目录 系列文章目录 main.js配置&#xff0c;直接看图&#xff0c;如下…

作为前端你还不懂MutationObserver?那Out了

&#x1f431;个人主页&#xff1a;不叫猫先生 &#x1f64b;‍♂️作者简介&#xff1a;前端领域新星创作者、华为云享专家、阿里云专家博主&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01; &#x1f4ab;系列专栏&#xff…