唤醒手腕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')
相关推荐
却道天凉_好个秋2 小时前
深度学习(十七):全批量梯度下降 (BGD)、随机梯度下降 (SGD) 和小批量梯度下降 (MBGD)
人工智能·深度学习·梯度下降
我星期八休息3 小时前
C++异常处理全面解析:从基础到应用
java·开发语言·c++·人工智能·python·架构
常州晟凯电子科技3 小时前
海思Hi3516CV610/Hi3516CV608开发笔记之环境搭建和SDK编译
人工智能·笔记·嵌入式硬件·物联网
William_cl3 小时前
2025 年 AI + 编程工具实战:用新工具提升 50% 开发效率
人工智能
珊珊而川4 小时前
Reflexion对ReAct的改进
人工智能
量化交易曾小健(金融号)4 小时前
GPT-5 Instant能修补模型情商漏洞了
人工智能
听到微笑4 小时前
LLM 只会生成文本?用 ReAct 模式手搓一个简易 Claude Code Agent
人工智能·langchain·llm
沐雪架构师4 小时前
让 Agent 说“机器能懂的话”——LlamaIndex 构建 Agent 的结构化输出策略
人工智能
Elastic 中国社区官方博客4 小时前
在 Elasticsearch 中改进 Agentic AI 工具的实验
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索