Python机器学习入门:从零开始学习AI

Git冲突患者
2025-12-15 22:04
阅读 1061

上周五晚上十点半,我还在公司对着 Spark 任务的 DAG 图发呆——又是 OOM,又是 shuffle spill。突然钉钉“叮”一声,产品经理发来消息:“咱们能不能搞个智能推荐?就那种 AI 的!” 我差点一口老血喷在 VSCode 上。

但说真的,这也不是第一次了。自从去年双11我们团队用 Spark 实时计算用户行为画像后,老板和 PM 对“AI”俩字就跟打了鸡血似的。其实吧,真正做大数据开发的都知道,很多所谓“AI项目”,底层还是数据清洗 + 特征工程 + 模型调参的三板斧。只不过现在包装得好听点罢了。

坐标杭州,阿里网易扎堆的地方,跳槽面试也总绕不开“你做过机器学习吗?” 这不,上个月面了个字节的岗,上来就让我手撕逻辑回归 + 解释 ROC 曲线,还好之前啃过《Hands-On Machine Learning》,不然当场社死。也是那次之后,我下定决心:得系统学一遍 Python 机器学习,不能光靠糊弄了


为啥选 Python?不是还有 Scala、Java 吗?

别笑,真有人问过我:“你们天天写 Spark(Scala/PySpark),为啥 ML 不直接用 Scala?”

简单回答:生态碾压。

  • Scikit-learn:开箱即用,文档比我妈还贴心
  • Pandas + NumPy:数据处理快如闪电,比 Spark DataFrame 本地调试爽多了
  • Jupyter Notebook:边写边跑,可视化一气呵成,适合快速验证想法
  • TensorFlow / PyTorch:深度学习领域基本被 Python 垄断

而 Scala 的 MLlib?说实话,API 抽象得有点“学术”,调试起来像在 debug 分布式系统本身。除非你是要做大规模在线推理+训练一体化平台(比如阿里的 PAI),否则小步快跑验证业务价值,Python 是唯一选择

举个真实例子:我们组去年想做一个用户流失预警模型。用 PySpark 写特征工程没问题,但试了三天 MLlib 的 GBTClassifier,调参像盲人摸象。最后我偷偷用 pandas 把样本抽到本地,scikit-learn 跑了个 XGBoost,AUC 直接拉到 0.87,老板看了直呼“高科技”。


从“Hello World”到能跑的模型:我的踩坑实录

第一步:环境配置 —— 别再用 conda 了!

我知道很多人推荐 Anaconda,但作为一个 VSCode 忠粉,我早就把 python -m venv + pip 玩明白了。加上一堆插件(Python Docstring Generator、Indent-Rainbow、Rainbow CSV),写代码丝滑到飞起。

# 创建干净环境
python -m venv ml-env
source ml-env/bin/activate

# 安装核心库
pip install pandas numpy scikit-learn matplotlib seaborn jupyter xgboost lightgbm

小技巧:VSCode 里按 Ctrl+Shift+P → “Python: Select Interpreter”,直接切到你的虚拟环境,不用每次手动 source。


第二步:数据在哪?别拿 MNIST 糊弄人!

教程动不动就 from sklearn.datasets import load_iris,现实哪有这么干净的数据?我们实际业务中,数据通常来自:

  • Hive 表(通过 Spark SQL 导出 CSV)
  • Kafka 流(用 Spark Structured Streaming 落盘)
  • 用户行为日志(埋点上报,JSON 格式)

所以我拿了一个简化版的 电商用户复购预测数据集(脱敏后约 1 万条):

  • 特征:最近30天访问频次、加购次数、下单金额、设备类型、是否新客等
  • 标签:未来7天是否会再次下单(0/1)
import pandas as pd

df = pd.read_csv("user_repurchase.csv")
print(df.shape)  # (10240, 8)
df.head()

结果发现:device_type 是字符串,order_amount 有负数(退款?),还有 5% 的缺失值……
这才是真实世界!


第三步:算法选型 —— 别一上来就上神经网络!

很多人一听说“AI”,脑子里就是大模型、Transformer。但在大多数业务场景(尤其是冷启动阶段),树模型才是性价比之王

