唤醒手腕2025年最新机器学习K近邻算法详细教程

KNN(K-Nearest Neighbors) 是一种 基于实例(Instance-based) 的监督学习算法,常用于 分类 和 回归。

欧式距离 Euclidean Distance

欧氏距离(Euclidean Distance)。欧氏距离 是最常用的距离度量方法,用来衡量两个点在欧几里得空间(Euclidean Space)中的"直线距离"。简单来说,它就是我们平时理解的"直线距离"或"最短距离"。

距离类型 定义特点 适用场景
欧氏距离 平方和再开根号 连续数值、低维空间
曼哈顿距离 绝对值差的和 离散格点、路径型问题
闵可夫斯基距离 泛化形式 (p 参数) 可调节灵活性
余弦距离 基于角度相似度 文本、向量方向重要的场景

scikit-learn

scikit-learn 是 Python 生态中最主流、最成熟的 机器学习(Machine Learning)库 之一。它提供了从 数据预处理 → 模型训练 → 评估 → 调参 → 部署 的完整流程支持。

https://scikit-learn.org/

核心功能模块

模块 作用 示例类
数据预处理 (sklearn.preprocessing) 标准化、归一化、编码、缺失值处理 StandardScaler, OneHotEncoder, LabelEncoder, SimpleImputer
特征工程 (sklearn.feature_selection) 特征选择、降维 SelectKBest, PCA
模型构建 (sklearn.linear_model, neighbors, tree, svm, ensemble, etc.) 各类监督/无监督学习算法 LogisticRegression, KNeighborsClassifier, RandomForest, SVC, KMeans
模型评估 (sklearn.metrics, model_selection) 精度评估、交叉验证、划分数据集 train_test_split, cross_val_score, accuracy_score, confusion_matrix
模型调优 (sklearn.model_selection) 网格搜索、随机搜索 GridSearchCV, RandomizedSearchCV
Pipeline 管线化 (sklearn.pipeline) 将预处理与模型组合成统一流程 Pipeline, ColumnTransformer

scikit-learn 工作流程(核心思想)

阶段 方法 说明
训练阶段 fit(X, y) 训练模型或学习参数
预测阶段 predict(X) 输出预测结果
评分阶段 score(X, y) 返回模型性能指标(如分类精度)
复制代码
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score

# 1. 划分数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 2. 标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# 3. 建立模型
knn = KNeighborsClassifier(n_neighbors=5)

# 4. 训练
knn.fit(X_train, y_train)

# 5. 预测
y_pred = knn.predict(X_test)

# 6. 评估
print("Accuracy:", accuracy_score(y_test, y_pred))
算法类别 sklearn 模块 示例模型
线性模型 sklearn.linear_model LinearRegression, LogisticRegression, Ridge, Lasso
树模型 sklearn.tree DecisionTreeClassifier, DecisionTreeRegressor
集成模型 sklearn.ensemble RandomForest, GradientBoosting, AdaBoost
支持向量机 sklearn.svm SVC, SVR
邻近算法 sklearn.neighbors KNeighborsClassifier, KNeighborsRegressor
朴素贝叶斯 sklearn.naive_bayes GaussianNB, MultinomialNB
聚类 sklearn.cluster KMeans, DBSCAN
降维 sklearn.decomposition PCA, NMF

数据预处理模块常用工具

功能 说明
缺失值处理 SimpleImputer 填充缺失值(均值、中位数等)
标准化 StandardScaler 均值为 0,方差为 1
归一化 MinMaxScaler 映射到 [0,1] 区间
类别编码 OneHotEncoder, LabelEncoder 将分类变量转为数字
特征选择 SelectKBest, VarianceThreshold 保留重要特征

模型评估

python 复制代码
from sklearn.metrics import confusion_matrix, classification_report

print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))

网格搜索(GridSearchCV)

python 复制代码
from sklearn.model_selection import GridSearchCV

param_grid = {'n_neighbors': [3, 5, 7, 9]}
grid = GridSearchCV(KNeighborsClassifier(), param_grid, cv=5)
grid.fit(X_train, y_train)
print(grid.best_params_, grid.best_score_)

