自定义K-领进算法的实现

矩阵(斐波那契数列和Strassen矩阵)下的分治算法及其分治算法的改进(上) 我昨天在想,应试教育真的会把知识学死吗。我认为这只是一个借口,教育本来就不是活的,如果我们不主动去思考,去应用。而只是一味的为了考试而去学习,当然会把知识学的没有用处。所以说不是应试教育把知识学死了,而是你把知识学死了。 《增广贤文》里面有一句老话是:师傅领进门,修行在个人。前辈将知识传给我们,我们是要在其上进行再提炼,发展到我们的当代生活中。所以才有我们现在的美好生活。文化这个东西是不断再传承的... 阅读详情

k-邻近算法精髓在于欧式距离公式,我们就是模仿这个过程来实现算法,代码如下:

import numpy as np

def knn_classify(dataset, labels, new_input, k, weight='uniform'):
    '''
    dataset: 输入的训练数据集,即 x_train
    labels: 输入的训练集对应的类别标签, 即 y_train
    new_input: 新输入待分析的数据, 即 x_test,此函数的缺点就是只能输入一个待分析的数据
    k: 邻进数
    weight: 决策规划  "uniform" 多数表决法,"distance" 距离加权表决法
    '''
    sample_index = dataset.shape[0]
    print(sample_index)
    
    #step1:计算待分类数据与训练集各数据点的距离(欧氏距离公式)
    diff1 = np.tile(new_input,(sample_index, 1)) - dataset
    #print(diff1)
    diff2 = diff1**2
    #按列相加
    distance = (diff2.sum(axis=1))**0.5
    #print(distance)
    #将distance升序排序,并取最近的k个数
    sort_distance = distance.argsort()
    #print(sort_distance)
    
    #定义一个空字典,用于存放k个领进点的分类计数
    class_count = {}
    
    for i in range(k):
        #第i个领进点在distance数组中的索引,对应的分类
        votelabel = labels[sort_distance[i]]
        if weight == 'uniform':
            # votelabel作为字典的key,对相同的key值累加(多数表决法)
            class_count[votelabel] = class_count.get(votelabel, 0) + 1
        elif weight == 'distance':
            # 对相同的key值按距离加权累加(加权表决法)
            class_count[votelabel] = class_count.get(votelabel, 0) + (1/distance[sort_distance[i]])
        else:
            print ("分类决策规则错误!")
            print ("\"uniform\"多数表决法\"distance\"距离加权表决法")
            break
        
    #对k个领进点降序排序
    sorted_class_count = sorted(class_count.items(), reverse=True)
    if weight == 'uniform':
        print ("新输入到训练集的最近%d个点的计数为:"%k,"\n",class_count)
        print ("新输入的类别是:", sorted_class_count[0][0])
    elif weight == 'distance':
        print ("新输入到训练集的最近%d个点的距离加权计数为:"%k,"\n",class_count)
        print ("新输入的类别是:", sorted_class_count[0][0])
        
    return sorted_class_count[0][0]

然后创建数据集

sample1 = np.array([[96,13984],[120,20380],[100,10000],[116,9800],[85,14000],[90,11061],[85,9400],[69,11950],[98,12000],[99,11500],
           [92,8500],[128,11061],[100,14000],[84,9500],[99,12500],[85,8000],[130,12500],[85,12647],[85,11061],[108,12500]])

target1 = np.array(['A','A','A','A','A','B','B','B','B','B',
           'C','C','C','C','C','D','D','D','D','D'])

x_test = np.array([98,12540])

然后调用函数预测结果:

p = knn_classify(sample1, target1, x_test, 5)
print(p)

得到的结果为:

新输入到训练集的最近5个点的计数为: 
 {'D': 1, 'C': 2, 'B': 1, 'A': 1}
新输入的类别是: D
D

验证部分:我们用KNN算法来验证我们的结果

from sklearn.neighbors import KNeighborsClassifier

