Python AI教程之二十四:监督学习之KNN算法(3)使用 Python 从 Scratch 实现 K 近邻算法

使用 Python 从 Scratch 实现 K 近邻算法

基于实例的学习

K 近邻分类是基于实例学习的分类技术之一。基于实例学习的模型可以超越训练示例进行推广。为此,它们首先存储训练示例。当遇到新实例(或测试示例)时,它们会立即在存储的训练示例和这个新实例之间建立关系,为这个新实例分配目标函数值。基于实例的方法有时被称为懒惰学习方法,因为它们会推迟学习,直到遇到新实例进行预测。

这些方法不是对整个空间仅估计一次假设函数(或目标函数),而是对每个要预测的新实例进行局部和不同的估计。

K最近邻分类器学习

基本假设:

  1. 所有实例对应于 n 维空间中的点,其中 n 表示任何实例中的特征数量。
  2. 实例的最近邻居是根据欧几里得距离定义的。
An instance can be represented by < x1, x2, .............., xn >.
Euclidean distance between two instances xa and xb is given by d( xa, xb ) :

它是如何工作的?

K 近邻分类器首先存储训练示例。在预测过程中,当它遇到要预测的新实例(或测试示例)时,它会找到距离此新实例最近的 K 个训练实例。然后将 K 近邻训练实例中最常见的类分配给此测试实例。

K 的最佳选择是通过在测试数据上验证错误。K 也可通过 m 的平方根来选择,其中 m 是数据集中的示例数。

KNN 图形工作表示

在上图中,“+” 表示标记为 1 的训练实例。“-” 表示标记为 0 的训练实例。这里我们将测试实例 x t分类为其 K 个最近训练实例中最常见的类别。这里我们选择 K = 3,因此 x t被分类为“-”或 0。

伪代码:
  1. 存储所有训练示例。
  2. 对每个测试示例重复步骤 3、4 和 5。
  3. 找到最接近当前测试样例的K个训练样例。
  4. 当前测试示例的y_pred = K-Nearest 训练实例中最常见的类。
  5. 转到步骤 2。
执行:

本实现中使用的糖尿病数据集可以从链接下载。

它有 8 个特征列,例如“年龄”、“血糖”等,以及 108 名患者的目标变量“结果”。因此,我们将创建一个链接邻居分类器模型,根据这些信息预测患者是否患有糖尿病。

   

# Importing libraries

  

import pandas as pd

  

import numpy as np

  

from sklearn.model_selection import train_test_split

  

from scipy.stats import mode

  

from sklearn.neighbors import KNeighborsClassifier

  

# K Nearest Neighbors Classification

  

class K_Nearest_Neighbors_Classifier() : 

      

    def __init__( self, K ) :

          

        self.K = K

          

    # Function to store training set

          

    def fit( self, X_train, Y_train ) :

          

        self.X_train = X_train

          

        self.Y_train = Y_train

          

        # no_of_training_examples, no_of_features

          

        self.m, self.n = X_train.shape

      

    # Function for prediction

          

    def predict( self, X_test ) :

          

        self.X_test = X_test

          

        # no_of_test_examples, no_of_features

          

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潜洋

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值