唤醒手腕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')
相关推荐
love530love1 分钟前
EPGF 新手教程 11在 PyCharm(中文版 GUI)中创建 uv 环境,并把 uv 做到“项目自包含”(工具本地化为必做环节)
ide·人工智能·python·pycharm·conda·uv·epgf
Fabarta技术团队3 分钟前
响应北京人工智能行动计划,枫清科技共筑AI创新高地
人工智能·科技
得贤招聘官4 分钟前
判断AI招聘系统成熟度的3个硬指标
人工智能
Lkygo4 分钟前
ragflow 构建本地知识库指南
人工智能·python·语言模型
晟诺数字人5 分钟前
数字人、AI数字人、虚拟数字人、3D数字人之间的区别于应用场景
大数据·人工智能·3d·数字人
木卫四科技5 分钟前
【CES 2026】木卫四科技发布R-IDPS,护航具身机器人“Chat GPT时刻”安全落地!
大数据·人工智能
Codebee5 分钟前
# 大厂AI全是黑话?Ooder靠Skill技术3天落地企业级应用,这才是真实用!
人工智能
He_Donglin6 分钟前
Data Mining| 类型变量编码(乳腺癌威斯康星数据集/葡萄酒数据集/鸢尾花数据集)
人工智能·数据挖掘
TDengine (老段)1 小时前
TDengine C/C++ 连接器进阶指南
大数据·c语言·c++·人工智能·物联网·时序数据库·tdengine
lixzest1 小时前
PyTorch与Transformer的关系
人工智能·pytorch·transformer