如何通过超简易模型进行推理流程示例?
摘要:前提: 数据集概念 模型的推理规则,由数据训练而来 流程: 以下是一个最基础、无需训练的 K近邻(KNN)分类器,并用它来对经典的鸢尾花数据集进行分类 数据集:经典的鸢尾花数据集,它包含150朵花的4个特征(花萼长
前提:
数据集概念
模型的推理规则,由数据训练而来
流程:
以下是一个最基础、无需训练的K近邻(KNN)分类器,并用它来对经典的鸢尾花数据集进行分类
数据集:经典的鸢尾花数据集,它包含150朵花的4个特征(花萼长宽、花瓣长宽)和3个类别标签
特征矩阵(X):二维数组(150,4),float类型
标签向量(Y):一维向量,映射为int类型
推理规则:KNN算法【非逻辑分支if/then/else】,基于空间几何和统计的两步推理过程
【距离度量——欧氏距离(也可以是其它)】->【投票决策 —— 基于邻域的统计共识】
示例代码:simple_knn.py
"""
K近邻(KNN)分类器
功能:使用纯Python实现KNN算法,并在鸢尾花数据集上测试
"""
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
import numpy as np
from collections import Counter
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_report
class SimpleKNN:
"""K近邻分类器"""
def __init__(self, k=3, distance_metric='euclidean'):
"""
初始化KNN模型
参数:
- k: 邻居数量,默认3
- distance_metric: 距离度量方式,可选 'euclidean'(欧氏) 或 'manhattan'(曼哈顿)
"""
self.k = k
self.distance_metric = distance_metric
self.X_train = None
self.y_train = None
def fit(self, X, y):
"""
"训练"模型:实际只是记住训练数据
这是基于实例的学习,没有参数优化过程
参数:
- X: 训练特征,形状 (n_samples, n_features)
- y: 训练标签,形状 (n_samples,)
"""
self.X_train = np.array(X)
self.y_train = np.array(y)
print(f"[训练完成] 模型已记住 {len(X)} 个训练样本")
return self
def _compute_distance(self, x1, x2):
"""
计算两个样本点之间的距离
参数:
- x1, x2: 两个样本的特征向量
返回:
- 距离值
"""
if self.distance_metric == 'euclidean':
# 欧氏距离:sqrt(Σ(x1_i - x2_i)²)
return np.sqrt(np.sum((x1 - x2) ** 2))
elif self.distance_metric == 'manhattan':
# 曼哈顿距离:Σ|x1_i - x2_i|
return np.sum(np.abs(x1 - x2))
else:
raise ValueError(f"不支持的距离度量方式: {self.distance_metric}")
def _predict_one(self, x):
"""
预测单个样本的类别
参数:
- x: 单个样本的特
