尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Python机器学习入门:从环境搭建到线性回归实验全攻略

Python机器学习入门:从环境搭建到线性回归实验全攻略 朋友你可能也刷到过那条三分练七分学的Python机器学习路线图或者刚打开吴恩达的课程就栽在Python环境安装上。我当年入坑时就卡在第一步Python装完打开命令行输入python没反应numpy装完一import就报错最终靠一路踩坑才把环境捣鼓明白。这篇我就结合Python机器学习入门最常见的痛点从环境搭建、数据处理是什么、线性回归实验到课程设计选题一次讲透尽量让零基础的人照着就能跑通也让准备西电、山大等校机器学习期末复习的朋友有个抓手。整篇文章我会避开那些虚头巴脑的快速精通话术只讲我自己实操过、验证过的东西。如果你是刚接触机器学习的小白或者期末复习到一半突然发现概念全混成浆糊这篇文章值得读完。1. 环境搭建是第一个真正的门槛从Python安装到vscode配置的完整链路很多人学机器学习的第一天不是死在数学公式上而是死在环境上。我见过太多次代码明明一样为什么我的电脑跑不出来的局最后几乎都是环境问题。1.1 Python安装的版本取舍与路径原则Python官网下载页面会推荐最新版但做机器学习我不建议盲目追新。目前sklearn、TensorFlow这类核心库对Python版本的适配有滞后我用Python 3.9和3.10都比较稳3.12在某些第三方库上还会踩编译坑。你要是刚入门直接装官方渠道的3.10.x或者3.11.x版本安装时有一个关键勾选必须盯住Add Python to PATH。很多同学命令行输入python提示不是内部或外部命令就是漏了这个勾。安装路径也尽量避开带中文或空格的文件夹比如C:\Program Files这种后续某些库的编译环境会识别异常。直接放在C:\Python310这种路径后续省心很多。提示装完Python之后在命令行里输入python --version看到版本号才算真正装成功。这一步别跳过很多人自以为装好了其实装的是微软商店的占位程序。1.2 核心库安装numpy、pandas、matplotlib、sklearn一条龙机器学习实验逃不开这四个库。numpy管数值计算pandas管表格数据处理matplotlib管画图sklearn管模型训练。安装命令非常简单但在命令行里执行前要分清pip和pip3。在Windows上我用pip install numpy pandas matplotlib scikit-learn一条命令装齐。macOS或者Linux上有时候默认Python是2.7时代残留的要用pip3才装到正确的Python环境里。sklearn的安装稍微特殊一点它的包名是scikit-learn而不是sklearn所以pip install sklearn虽然能装上但强烈建议用pip install scikit-learn避免某些老版本依赖冲突。装完之后在Python交互式环境里验证import numpy import pandas import matplotlib import sklearn print(numpy.__version__, pandas.__version__, sklearn.__version__)我遇到过的情况是安装时提示successfully installedimport照样报ModuleNotFoundError。原因是电脑里有多个Python环境pip装到了A环境vscode用的是B环境。所以装完库一定要在你要用的编辑器里验证一次别只在命令行里验证。1.3 vscode Python环境配置的真坑vscode是目前写Python最舒服的轻量编辑器做过Python编程的应该都有体会。它的坑在于右下角那个Python解释器选择。你在vscode里装好Python扩展后打开一个.py文件看右下角状态栏显示的解释器路径。如果是一个陌生的虚拟环境路径而你明明全局装了sklearnimport必报错。我的做法是在项目根目录建一个venv虚拟环境然后在vscode右下角选择这个虚拟环境解释器再在终端里激活它安装依赖。这样项目之间依赖互相隔离换台电脑也能通过requirements.txt快速复原环境。python -m venv myenv myenv\Scripts\activate # Windows # 或者 source myenv/bin/activate # macOS / Linux pip install numpy pandas matplotlib scikit-learn我实测下来虚拟环境是避免装完库找不到库这种玄学的最有效方案。数据库装一个模型环境一个互不污染。2. 机器学习中的数据处理是什么从拿到数据到喂给模型的必经环节很多人在期末复习时背了一堆算法但一问数据处理是什么就卡壳。机器学习里的数据处理不是一个可有可无的前置动作而是决定模型上限的关键环节。模型的上限由数据质量决定算法只是在逼近这个上限。2.1 数据清洗缺了它后面的所有步骤都是白干拿到一份原始数据第一件事不是丢给模型训练而是看看数据到底长什么样。我习惯先用df.info()和df.describe()探路前者看每列有几个非空值、什么类型后者看数值列的平均值、标准差、分位数。数据清洗最常见的是处理缺失值。缺失值如果直接丢给某些模型要么报错要么把均值拉偏。处理方式有两条路直接删除缺失行数据量大且缺失比例低时用或者用均值、中位数、众数填充缺失比例不高但删了可惜时用。我个人的原则是缺失超过50%的列大概率该直接扔掉。# 填充缺失值示例 df[age].fillna(df[age].median(), inplaceTrue) # 或者直接删除缺失行 df.dropna(inplaceTrue)2.2 特征工程让模型看见数据里的规律机器学习算法不认识我们眼里的性别城市它只认数字。所以原始数据里的文本列要么编码成0/1要么做独热编码。举个例子性别列里男女要变成gender_male和gender_female两列每列取0或1。数值列也未必能直接用。如果某列的量级是几千另一列是0到1之间的小数很多基于距离的算法比如KNN就会让量级大的特征主导结果。这时候就要做标准化或归一化sklearn里直接用StandardScalerfrom sklearn.preprocessing import StandardScaler scaler StandardScaler() X_scaled scaler.fit_transform(X)标准化之后的特征是均值为0、方差为1相当于把所有特征放到同一把尺子上比长短。很多机器学习入门教材会在数据处理这一节反复强调标准化期末考试也常考道理就在这里。2.3 训练集与测试集划分为什么不能拿全部数据训练有同学觉得数据不就该多多益善吗全喂给模型训练不是学得更充分但这样一来你没法判断模型是真学会了还是死记硬背的。正如期末考试如果复习题和考题完全一样考高分不能说明能力。所以标准做法是把数据切成训练集和测试集比如七三开。sklearn里一行代码搞定from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.3, random_state42)random_state锁定随机种子保证每次切分结果一致这是复现实验的关键。我写实验报告时如果不设这个种子第二次运行结果就变了期末交的作业对不上非常尴尬。训练集用于让模型学习参数测试集用于评估效果。评估用的指标R²、准确率、均方误差等必须来自模型从来没见过的测试数据这样的成绩才是真实水平的体现。2.4 应用流程完整走一遍才有体感很多人在热搜里搜机器学习 应用流程其实这个流程高度标准化业务理解确定要预测什么数据收集从数据库、日志、API拿原始数据数据清洗缺失值、异常值处理特征工程编码、标准化、特征选择模型选择与训练选算法调参模型评估用测试集算指标模型部署把模型接进业务系统比如自动拉表、批量预测我见过不少新手一上来就跳到第5步找算法结果数据是一坨乱麻模型效果自然惨不忍睹。机器学习的功夫七成在数据上这话我越做越认同。3. 从零跑通第一个线性回归实验理论与代码互相印证线性回归是机器学习最经典的入门模型也是西瓜书和各家期末考试的常驻考点。我当时用自己生成的数据跑了一个完整的线性回归实验把数据可视化、模型训练、评估指标全部走了一遍整个过程下来才对模型训练有了真实体感。3.1 线性回归在做什么用一条直线去拟合数据的趋势线性回归的核心想法很朴素假设输入特征x和输出y之间是线性关系即y a*x b。训练的过程就是找到一组a和b让预测值和真实值之间的整体误差最小。这里最常讲的误差度量是均方误差MSE就是把所有点的预测误差平方后取平均。平方的目的是让正负误差不会互相抵消。最小化均方误差的方法叫最小二乘法数学推导用偏导求极值。期末复习时西瓜书的公式推导要会做但实操层面sklearn的LinearRegression直接封装好了求解过程不需要手写矩阵求逆。3.2 造一份模拟数据先画散点图看清楚形状没有现成数据集的时候可以用numpy生成一份线性数据再加一点随机噪声模拟现实情况import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error, r2_score # 生成模拟数据y 2 * x 5 噪声 rng np.random.default_rng(42) X rng.uniform(0, 10, 100).reshape(-1, 1) y 2 * X.ravel() 5 rng.normal(0, 1, 100) plt.scatter(X, y, alpha0.6) plt.xlabel(X) plt.ylabel(y) plt.title(模拟数据散点图) plt.show()拿到散点图后先肉眼看一眼趋势。如果数据点大致沿对角分布线性回归就适用如果呈明显的弯曲分布线性模型就会欠拟合需要考虑多项式回归。这一步在期末实验报告中也要体现先看图再建模是严谨的做事顺序。3.3 训练模型与画回归线sklearn使用的最小路径用sklearn训练线性回归模型只需要三行model LinearRegression() model.fit(X_train, y_train) y_pred model.predict(X_test)训练完就可以拿出系数和截距看一眼print(斜率 a:, model.coef_) print(截距 b:, model.intercept_)如果数据里加过噪声斜率和截距不会和真实值完全一致但应该非常接近。比如上面造的数据真值是a2、b5训练出来可能是1.98和5.12左右。看到这个结果非常直观模型确实从数据里学到了真实的规律。然后把拟合直线画上去和散点叠在一起x_line np.linspace(0, 10, 100).reshape(-1, 1) y_line model.predict(x_line) plt.scatter(X_test, y_test, alpha0.6, label测试数据) plt.plot(x_line, y_line, colorred, label回归线) plt.xlabel(X) plt.ylabel(y) plt.legend() plt.show()这一步就是机器学习入门实验里最常见的成品图一堆散点加一条红线。期末课程设计的报告里这张图就是核心可视化证据。3.4 评估指标期末和面试都绕不开的R²和MSE模型训练完光看回归线还不够要用数字说话。最常用的两个指标是MSE和R²。MSE我们已经说过就是预测误差的平方均值越小越好。R²的含义更直观它表示模型解释了数据变异的百分比取值通常在0到1之间越接近1说明拟合越好。mse mean_squared_error(y_test, y_pred) r2 r2_score(y_test, y_pred) print(MSE:, mse) print(R²:, r2)在模拟数据上跑出来R²一般会在0.9以上看起来效果很不错。但要注意这不代表模型真的理解了数据背后的机制只代表它在这些数据分布内拟合得很好。期末复习和面试都爱考模型在测试集效果好是不是一定说明模型好这种辨析题答案就是不一定还要警惕过拟合。4. 玩得再深一点把线性回归扩展到简单量化交易策略热搜里python量化交易策略代码有很高的热度很多人学完线性回归就想拿它做点实际的事。量化交易确实是机器学习最生动的应用场景之一但刚入门时我不建议一上来就搞复杂模型。可以先从最简单的均线策略起步感受数据来临→信号生成→回测验证这个完整闭环。4.1 均线策略的核心逻辑金叉死叉是怎么来的均线策略听名字很高大上本质就是移动平均线。短期均线比如5日均线和长期均线比如20日均线交叉时产生买或卖的信号短期均线上穿长期均线金叉表示近期走势变强可以考虑买入下穿死叉表示走势转弱可以考虑卖出。我本地实验时会用pandas生成一段模拟的价格序列来演示避免涉及真实行情数据。生成一个带随机波动的上涨序列然后计算两条均线import pandas as pd import numpy as np # 模拟1000个交易日价格 price 100 np.cumsum(np.random.default_rng(0).normal(0, 1, 1000)) df pd.DataFrame({price: price}) df[ma5] df[price].rolling(5).mean() df[ma20] df[price].rolling(20).mean()rolling(5).mean()就是求5日移动平均这是pandas做时间序列数据处理时非常高频的操作。算出两条均线之后信号列的生成逻辑是当天ma5是否大于ma20。4.2 信号生成与简单回测思路信号生成的典型写法如下df[signal] np.where(df[ma5] df[ma20], 1, 0) df[position] df[signal].diff() # 信号变化点1表示金叉买入-1表示死叉卖出这里position为1时是买入信号、-1是卖出信号。有了持仓信号之后最简单的回测就是把每日收益率乘以持仓位置再累加得到策略累积收益从而看出策略整体效果。df[daily_ret] df[price].pct_change() df[strategy_ret] df[position].shift(1) * df[daily_ret] df[strategy_cumsum] df[strategy_ret].cumsum()注意shift(1)很关键今天的信号要等收盘后才能确认持仓带来的收益从明天才开始计算避免把当天临收盘的偷看未来混进回测这是量化回测里最常见的逻辑错误。网上很多伪量化策略代码都栽在这上面回测收益华丽实盘一地鸡毛。4.3 为什么从线性回归到量化不是一步到位学完线性回归就想去预测股票涨跌这一步跨度其实是很大的。原因在于股票价格序列本质上有很强的不确定性和非平稳性单纯用线性回归拿到昨天的数据去预测明天的涨跌极易被过拟合和幸存者偏差坑害。我的建议是把量化策略当成练手项目核心目的是打通数据处理、特征计算、策略编写、回测验证这条链路。真正要训练机器学习模型做预测至少得先理解特征构造的意义和过拟合的防御手段这些功底的积累比一上来就追求收益曲线好看重要得多。5. 期末复习和课程设计选题把知识串成体系的两个大招热搜词里机器学习期末复习机器学习西瓜书机器学习课程设计选题热度很高。作为一个熬过期末、做过课程设计的人我给你拆两个实用思路。5.1 西瓜书复习法别按章节顺序背按主线串周志华的西瓜书是经典教材但直接按章节顺序硬啃很容易迷路。我的经验是抓三条主线主线串完之后再往每个模块里填算法。第一条主线是监督学习从线性模型线性回归、逻辑回归到分类模型决策树、KNN、朴素贝叶斯、SVM每类算法需要知道的核心问题包括假设是什么、损失函数怎么定义、怎么优化、如何防止过拟合。第二条主线是无监督学习核心是聚类和降维K-means和PCA最常考。复习K-means时重点准备EM思想、K值选择、收敛性与初始点敏感PCA重点准备最大方差投影和协方差矩阵特征值分解。第三条主线是模型评估过拟合、欠拟合、偏差方差分解、交叉验证、混淆矩阵、精确率召回率。我在期末考试里吃过最大的亏就是在这里背了一堆算法推导结果简答题问如何评估一个二分类模型的优劣脑子一片空白。三条主线建立起来之后你会发现各个算法之间的区别和联系就清楚了。比如决策树和KNN前者的决策边界是分段直线、后者是局部近邻投票两者为什么在不同数据分布下表现差异很大——这些东西在课程设计答辩时经常被老师追问。5.2 课程设计选题六个方向实测靠谱课程设计选题关键在于难度适中数据可获取能出可视化成果。我给身边同学推过几类反馈比较好房价预测线性回归/决策树经典数据集特征多适合做特征工程和可视化分析报告素材充足。鸢尾花分类KNN/逻辑回归sklearn自带数据集适合把分类流程完整走一遍期末答辩也不会有太大翻车风险。手写数字识别逻辑回归或简单神经网络用MNIST或sklearn自带的digits数据集能出混淆矩阵热力图视觉效果拉满。电影评分预测协同过滤/矩阵分解偏推荐系统方向做完还能包装成推荐算法的课程设计有亮点。垃圾短信分类朴素贝叶斯/逻辑回归文本分类入门能结合TF-IDF特征提取实用性强。销售数据分析与趋势预测时间序列pandas做数据聚合和可视化再用线性回归或简单时序模型做预测适合商科背景结合。选题时避开的坑不要选需要大量手工标注的数据集不要选需要分布式计算才能跑动的海量数据也不要选概念太超前、期末答辩时你自己都圆不回来的方向。我见过一个同学选了深度学习做图像识别结果答辩被问到卷积核为什么这么设置当场愣住。选自己讲得清楚的方向比选看起来高端的更重要。5.3 机器学习和深度学习的边界一句话讲明白热搜里也有机器学习和深度学习这种对比词。不用把它想得过于复杂深度学习是机器学习的一个子集用的模型是多层神经网络优势在于能自动学特征。传统机器学习通常要人工做特征工程比如我们前面说的标准化、编码、降维深度学习可以端到端地从原始数据里提取特征。期末如果考到两者的关系记住几点就够深度学习依赖大量数据和算力小数据集上传统模型往往更好深度学习的可解释性比传统模型差。面试时被问什么时候该用深度学习标准回答思路就是数据量足够大、特征难以人工设计如图像、语音、算力允许。写在最后的实操体会如果你现在刚开始学或者复习到一半我给你最实在的建议不要一天换一个教程。我看过太多人收藏了上百G的视频最后连一个numpy数组都没生成过。踏踏实实把一个线性回归实验从数据生成到评估跑完再换一个分类实验如此积累三四个完整的项目比你刷十遍概念都管用。我在实际做机器学习的过程中还有一个心得代码报错别慌着去复制搜索引擎第一页的答案先看完整报错最后一行大概率是ModuleNotFoundErrorTypeErrorValueError其中之一。90%的问题出在环境、数据类型、数组形状这三个地方逐一排查你会发现自己解决问题的能力提升得极快。最后分享一个小技巧每次跑通一个机器学习实验记得把你的环境依赖导出成文件放到项目目录里pip freeze requirements.txt这样不管以后换电脑还是期末答辩现场要复现pip install -r requirements.txt一条命令就能恢复环境。这个习惯救过我不少次也分享给路过的你。
返回列表