Pipeline 管线化

将预处理与模型打包为一个整体,避免"数据泄漏",简化流程。

python 复制代码
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier

pipe = Pipeline([
    ('scaler', StandardScaler()),
    ('knn', KNeighborsClassifier(n_neighbors=5))
])

pipe.fit(X_train, y_train)
y_pred = pipe.predict(X_test)

kaggle 概述

Kaggle 是全球最大的数据科学和机器学习社区和竞赛平台,由 Google 在 2017 年收购。它被广泛认为是数据科学领域的"黄金标准"实践平台,无论是对于初学者还是资深专家。

核心定位:提供一个环境,让数据科学家、机器学习工程师、统计学家和数据分析师可以协作、竞争、学习,并解决真实世界的数据问题。

复制代码
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer
import joblib

heart_disease_data = pd.read_csv('./heart.csv')

heart_disease_data.dropna(inplace=True)

# heart_disease_data.info()


# print(heart_disease_data.head())

# 数据集划分

X = heart_disease_data.drop(columns='target', axis=1)
Y = heart_disease_data.target

X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.3, random_state=42)

# print(X_train.shape, X_test.shape, y_train.shape, y_test.shape)

numerical_features = [
    "age",        # 年龄,连续数值
    "trestbps",   # 静息血压
    "chol",       # 胆固醇
    "thalach",    # 最大心率
    "oldpeak",    # 运动引起的ST下降
    "ca"          # 主要血管数量(0-4)

]

categorical_features = [
    "cp",         # 胸痛类型(4种分类:0-3)
    "restecg",    # 静息心电图结果(0-2)
    "slope",      # ST段斜率(0-2)
    "thal"        # 地中海贫血(1=正常,2=固定缺陷,3=可逆缺陷)
]

binary_features = [
    "sex",        # 性别(1=男,0=女)
    "fbs",        # 空腹血糖 > 120 mg/dl(1=是,0=否)
    "exang"       # 运动诱发心绞痛(1=是,0=否)
]


columnTransformer = ColumnTransformer(
    transformers=[
        ("num", StandardScaler(), numerical_features),
        ("cat", OneHotEncoder(drop="first"), categorical_features),
        ("bin", "passthrough", binary_features)
    ]
)

X_train = columnTransformer.fit_transform(X_train)
X_test = columnTransformer.transform(X_test)

print(X_train.shape)
print(X_test.shape)

knn = KNeighborsClassifier(n_neighbors=3)

knn.fit(X_train, y_train)


print(knn.score(X_test, y_test))

joblib.dump(knn, 'knn_model.joblib')
相关推荐
love530love3 分钟前
修复 ComfyUI 插件 ComfyUI-BiRefNet-ZHO 报错 - Windows
服务器·人工智能·windows·python·birefnet-zho
xunmaiai 88813 分钟前
揭秘OZON高性价比选品:如何甄别真正靠谱的合作公司?
大数据·人工智能·python
游了个戏16 分钟前
我用AI做了个小游戏(一)
人工智能·游戏·微信
Mr数据杨24 分钟前
多标签文本分类实战案例从 Kaggle TechNist 看小样本建模与落地
机器学习·数据分析·kaggle
MRDONG124 分钟前
Hermes Agent(爱马仕):一个会“成长”的 AI 智能体
人工智能·语言模型·自然语言处理·prompt
GISer_Jing24 分钟前
笑不活了!蒸馏Skill竟能复刻前任、挽留同事?三大热门项目+完整地址汇总
前端·人工智能
Agent产品评测局29 分钟前
企业流程异常处理自动化落地,预警处置全流程实现方案:2026企业“数字免疫系统”构建指南
运维·人工智能·ai·chatgpt·自动化
配奇29 分钟前
PyTorch 核心使用
人工智能·pytorch·python
gjhave30 分钟前
强化学习论文(A3C)
人工智能·机器学习
roman_日积跬步-终至千里41 分钟前
【深度学习】国科大:CIFAR-100 图像分类项目
人工智能·深度学习·分类