knnclf = KNeighborsClassifier(n_neighbors=5)

#输入同样的数据
sample1 = [[96,13984],[120,20380],[100,10000],[116,9800],[85,14000],[90,11061],[85,9400],[69,11950],[98,12000],[99,11500],
           [92,8500],[128,11061],[100,14000],[84,9500],[99,12500],[85,8000],[130,12500],[85,12647],[85,11061],[108,12500]]

target1 = np.array(['A','A','A','A','A','B','B','B','B','B',
           'C','C','C','C','C','D','D','D','D','D'])
           
x_test = np.array([98,12540])

进行训练和分类

knnclf.fit(sample1, target1)

y_test = knnclf.predict(x_test)
y_test

得到的结果为:

array(['D'], dtype='<U1')

我们自定义的和KNN算法结果一致!!
我们也用鸢尾花数据再来测试

from sklearn.datasets import load_iris

iris = load_iris()
data = iris.data
x_train = data[:,2:][:120]
y_train = iris.target[:120]


x_test = np.array([5.8,1.8])

p = knn_classify(x_train, y_train, x_test, 5)
print(p)

结果为:

新输入到训练集的最近5个点的计数为: 
 {2: 5}
新输入的类别是: 2
2

同样用KNN算法来验证

from sklearn.datasets import load_iris

iris = load_iris()
x_train = iris.data[:,2:][:120]
y_train = iris.target[:120]
x_test = np.array([[5.8,1.8]])

knnclf = KNeighborsClassifier(n_neighbors=5)
knnclf.fit(x_train, y_train)

y_test = knnclf.predict(x_test)
y_test

结果为:

array([2])

同样也是一样的!!ヾ(๑╹◡╹)ノ"

Carsim2019与Simulink (Matlab2018b)联合仿真成功(超详细) Carsim与Simulink联合仿真成功 阅读详情

相关推荐

通义千问AI模型对接飞书机器人-集成飞书机器人(2-2)

http请求地址上一篇百炼平台配置的应用地址。

hefaji的博客 1917

漫谈 Clustering (2): k-medoids

上一次我们了解了一个最基本的 clustering 办法 k-means ,这次要说的 k-medoids 算法,其实从名字上就可以看出来,和 k-means 肯定是非常相似的。事实也确实如此,k-medoids 可以算是 k-means 的一个变种。k-medoids 和 k-means 不一样的地方在于中心点的选取,在 k-means 中,我们将中心点取为当前 cluster 中所有数据点的平均值:Rough Collie并且我们已经证明在固定了各个数据点的 assignment 的情况下,这样

smoothylx的专栏 2382

(十)安卓开发中的Activity之间的通信使用详解

下面将结合代码和具体在 Android 开发中,Activity 之间的通信是非常常见且核心的功能之一使用场景,详细讲解这几种方式。

cuijiying的博客 1281

k近邻法

本文介绍KNN算法,包括距离度量,k值的选择,及分类决策规则。kd树待补充。

浅梦的学习笔记 563

Cadence IC618与Spectre231安装配置全攻略:License、环境变量与依赖检查

EDA工具部署中,License管理与环境变量隔离是核心难点。FlexLM作为通用授权机制,通过守护进程和端口配置实现工具授权;环境变量则控制工具路径与库加载顺序,避免版本冲突。合理配置可确保IC618与Spectre231稳定运行,提升仿真效率。典型应用场景包括模拟IC设计、高校实验室及企业级EDA环境。本文聚焦Cadence IC618与Spectre231的安装实践,详解License配置、环境隔离及依赖检查,助你快速搭建可靠设计环境。

weixin_28721917的博客 332

智能车赛道识别:八邻域算法的实战解析与优化

