唤醒手腕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')
相关推荐
夏洛克信徒1 分钟前
从 “工具” 到 “代理”:Gemini 3.0 重构 AI 能力边界,开启智能协作新纪元
大数据·人工智能·神经网络
AI浩8 分钟前
回归基础:让去噪生成模型真正去噪
人工智能·数据挖掘·回归
ekprada27 分钟前
DAY 16 数组的常见操作和形状
人工智能·python·机器学习
用户51914958484534 分钟前
C#扩展成员全面解析:从方法到属性的演进
人工智能·aigc
柳鲲鹏36 分钟前
OpenCV: 光流法python代码
人工智能·python·opencv
金融小师妹1 小时前
基于LSTM-GARCH模型:三轮黄金周期特征提取与多因子定价机制解构
人工智能·深度学习·1024程序员节
小蜜蜂爱编程1 小时前
深度学习实践 - 使用卷积神经网络的手写数字识别
人工智能·深度学习·cnn
leiming61 小时前
深度学习日记2025.11.20
人工智能·深度学习
速易达网络1 小时前
tensorflow+yolo图片训练和图片识别系统
人工智能·python·tensorflow
智元视界1 小时前
从算法到城市智能:AI在马来西亚智慧城市建设中的系统应用
人工智能·科技·智慧城市·数字化转型·产业升级