首页 > 编程语言 >educoder 机器学习 --- kNN算法

educoder 机器学习 --- kNN算法

时间:2024-07-01 21:21:07浏览次数:17  
标签:kNN educoder self feature param label --- train ndarray

第一关:

#encoding=utf8
import numpy as np

from collections import Counter

class kNNClassifier(object):
    def __init__(self, k):
        '''
        初始化函数
        :param k:kNN算法中的k
        '''
        self.k = k
        # 用来存放训练数据,类型为ndarray
        self.train_feature = None
        # 用来存放训练标签,类型为ndarray
        self.train_label = None


    def fit(self, feature, label):
        '''
        kNN算法的训练过程
        :param feature: 训练集数据,类型为ndarray
        :param label: 训练集标签,类型为ndarray
        :return: 无返回
        '''

        #********* Begin *********#
        self.train_feature = feature
        self.train_label = label
        #********* End *********#


    def predict(self, feature):
        '''
        kNN算法的预测过程
        :param feature: 测试集数据,类型为ndarray
        :return: 预测结果,类型为ndarray或list
        '''

        #********* Begin *********#
        result = []
        for data in feature:
            dist = np.sqrt(np.sum((self.train_feature - data) ** 2, axis = 1)) # 欧氏距离
            neighbor = np.argsort(dist)[0 : self.k]
            kLabel = (self.train_label[i] for i in neighbor)
            key, value = Counter(kLabel).most_common(1)[0] # 如果k个邻居中出现次数最多的label不止一个,要取总距离最小的label,这里直接取第一个(懒得写了
            result.append(key)
        return result
        #********* End *********#

第2关:

from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler

def classification(train_feature, train_label, test_feature):
    '''
    对test_feature进行红酒分类
    :param train_feature: 训练集数据,类型为ndarray
    :param train_label: 训练集标签,类型为ndarray
    :param test_feature: 测试集数据,类型为ndarray
    :return: 测试集数据的分类结果
    '''

    #********* Begin *********#
    #实例化StandardScaler函数
    scaler = StandardScaler()
    train_feature = scaler.fit_transform(train_feature)
    test_feature = scaler.transform(test_feature)
   
    #生成K近邻分类器
    clf = KNeighborsClassifier()
    #训练分类器
    clf.fit(train_feature, train_label)
    #进行预测
    predict_result = clf.predict(test_feature)
    return predict_result 
    #********* End **********#

 

标签:kNN,educoder,self,feature,param,label,---,train,ndarray
From: https://www.cnblogs.com/kafuuchino/p/18278862

相关文章

  • Luogu P6864 [RC-03] 记忆
    先考虑没有\(3\)操作该怎么做。对于当前字符串把其分成多组互不包含的括号的形式,即\((\cdots)()()\)这样,考虑经过\(1/2\)操作后对互不包含的括号组数\(b\)和答案\(v\)会产生什么影响。\(1\)操作,加上过后便会多上一组互不包含的括号,\(b\leftarrowb'+1\),同时这个......
  • 为Ubuntu-24.04-live-server-amd64磁盘扩容
    系列文章目录Ubuntu-24.04-live-server-amd64安装界面中文版文章目录系列文章目录前言一、检查系统本身情况1.用lsblk命令查看自己系统磁盘是什么状态2.用df-h命令查看文件系统的磁盘空间使用情况3.解决Ubuntu-24.04磁盘空间只能用一半的问题3-1扩展逻辑卷:3-2.......
  • springcloud-gateway 网关组件中文文档
      SpringCloud网关GreenwichSR5该项目提供了一个基于Spring生态系统的API网关,其中包括:Spring5,SpringBoot2和项目Reactor。SpringCloud网关的目的是提供一种简单而有效的方法来路由到API,并向它们提供跨领域的关注,例如:安全性,监视/度量和弹性。  如......
  • 大专Java基础系列----理论
    目录        前言        问答题        判断题        选择题        填空题        编程题        综合题        程序阅读题前言期末的复习资料,出自老师内容,仅供参考。问答题1、float和do......
  • ESP32-点亮TFT2.4电阻触摸屏 学习笔记
    1、下载好arduinoIDE开发软件IDE(IntegratedDevelopmentEnvironment),译为集成开发环境,相当于编辑器编译器加连接器+其他。ArduinoIDE就是Arduino团队提供的一款专门为Arduino设计的编程软件,使用它,我们便能将程序从代码上传至Arduino主板。去官网下载:Software|Arduino,也......
  • ros2 - microros - 雷达 -可视化点云
    上一节完成了指定角度距离的测量这一节我们将其合成ROS的laserscan消息,并将其通过microros发布到上位机,最终实现rviz2的可视化。 一、雷达消息介绍使用指令ros2interfaceshowsensor_msgs/msg/LaserScan,可以看到ROS2对雷达数据接口的定义。#Singlescanfromaplanarlas......
  • 玄机流量特征分析-蚁剑流量分析
    玄机流量特征分析-蚁剑流量分析1.木马的连接密码是多少2.黑客执行的第一个命令是什么3.黑客读取了哪个文件的内容,提交文件绝对路径4.黑客上传了什么文件到服务器,提交文件名5.黑客上传的文件内容是什么6.黑客下载了哪个文件,提交文件绝对路径1.过滤http,发现连接密码:12.点......
  • Java知识点汇总--基础篇
    一、Java基础信息程序(application):一组有序的指令集合指令:就是命令的意思java的组成:javase/j2se(java标准版),javaee/j2ee(java企业版)(13几种技术)java的应用:internet程序(b/s)和桌面应用程序(c/s)browser什么是java:是一种面向对象的高级编程语言安装jdk,下载,8......
  • ros - Adafruit ESP32 Feather与树莓派(Raspberry Pi)比较
    AdafruitESP32Feather和树莓派(RaspberryPi)都是广泛使用的硬件平台,分别在嵌入式系统和单板计算机领域具有各自的优势。以下是它们的详细比较,以及它们对机器人操作系统(ROS)的支持程度的分析。1.基本特性比较AdafruitESP32Feather核心处理器:双核XtensaLX6(最高240MHz)。......
  • ARM Cortex-A 与 STM32 F107
    ARMCortex-A和STM32F107是两种不同的微控制器架构,它们在性能、应用场景和硬件支持方面有很大的差异。以下是它们的详细比较和分析:1.基本特性比较ARMCortex-A系列ARMCortex-A是ARM架构中的高级应用处理器系列,专为复杂的计算任务和高级应用设计。它广泛用于智能手机、......