本文深入解析了智能车赛道识别中八邻域算法的核心原理与实战优化。作为兼顾性能与稳定性的经典方案,该算法通过模拟探险家环顾八方的策略,能精准追踪弯道与直道边界。文章详细拆解了代码逻辑,并提供了边界平滑、异常处理及应对十字路口、环岛等复杂场景的关键优化策略,助力开发者提升智能车视觉系统的鲁棒性与实时性。

weixin_29228781的博客 265

Java程序员月薪30K和月薪3K差别在哪?掌握这三大技术立马加薪15K!

抛开工作经验,项目经验,学历背景,单从技术点分析,哪些方面可以判断一个java程序员的技术扎实程度,怎样才能知道他值多少月薪?凭啥人家月薪30000,你月薪3000?大雄将用本篇文章为你解答。 月薪30K的Java程序员 怎样判断一个程序员的技术是否扎实? 除了项目实战外,在面试等情况下,最好能给被考核人一台可以上Google的电脑,然后给其一段自己的空间和时间,比如一个人在小会议室里10-...

javaxiaoheibai的博客 1001

CircuitBreaker Resilience4J 介绍

在分布式环境中,我们的应用可能会面临着各种各样的可恢复的异常(比如超时,网络环境异常),此时我们可以利用不断重试的方式来从异常中恢复(Retry Pattern),使整个集群正常运行。然而,也有一些异常比较顽固,突然发生,无法预测,而且很难恢复,并且还会导致级联失败(举个例子,假设一个服务集群的负载非常高,如果这时候集群的一部分挂掉了,还占了很大一部分资源,整个集群都有可能遭殃)。如果我们这时还是不断进行重试的话,结果大多都是失败的。

zzhongcy的专栏 3543

邻近 算法 理论

K近邻模型由三个基本要素组成: 距离度量; k值的选择; 分类决策规则K近邻算法的核心在于找到实例点的邻居。 估算不同样本之间的相似性(SimilarityMeasurement)通常采用的方法就是计算样本间的“距离”(Distance),相似性度量方法有:欧氏距离、余弦夹角、曼哈顿距离、切比雪夫距离等。 欧氏距离 欧氏距离(EuclideanDistance)是最易于理解的一种距离计算

mllhxn的专栏 1569

大模型呼叫中心场景分享之六:大模型外呼IT运维告警——智能监控与自动化响应的未来

在数字化运维(IT Operations)中,实时监控系统健康状态并及时响应告警是保障业务连续性的关键。传统的IT告警方式(如邮件、短信、钉钉/企业微信通知)存在信息过载、响应延迟、人工处理效率低等问题。而大模型(LLM)与语音技术(TTS/ASR)的结合,为IT运维告警提供了更智能的解决方案——大模型外呼告警系统。大模型外呼告警系统正在重新定义IT运维的效率和体验。通过实时语音交互+智能自动化,企业能够将平均故障修复时间(MTTR)从小时级缩短至分钟级。

开源呼叫中心系统FreeIPCC的博客 925

(七)独立按键

(七)独立按键

m0_52555663的博客 1732

Java程序员月薪30K和月薪3K差别在哪?

开工作经验,项目经验,学历背景,单从技术点分析,哪些方面可以判断一个java程序员的技术扎实程度,怎样才能知道他值多少月薪?凭啥人家月薪30000,你月薪3000? 月薪30K的Java程序员 怎样判断一个程序员的技术是否扎实? 除了项目实战外,在面试等情况下,最好能给被考核人一台可以上Google的电脑,然后给其一段自己的空间和时间,比如一个人在小会议室里10-20分钟。 然后,另接一台显示器,...

javarrr的博客 643

ROS2 CANopen 使用教程

第一步是定义一个结构,用于保存有关接头和相关 CANopen 数据的信息。该结构是 CANopen 网络的基础,可确保存储所有相关数据并在需要时进行访问。

机器人控制与仿真应用 3693

01算法与数据结构体系课之线性查找算法

