使用 Python 从 Scratch 实现 K 近邻算法
基于实例的学习
K 近邻分类是基于实例学习的分类技术之一。基于实例学习的模型可以超越训练示例进行推广。为此,它们首先存储训练示例。当遇到新实例(或测试示例)时,它们会立即在存储的训练示例和这个新实例之间建立关系,为这个新实例分配目标函数值。基于实例的方法有时被称为懒惰学习方法,因为它们会推迟学习,直到遇到新实例进行预测。
这些方法不是对整个空间仅估计一次假设函数(或目标函数),而是对每个要预测的新实例进行局部和不同的估计。
K最近邻分类器学习
基本假设:
- 所有实例对应于 n 维空间中的点,其中 n 表示任何实例中的特征数量。
- 实例的最近邻居是根据欧几里得距离定义的。
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。
伪代码:
- 存储所有训练示例。
- 对每个测试示例重复步骤 3、4 和 5。
- 找到最接近当前测试样例的K个训练样例。
- 当前测试示例的y_pred = K-Nearest 训练实例中最常见的类。
- 转到步骤 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
|