我对比了三种主流算法在该数据集上的表现(5折交叉验证):

算法 AUC 训练时间(s) 可解释性 调参难度
Logistic Regression 0.76 0.3 ★★★★☆
Random Forest 0.82 2.1 ★★★☆☆
XGBoost 0.87 1.5 ★★★★☆

注:测试环境为 MacBook Pro M1, 16GB RAM

结论很清晰:XGBoost 在精度和速度之间取得了最佳平衡,而且 feature importance 能直接给业务方解释“为什么这个用户可能流失”。

代码长这样(带注释,别嫌啰嗦):

from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score
from xgboost import XGBClassifier

# 处理类别变量(简单用 LabelEncoder)
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df['device_type'] = le.fit_transform(df['device_type'].astype(str))

# 划分特征和标签
X = df.drop(columns=['user_id', 'will_repurchase'])
y = df['will_repurchase']

# 划分训练/测试集
X_train, X_test, y_learn, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42, stratify=y
)

# 初始化 XGBoost(先用默认参数跑通)
model = XGBClassifier(
    random_state=42,
    eval_metric='auc'  # 注意:XGBoost 默认用 logloss,这里改成 AUC 更符合业务目标
)

# 训练
model.fit(X_train, y_train)

# 预测 & 评估
y_pred_proba = model.predict_proba(X_test)[:, 1]
auc = roc_auc_score(y_test, y_pred_proba)
print(f"Test AUC: {auc:.4f}")  # 输出:Test AUC: 0.8692

跑完那一刻,我差点想截图发朋友圈——终于有个模型能上线了!


面试题挑战:面试官最爱问的三个问题

既然提到面试,分享几个高频题,都是我亲身被拷打过的:

  1. “XGBoost 和 LightGBM 有什么区别?”

    答:XGBoost 精度高但慢,LightGBM 用直方图加速 + leaf-wise 生长,速度更快,适合大数据。但我们业务样本量 < 10w,XGBoost 更稳。

  2. “AUC 高但线上效果差,可能是什么原因?”

    答:数据泄露(比如用了未来信息)、线上线下特征分布不一致、或者业务指标和 AUC 不对齐(比如我们更关心召回率而非 AUC)。

  3. “怎么处理类别不平衡?”

    答:先看业务容忍度。如果正样本少但重要(如欺诈),我会用 scale_pos_weight(XGBoost 参数)或 SMOTE,但慎用过采样,容易过拟合。


区块链?别闹了,跟 ML 有啥关系!

说到关键词“区块链”,我必须吐槽一句:某些 HR 招聘 JD 里硬塞“熟悉区块链、AI、大数据”,纯属凑 buzzword

现实中,我司项目从来没把区块链和机器学习搭在一起过。除非你在做去中心化身份(DID)或 Web3 数据确权,否则这两者就像“火锅配冰淇淋”——强行混搭只会翻车。

不过话说回来,如果你真想卷,可以研究下“联邦学习 + 区块链”,用于跨机构数据协作(比如医院之间联合建模又不泄露隐私)。但这属于 PhD 级别课题了,咱们搬砖程序员还是先搞定 XGBoost 吧。


总结:别怕,AI 没那么玄乎

回看这一个月的学习,最大的感悟是:机器学习不是魔法,而是工程

  • 数据质量 > 模型复杂度
  • 业务理解 > 算法炫技
  • 快速迭代 > 一步到位

我现在已经把这套流程封装成了模板:数据接入 → EDA → 特征工程 → 模型训练 → 评估 → 导出 ONNX → 接入线上服务。下周就要和后端联调了,祈祷别在 deadline 前炸。

如果你也是和我一样的大数据开发,天天和 Spark 打交道,不妨抽个周末,用 Python 跑通一个真实 ML 项目。不一定马上用上,但面试时你能说“我做过端到端的模型落地”,HR 眼睛都会亮。

毕竟,在杭州这片卷王之地,多一项技能,就少一分焦虑。


作者:某大厂大数据开发,三年 Spark 老兵,现沉迷于用 Python 造轮子。GitHub 主页全是 Jupyter Notebook,欢迎 Star(并没有链接,别找了)

评论 0

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