什么是算法 算法:一系列解决问题的,清晰,可执行的计算机指令 算法应该具有: 有限性 确定性:不会产生二义性 可行性 有输入 有输出 线性查找法 线性查找又称顺序查找,是一种最简单的查找方法,它的基本思想是从第一个记录开始,逐个比较记录的关键字,直到和给定的K值相等,则查找成功;若比较结果与文件中n个记录的关键字都不等,则查找失败。 线性查找实现代码 public class LinearSearch { private LinearSearch(){}; publi

qq_37044138的博客 588

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

从外包月薪5K到阿里月薪15K,看看这篇文章吧!

前言 本文想分享的是如何准备阿里面试的以及面试过程的所想所得,希望能帮到你。 首先,可能要让你们失望的是,这篇文章不会有大篇幅的面试题答案。如果想要看这方面的内容,可以看我之前的文章。感谢关注 【阿里P7级全套高级学习资料】五大专题: 1.高级UI,自定义View** UI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。 不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧! 2.NDK开发 音视频,人工智能,这些是未来没

261

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

伪随机数生成——梅森旋转(Mersenne Twister/MT)算法笔记

前言 最近在看吴军博士的《数学之美》一书,把很多之前没注意到,没用到,甚至不知道怎么用的数学知识和实际问题联系了起来,感觉打开了新世界的大门一样。这本书很多知识点还有技术都是点到为止,并没有深入,所谓师傅领进门,修行在个人吧。所以从本篇开始,博主将对数学之美一书中的一些提到的东西做个总结。不对的地方希望各位看官大佬们多多指正。 在本书第16章《信息指纹及其应用》一文中,介绍到了现在常用的

tick_tock97的博客 3万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

生成n套数位加减乘除_伪随机数生成:梅森旋转(Mersenne Twister/MT)算法

(给算法爱好者加星标,修炼编程内功)作者:tik_tokc97https://blog.youkuaiyun.com/tick_tock97/article/details/78657851前言最近在看吴军博士的《数学之美》一书,把很多之前没注意到,没用到,甚至不知道怎么用的数学知识和实际问题联系了起来,感觉打开了新世界的大门一样。这本书很多知识点还有技术都是点到为止,并没有深入,所谓师傅领进门,修...

weixin_39616348的博客 406

小厂10K vs 大厂20K,咋选?

作者:阿秀校招八股文学习网站:https://interviewguide.cn这是阿秀的第「190」篇原创你好,我是阿秀。考虑到十一过后可能大多数互联网公司都会陆陆续续开奖,接下来一段时间也会为阿秀的学习圈中一些小伙伴提供一些offer选择的建议和意见,并将其中一些比较典型的offer选择的分享一下。先说一下这篇文章的主人公并不是今年的应届生,而是22届的一名学弟,其中文中的对话也是发生在去年2...

博客 360

我是怎么学习《数据结构与算法之美》的?

我在这里分享一下我的学习思路,我将这个看起来困难的过程分成了几部分来完成。 第一部分,数据结构和算法的基础知识部分。如果在大学学过这⻔课,在专栏里,你会看到很多熟 悉的描述。有些基础比较好的同学会质疑写这些知识的必要性。这大可不必,因为每个人的基础不 一样,为了专栏内容的系统性和完整性,老师肯定要把这些基础知识重新讲述一遍的。对于这一部 分内容,如果你的基础比较好,可以像学其他课程一样,在上下班或...

科技区软件类AI博主 🔍 专注 AI 工具测评 / 前沿产品深度拆解 / 行业趋势预判 🚫 拒绝科技玄学,只讲人话干货 —— 从工具使用到商业落地,搭建可复用的 AI 应用框架 142

分布式锁实现与面试技术深度解析

分布式锁是分布式系统中保证数据一致性的关键技术,其核心原理是通过共享存储系统实现多节点间的互斥访问。常见的实现方案包括基于MySQL、Redis和Zookeeper等,每种方案在性能指标(如Redis SETNX的10w QPS)、故障容错(如网络分区处理)等方面各有优劣。在实际工程中,分布式锁的应用场景广泛,如秒杀系统、分布式任务调度等,需要根据业务需求权衡CAP定理中的一致性、可用性和分区容错性。本文通过面试场景还原,深入剖析分布式锁的技术细节和性能优化策略,帮助开发者掌握从方案选型到故障排查的全链路能

weixin_33391446的博客 300

如果孔子是个程序员,一定是P14

点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 近日,研读《史记》,读到孔子跟师襄子学弹琴这一段,颇受启发,整理出来与大家分享,故事讲述了孔子如何学习弹琴,达到登峰造极的地步。仔细想想,其修炼方法,放在学习编程上,乃至学习任何一门技能上,都是相通的。 01 孔子年轻的时候,对音乐产生了极大的兴趣,找到了当时弹琴弹得最牛的师襄子,要拜师学艺,孔子比...

技术领导力 1万+

知识图谱|各生命周期主流算法 & 实践

知识图谱是大数据时代知识表示的主要形态之一,是人工智能应用不可或缺的基础资源,自2012年提出至今,受到学术界和产业界越来越多的关注。伴随着人工智能浪潮,知识图谱迅速发展,已经在语义搜索、...

Kaiyuan_sjtu的博客 1238

扫地阿姨看完都学会了!BTAJ大厂最新面试题汇集,算法太TM重要了

开头 程序员面试,除了面试技术外,有的公司经常会问应聘者和技术无关的问题,考验求职者的综合能力,并以此作为是否录用的依据,很多时候这类问题往往没有标准答案,就看求应聘者临场的反应能力如何。 张工是一名Android开发人员,近日到某知名互联网公司面试,面谈到最后时,面试官问了张工这样一个问题: 你觉得现在做Android还有前途吗? 张工被问得有点措手不及。 现在都在说互联网寒冬,尤其是移动端开发市场趋于饱和状态,我之前找工作时,也陆陆续续找了一个月,应该是我技术水平不过关。 现在做Android还有前途吗

184

2022软工K班第一次博客作业

软件工程学习开始啦!

a7days的博客 291

安卓开发指南!Github标星25K+超火的Android实战项目,成功定级腾讯T3-2

开头 1、一定要把基本的数据结构,经典的算法,Unix编程,程序编译链接及计算机原理等基础知识扎牢,这些会长远影响你的职业发展。 2、 推荐从C语言入门,不单是因为很多操作系统、网络协议栈开源代码由C/C++实现,更多是因为C语言自身的特性:作为高级语言用户无需关注底层细节,同时能直观的看到数据流向。而且C相对语法规则较为简单,可以短时间的上手应用。最重要的是,遵循C/C++、python的学习方式,比直接学习python更能清晰的知道自己程序的内存等性能状况。 1. 我们生活的每天都面临着很严重的挑战 虽

clhcowboy的博客 260

农民工看完都学会了!Android高级工程师每日面试题精选,2年以上经验必看

开头 大家都知道,找工作的时候高薪不好拿,一般人能拿 30k 的 offer 就不错了。据我所知百分之九十的Android开发都在30k以下! 但是在我的群里有一位同学,平时就喜欢研究源码和框架,然后经过一个月的刷题,跳槽到头条,拿到了 50k 的月薪,我觉得太厉害了,羡慕嫉妒恨啊。 后来我和他聊了下,发现他技术确实好,在刷题期间,除了算法,他还把自己的 Android 笔记拿了出来,里面都是他平时的积累,内容全面,深度也有,有插件化、依赖注入,还有各种架构知识。 果然,只要技术好,走到哪里都不怕啊。大家在

Sunbuyi的博客 109
上一篇: python五大算法之插入排序和归并排序
下一篇: 利用jieba进行分词,词云图展示
pyswt
博客等级 码龄8年 45粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值