Chapter 23:机器学习入门
机器学习不是魔法,它是统计学穿上了计算的外衣。本章将带你理解模型训练、特征工程、评估指标等核心概念,并用真实数据完成一次预测任务。你会发现:当你能训练模型,你就能预测未来的一角。
“机器学习不是魔法,它是统计学穿上了计算的外衣。”
大家好,我是 Q。第23篇我们正式进入机器学习领域,用scikit-learn把前面21篇的自动化知识(PyAutoGUI、OOXML报表、Flask网盘、测试打包)再升级一步:用历史记账数据预测下个月支出,实现真正的“智能自动化”!
本篇全部基于Python 3.8.10 + Win7 旗舰版实测通过,零基础也能跑通。
先讲底层原理,再讲Win7 实战坑点,最后给出完整可直接运行的预测代码 + Pipeline + 模型持久化,让你把记账Excel一键变成“未来支出预报”!
1. 底层原理(源码、协议、机制)
scikit-learn(简称 sklearn)是 Python 最轻量的机器学习库,完全基于 NumPy + SciPy + Cython实现:
Estimator 接口:所有模型都遵循统一 API(
fit()、predict()、score()),源码核心在sklearn/base.py的BaseEstimator类。
这就是“即插即用”的秘密——不管是线性回归还是随机森林,调用方式完全一致。底层加速:Cython 把 Python 代码编译成 C 扩展(.pyd 文件),矩阵运算直接调用 BLAS/LAPACK(NumPy/SciPy 底层),速度远超纯 Python。
Pipeline 机制:源码在
sklearn/pipeline.py,本质是把多个Transformer+Estimator串成一个对象,内部用fit_transform链式调用,避免数据泄漏。模型持久化:
joblib(sklearn 自带)使用pickle+ 内存映射,把模型权重、参数序列化成 .pkl 文件,支持大模型快速加载。
(上图:scikit-learn Pipeline 工作流,一目了然)
2. Win7 特有实战坑点 & 库兼容性(提前避雷)
版本严格锁定(最重要):
Win7 + Python 3.8 只支持scikit-learn==1.3.2(1.4+ 已放弃 3.8)。
同时锁定依赖:pipinstallscikit-learn==1.3.2numpy==1.24.4scipy==1.10.1pandas==2.0.3matplotlib==3.7.5joblib==1.3.2必须管理员 PowerShell执行,否则 .pyd 文件加载失败。
Wheel 安装失败:Win7 缺少 VC++ 2015-2019 Redistributable。
先下载安装vc_redist.x64.exe(微软官网),再 pip。内存与 CPU:Win7 机器通常 4-8GB 内存,训练大模型(>10万行)会 OOM。本篇使用小数据集 + 简单线性模型,完全无压力。
中文路径:记账数据 Excel 路径含中文时,用
r'D:\记账\data.xlsx'短路径 + UTF-8 编码。打包进 exe:结合第21篇 PyInstaller 时,需加
--hidden-import=sklearn.neighbors._ball_tree等(后面会给 .spec 示例)。
3. 深度:Pipeline 工作流 + 模型持久化
Pipeline让预处理 + 模型变成“一条龙”:
- 自动处理缺失值、标准化、特征选择
- 防止测试集数据泄漏
- 一键
fit/predict
模型持久化:用joblib.dump(model, 'expense_model.pkl')保存,joblib.load加载,速度比 pickle 快 10 倍,完美适配 Win7 离线预测。
4. 完整实战:用历史记账数据预测下个月支出
场景:每月手动记账(Excel),现在让机器学习自动预测下个月总支出!
准备数据(新建D:\AutoOffice\expense_data.csv):
month,food,rent,transport,entertainment,total 2023-0