引言
经过第一周的“AI 小白”初体验,这周我正式升级为“调参侠”和“数据侦探”!从多元线性回归到 XGBoost,从数据缺失处理到 Agent 开发,我的大脑像一台过载的 GPU,疯狂运转。虽然偶尔会冒出“我是谁?我在哪?”的哲学问题,但总体来说,这周的学习让我对 AI 的理解又深了一层。以下是我的学习总结,希望能用幽默的方式带你一起走进 AI 的世界。
一、本周学习概览
1. 吴恩达机器学习:从“线性”到“非线性”
- 多元线性回归: 多个参数变量一起上,模型复杂度直接拉满。
- 梯度下降: 数据不归一化?成本函数像过山车,收敛慢得像蜗牛。
- 学习率: 调小了像乌龟爬,调大了像脱缰野马,画个成本下降曲线才是王道。
- 逻辑回归: Sigmoid 函数登场,把线性结果变成概率,分类问题轻松搞定。
- 过拟合与正则化: 模型太复杂?L1 和 L2 正则化来帮忙,防止模型“记答案”。
2. Kaggle Learning:从“数据侦探”到“代码魔术师”
- 数据缺失处理: 删除、插补、增加标识列,插补法是我的最爱。
- 分类数据编码: 序号编码、One-Hot 编码,种类太多?One-Hot 编码会爆炸。
- Pipeline 机制: 缺省值处理、分类数据转换,一行代码搞定,代码量直接减半。
- 交叉验证: 多次训练,切分数据集,模型评估更靠谱。
- 数据泄露: 训练数据偷偷混入测试数据?模型准确率高得离谱,实际效果却拉胯。
3. DeepSeek 交流:从“Agent 开发”到“XGBoost 解密”
- Agent 开发: 不用 Agent 开发像写 if-else,用了 Agent 像请了个智能助手。
- XGBoost: 梯度提升 + 弱学习器,迭代多次,模型效果直接起飞。
- 逻辑回归: Sigmoid 函数把线性结果变成概率,分类问题轻松搞定。
- 正则化: L1 和 L2 正则化,防止模型“记答案”,L2 是我的首选。
二、核心知识详解
1. 吴恩达机器学习:从“线性”到“非线性”
- 多元线性回归: 多个参数变量一起上,模型复杂度直接拉满。
- 梯度下降: 数据不归一化?成本函数像过山车,收敛慢得像蜗牛。
- 学习率: 调小了像乌龟爬,调大了像脱缰野马,画个成本下降曲线才是王道。
- 逻辑回归: Sigmoid 函数登场,把线性结果变成概率,分类问题轻松搞定。
- 过拟合与正则化: 模型太复杂?L1 和 L2 正则化来帮忙,防止模型“记答案”。
2. Kaggle Learning:从“数据侦探”到“代码魔术师”
- 数据缺失处理: 删除、插补、增加标识列,插补法是我的最爱。
- 分类数据编码: 序号编码、One-Hot 编码,种类太多?One-Hot 编码会爆炸。
- Pipeline 机制: 缺省值处理、分类数据转换,一行代码搞定,代码量直接减半。
- 交叉验证: 多次训练,切分数据集,模型评估更靠谱。
- 数据泄露: 训练数据偷偷混入测试数据?模型准确率高得离谱,实际效果却拉胯。
3. DeepSeek 交流:从“Agent 开发”到“XGBoost 解密”
- Agent 开发: 不用 Agent 开发像写 if-else,用了 Agent 像请了个智能助手。
- XGBoost: 梯度提升 + 弱学习器,迭代多次,模型效果直接起飞。
- 逻辑回归: Sigmoid 函数把线性结果变成概率,分类问题轻松搞定。
- 正则化: L1 和 L2 正则化,防止模型“记答案”,L2 是我的首选。
三、我的思考与理解
1. Agent 开发的优劣
- 不用 Agent 开发:
就像写一堆 if-else 语句,手动解析用户输入,判断逻辑分支,再调用不同的工具完成任务。比如用户输入“计算 2+2,然后搜索一下 AI”,你得自己写代码拆分输入、调用计算器和搜索引擎,最后整合结果。这种方式虽然直观,但代码冗长,逻辑复杂,而且不够智能。比如如下代码
def handle_request(user_input: str) -> str:
if "计算" in user_input and "搜索" in user_input:
# 提取计算部分
calc_part = user_input.split(",")[0].replace("计算", "").strip()
calc_result = calculator(calc_part)
# 提取搜索部分
search_part = user_input.split(",")[1].replace("然后搜索一下", "").strip()
search_result = search(search_part)
# 整合结果
return f"{calc_part} 是 {calc_result}。{search_part} 是:{search_result}"
else:
return "无法处理该请求。"
- 用 Agent 开发:
像请了一个智能助手,内置的 Prompt 会自动解析用户输入,决定使用哪些工具,并推动整个流程。比如 LangChain 的 Agent,它会根据用户输入自动调用计算器、搜索引擎等工具,完全不需要你手动写 if-else。
优点: 代码简洁,逻辑清晰,扩展性强,新增工具只需简单配置,Agent 会自动学习如何使用。针对流程不固定,场景适合使用,或者工具与工具之间能自由组合场景,如果工具和工具之间有依赖,流程比较固定,这种场景还是适合不使用agent方式,硬编码流程比较好。
2. ReAct 策略的具体体现
-
ReAct 策略是什么?
ReAct 是一个方法论,核心思想是:思考 -> 行动 -> 观察。Agent 会根据当前任务,先思考下一步该做什么,然后采取行动,最后观察结果并调整策略。 -
具体体现:
在 LangChain 的 Agent 中,ReAct 策略被封装在 Prompt 里。比如,当用户问“计算 2+2,然后搜索一下 AI”,Agent 会按照以下步骤执行:- 思考: 用户需要先计算 2+2,再搜索 AI。
- 行动: 调用计算器工具计算 2+2,得到结果 4。
- 观察: 检查计算结果是否正确。
- 思考: 接下来需要搜索 AI。
- 行动: 调用搜索引擎工具搜索 AI。
- 观察: 检查搜索结果是否合理。
- 返回结果: “2+2 是 4。AI 是:人工智能是……”
总结: 只要 Prompt 中明确要求 Agent 按照 思考 -> 行动 -> 观察 的步骤完成任务,就可以认为使用了 ReAct 策略。
3. XGBoost 的预测原理
-
XGBoost 是什么?
XGBoost 是一个基于梯度提升的集成学习算法,通过组合多个弱学习器(通常是决策树)来提升模型性能。 -
预测过程:
- 初始模型: 先训练一个简单的模型(比如一棵浅层决策树)。
- 计算残差: 用初始模型预测结果,计算预测值与真实值之间的残差。
- 训练弱学习器: 基于残差训练一个新的弱学习器。
- 更新模型: 将新学习器的预测结果加到初始模型上,更新模型。
- 重复迭代: 重复上述过程,直到达到预设的迭代次数或模型性能满足要求。
-
最终预测:
预测时,XGBoost 会将所有弱学习器的预测结果累加,得到最终预测值。比如:- 第一棵树预测结果为 10。
- 第二棵树预测结果为 2。
- 第三棵树预测结果为 -1。
- 最终预测结果为 10 + 2 - 1 = 11。
优点: 通过多次迭代,XGBoost 可以逐步修正模型的错误,提升预测精度。
4. 正则化的作用
-
正则化是什么?
正则化是一种防止模型过拟合的技术,通过在损失函数中加入惩罚项,限制模型参数的大小。 -
L1 和 L2 正则化:
- L1 正则化: 在损失函数中加入参数的绝对值之和。L1 正则化会让某些参数压缩到 0,从而实现特征选择。
- L2 正则化: 在损失函数中加入参数的平方和。L2 正则化会让参数接近 0,但不会完全为 0。
-
为什么 L1 能让参数压缩到 0?
L1 正则化的惩罚项是参数的绝对值之和,优化过程中,某些不重要的特征对应的参数会被压缩到 0,从而减少模型的复杂度。
四、未解之谜
1. 正则化 L1 如何让某些参数压缩到 0?
- 问题: L1 正则化为什么能把某些参数压缩到 0?
- 猜想: 可能是 L1 正则化的“绝对值”特性导致的,但具体原理还需要进一步研究。
五、总结与下一步计划
1. 本周总结
- 理论学习: 多元线性回归、逻辑回归、正则化等核心概念。
- 实战经验: 数据缺失处理、分类数据编码、Pipeline 机制、交叉验证等。
- 交流收获: Agent 开发、XGBoost 算法、ReAct 策略等。
2. 下一步计划
- 深入学习: 继续学习吴恩达的课程,了解支持向量机、神经网络等算法。
- 更多实战: 尝试 Kaggle 上的其他项目,如图像分类、自然语言处理。
- 分享与交流: 将学习笔记和项目经验分享到博客或社区,与更多人交流。
结语
第二周的 AI 学习让我从“调参侠”升级为“数据侦探”,虽然偶尔会陷入“正则化 L1 为什么能把参数压缩到 0”的未解之谜,但总体来说,收获满满。希望通过持续的学习和实践,我能在 AI 领域走得更远。如果你也对 AI 感兴趣,欢迎一起交流学习!