非科班转AI第3周,特征工程的坑逼着我重刷人工智能入门,精度从0.62跳到0.83

非科班转AI第3周,特征工程的坑逼着我重刷人工智能入门,精度从0.62跳到0.83 非科班转AI第3周,特征工程的坑逼着我重刷人工智能入门,精度从0.62跳到0.83转行学人工智能的第22天,我坐在电脑前盯着 accuracy: 0.62 的结果发愣。这套房价预测项目我已经调了三次模型,从线性回归换到随机森林,超参调优也试过网格搜索,可验证集上的表现就是上不去。我翻回自己做的特征工程笔记本,发现缺失值我全用 0 填充,类别变量直接用 LabelEncoder 粗暴编码,连标准化都没做--这些基础操作其实都在机器学习基础的课程里强调过,那门课专门有一章讲数据预处理的完整方法论,可惜当初我为了赶进度直接跳过了。后来同事建议我放下项目,老老实实把人工智能入门的体系课刷一遍。那门课从机器学习管道的第一阶段讲到模型评估,尤其特征工程部分用了一个电商用户流失案例带我从缺失值分析一直做到特征工程的构造环节。我花 5 天把整套课程啃完,回头重新训练模型,8 周学习计划走到最后一天时,同一个数据集的精度从 0.62 跳到了 0.83。一、转行前的学习计划:为什么我定了 8 周路线我本科学机械,做了一年 CAD 制图后决定转 AI。网上铺天盖地的“20 天速成”方案让我犯怵,最后自己照着几个博客拼了一份 8 周计划:前两周补数学和 Python,第三周特征工程和数据预处理,第四到六周上线机器学习入门和模型训练,最后两周做项目。当时觉得计划挺周全,现在回头看,最大的问题就是高估了自己对特征工程的理解。我以为会用pandas.dropna()就算掌握了,可真正到比赛数据集上,才发现特征工程决定模型上限这句话不是空话。二、前两周的顺利:数学和 Python 没拦住我,但埋下了隐患前两周我过了一遍线性代数的矩阵运算和概率论,Python 练到能熟练写列表推导式和类,就急着进机器学习入门的课程。那门机器学习入门专为零基础设计,前几节用波士顿房价案例讲清楚训练集、测试集划分和混淆矩阵怎么看,我跟着动手实验跑完sklearn的 LinearRegression,觉得人工智能不过如此。但课程后面有一章专门讲机器学习管道的核心思想,从数据采集、数据预处理、模型训练到监控,我嫌太长直接跳了。当时心里想:我有代码基础,只要把模型调通,后面的慢慢补。这个决定直接导致第三周特征工程踩坑。三、第三周进入特征工程,我以为调包就行,结果精度卡死打开 Kaggle 的房价数据集,我直接上手:import pandas as pd df pd.read_csv(train.csv) df.fillna(0, inplaceTrue) # 所有缺失值填0类别特征比如MSZoning,我用了:from sklearn.preprocessing import LabelEncoder le LabelEncoder() df[MSZoning] le.fit_transform(df[MSZoning])这给无序类别强行加了大小关系,模型学到的全是噪声。特征工程的编码原则我当时完全没概念,只想着快点进模型训练。四、排查翻车:我发现缺失值处理和特征缩放的方法全用错了换随机森林后精度从 0.58 提到 0.62,但过拟合明显,训练集 0.95 验证集 0.62。我硬查了一晚,发现LotFrontage用 0 填充拉偏了整个分布,因为该字段的缺失率高达 17%,真实中位数在 70 左右。用fillna(0)相当于把大量样本推到离真实值很远的位置。特征缩放也没做,GrLivArea和TotalBsmtSF数值范围差一个量级,基于距离的模型(我用 Ridge Regression)被大数主导,系数完全偏移。最后试了超参调优的网格搜索,也只在局部瞎转,因为底层特征工程已经走形。当天下午我在机器学习基础课程里看到一节:数据预处理的正确顺序 --缺失值分析、编码策略选择、标准化/归一化的适用场景。当时就后悔跳课。机器学习基础不仅讲算法,更讲机器学习管道的搭建思维,从数据漂移的监测到特征存储的版本管理都有涉及。我之前在项目里根本没考虑过特征工程的可复现性,更别谈后续的特征存储。五、暂停项目,我花了 5 天刷完人工智能入门,专攻特征工程我干脆搁置项目,找了一套人工智能入门的体系课程。那个人工智能入门不挑技术背景,从头把人工智能的应用场景、技术栈讲清楚,然后带着学员搭建完整的机器学习管道。其中特征工程这一块,用了一个银行客户流失案例演示:缺失值如何处理才算合理(中位数 vs 随机森林填充)类别变量的编码选择(OneHot、目标编码各自的陷阱)特征缩放与模型类型的匹配(树模型不依赖缩放,但线性模型必须)跟着课程跑完案例,我重新处理房价数据集:# 缺失值用中位数填充 from sklearn.impute import SimpleImputer imputer SimpleImputer(strategymedian) df[[LotFrontage]] imputer.fit_transform(df[[LotFrontage]]) # 类别变量用OneHotEncoder from sklearn.preprocessing import OneHotEncoder ohe OneHotEncoder(handle_unknownignore, sparseFalse) encoded ohe.fit_transform(df[[MSZoning]]) # 统一特征缩放 from sklearn.preprocessing import StandardScaler scaler StandardScaler() X_scaled scaler.fit_transform(X)这门人工智能入门课还教了如何用管道把特征工程和模型训练串起来,保证后续部署时不会跑偏。我之前完全没想过特征工程的代码需要和模型一起通过AWS 基础知识里提到的 SageMaker 管道部署,导致本地实验和生产推理用的预处理不一致。六、学完后重新上项目,8 周整我的模型精度从 0.62 跳到 0.83重新走完数据预处理和特征工程流程,我选了一个基础 Ridge 回归,训练集 0.88,验证集 0.83,测试集 0.82。虽然不算顶尖,但已经没有过拟合的毛病,混淆矩阵在分类变体上也可接受。8 周学完,我不仅有了完整的项目,还顺手录了一个深度学习入门的小实验--AWS 深度学习课程里带的一个图像分类案例。虽然和房价项目无关,但让我看到了特征工程在结构化数据和图像数据中的本质差异:图片可以直接用卷积提取特征工程的结果,而表格数据则需要人手动设计和清洗。这套认知后来在我面试 MLOps 岗位时救了我一命。七、给同样转行的你几条建议(别再跳步骤)别跳过机器学习管道:机器学习基础里强调的管道思想,是区分调包侠和工程师的关键。点进课程看一眼它的项目结构,你会少踩很多坑。特征工程不是纯代码活:数据分布、业务含义缺一不可。人工智能入门的案例带分析思维,值得跟着敲完。模型调不出来先回头查数据:80% 的问题出在特征工程和数据预处理,超参调优只是锦上添花。尽早接触特征存储:一旦你有多个模型复用同一套特征工程代码,你就会像我一样后悔没早点看AWS 基础知识里关于特征存储的章节。不要追求速成:8 周可以打下一个靠谱的机器学习入门和人工智能入门基础,但前提是每一步都走扎实,特征工程尤其不能跳。课程比散装博客靠谱:我后来对比发现,AWS 机器学习系列的课程结构能帮你建立起「数据→特征工程→模型→评估→部署」的完整链路,比自己拼凑教程效率高得多。项目要带真实数据集的坑:用Kaggle的数据练手,你才会真正体会数据漂移和缺失值处理的重要性,这些在深度学习入门的干净基准数据集上是碰不到的。