欢迎光临
我们一直在努力

2026年Python+AI学习路线完整指南:从零基础到实战专家

在这里插入图片描述

✨道路是曲折的,前途是光明的!

📝 专注C/C++、Linux编程与人工智能领域,分享学习笔记!

🌟 感谢各位小伙伴的长期陪伴与支持,欢迎文末添加好友一起交流!

在这里插入图片描述

📊 目录

  • 为什么选择Python+AI
  • AI技术领域分布
  • 完整学习路径
  • 分阶段学习指南
  • 实战代码示例
  • 学习资源推荐
  • 常见问题解答

为什么选择Python+AI?

Python已成为人工智能领域最主流的编程语言,根据Stack Overflow 2024年开发者调查,Python在AI/ML领域的使用率超过85%。

在这里插入图片描述

Python在AI领域的优势

优势说明
🐍 语法简洁 上手快,专注算法本身而非语法细节
📦 生态丰富 NumPy、Pandas、PyTorch等成熟库
👥 社区活跃 海量教程、开源项目和问题解答
🔧 工具完善 Jupyter、Colab等优秀开发环境
🚀 部署便捷 Flask/FastAPI快速构建AI服务

AI技术领域分布

了解AI各领域的占比,帮助你更好地规划学习重点:

#mermaid-svg-5XhBr3gvYzWhOtQe{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-5XhBr3gvYzWhOtQe .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-5XhBr3gvYzWhOtQe .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-5XhBr3gvYzWhOtQe .error-icon{fill:#552222;}#mermaid-svg-5XhBr3gvYzWhOtQe .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-5XhBr3gvYzWhOtQe .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-5XhBr3gvYzWhOtQe .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-5XhBr3gvYzWhOtQe .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-5XhBr3gvYzWhOtQe .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-5XhBr3gvYzWhOtQe .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-5XhBr3gvYzWhOtQe .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-5XhBr3gvYzWhOtQe .marker{fill:#333333;stroke:#333333;}#mermaid-svg-5XhBr3gvYzWhOtQe .marker.cross{stroke:#333333;}#mermaid-svg-5XhBr3gvYzWhOtQe svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-5XhBr3gvYzWhOtQe p{margin:0;}#mermaid-svg-5XhBr3gvYzWhOtQe .pieCircle{stroke:#000000;stroke-width:2px;opacity:0.7;}#mermaid-svg-5XhBr3gvYzWhOtQe .pieOuterCircle{stroke:#000000;stroke-width:1px;fill:none;}#mermaid-svg-5XhBr3gvYzWhOtQe .pieTitleText{text-anchor:middle;font-size:25px;fill:#000000;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}#mermaid-svg-5XhBr3gvYzWhOtQe .slice{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;fill:#000000;font-size:17px;}#mermaid-svg-5XhBr3gvYzWhOtQe .legend text{fill:#000000;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:17px;}#mermaid-svg-5XhBr3gvYzWhOtQe :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

35%

30%

15%

12%

5%

3%

2025年AI技术领域市场需求分布

机器学习 [35]

深度学习 [30]

自然语言处理 [15]

计算机视觉 [12]

强化学习 [5]

其他 [3]


完整学习路径

下图展示了从零基础到AI专家的完整学习路线:

#mermaid-svg-KlaPCoSzX2BjkCjL{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-KlaPCoSzX2BjkCjL .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-KlaPCoSzX2BjkCjL .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-KlaPCoSzX2BjkCjL .error-icon{fill:#552222;}#mermaid-svg-KlaPCoSzX2BjkCjL .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-KlaPCoSzX2BjkCjL .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-KlaPCoSzX2BjkCjL .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-KlaPCoSzX2BjkCjL .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-KlaPCoSzX2BjkCjL .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-KlaPCoSzX2BjkCjL .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-KlaPCoSzX2BjkCjL .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-KlaPCoSzX2BjkCjL .marker{fill:#333333;stroke:#333333;}#mermaid-svg-KlaPCoSzX2BjkCjL .marker.cross{stroke:#333333;}#mermaid-svg-KlaPCoSzX2BjkCjL svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-KlaPCoSzX2BjkCjL p{margin:0;}#mermaid-svg-KlaPCoSzX2BjkCjL .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-KlaPCoSzX2BjkCjL .cluster-label text{fill:#333;}#mermaid-svg-KlaPCoSzX2BjkCjL .cluster-label span{color:#333;}#mermaid-svg-KlaPCoSzX2BjkCjL .cluster-label span p{background-color:transparent;}#mermaid-svg-KlaPCoSzX2BjkCjL .label text,#mermaid-svg-KlaPCoSzX2BjkCjL span{fill:#333;color:#333;}#mermaid-svg-KlaPCoSzX2BjkCjL .node rect,#mermaid-svg-KlaPCoSzX2BjkCjL .node circle,#mermaid-svg-KlaPCoSzX2BjkCjL .node ellipse,#mermaid-svg-KlaPCoSzX2BjkCjL .node polygon,#mermaid-svg-KlaPCoSzX2BjkCjL .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-KlaPCoSzX2BjkCjL .rough-node .label text,#mermaid-svg-KlaPCoSzX2BjkCjL .node .label text,#mermaid-svg-KlaPCoSzX2BjkCjL .image-shape .label,#mermaid-svg-KlaPCoSzX2BjkCjL .icon-shape .label{text-anchor:middle;}#mermaid-svg-KlaPCoSzX2BjkCjL .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-KlaPCoSzX2BjkCjL .rough-node .label,#mermaid-svg-KlaPCoSzX2BjkCjL .node .label,#mermaid-svg-KlaPCoSzX2BjkCjL .image-shape .label,#mermaid-svg-KlaPCoSzX2BjkCjL .icon-shape .label{text-align:center;}#mermaid-svg-KlaPCoSzX2BjkCjL .node.clickable{cursor:pointer;}#mermaid-svg-KlaPCoSzX2BjkCjL .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-KlaPCoSzX2BjkCjL .arrowheadPath{fill:#333333;}#mermaid-svg-KlaPCoSzX2BjkCjL .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-KlaPCoSzX2BjkCjL .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-KlaPCoSzX2BjkCjL .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-KlaPCoSzX2BjkCjL .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-KlaPCoSzX2BjkCjL .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-KlaPCoSzX2BjkCjL .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-KlaPCoSzX2BjkCjL .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-KlaPCoSzX2BjkCjL .cluster text{fill:#333;}#mermaid-svg-KlaPCoSzX2BjkCjL .cluster span{color:#333;}#mermaid-svg-KlaPCoSzX2BjkCjL div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-KlaPCoSzX2BjkCjL .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-KlaPCoSzX2BjkCjL rect.text{fill:none;stroke-width:0;}#mermaid-svg-KlaPCoSzX2BjkCjL .icon-shape,#mermaid-svg-KlaPCoSzX2BjkCjL .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-KlaPCoSzX2BjkCjL .icon-shape p,#mermaid-svg-KlaPCoSzX2BjkCjL .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-KlaPCoSzX2BjkCjL .icon-shape rect,#mermaid-svg-KlaPCoSzX2BjkCjL .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-KlaPCoSzX2BjkCjL .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-KlaPCoSzX2BjkCjL .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-KlaPCoSzX2BjkCjL :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

否

是

NLP

CV

通用

开始学习Python+AI

有编程基础?

阶段0: Python基础

阶段1: 数据科学基础

Python语法

数据结构

函数与模块

面向对象

NumPy数组操作

Pandas数据处理

Matplotlib可视化

阶段2: 机器学习

Scikit-learn

监督学习

无监督学习

模型评估

选择方向

阶段3a: NLP

阶段3b: 计算机视觉

阶段3c: 深度学习通用

Transformers

LLM应用

RAG开发

CNN架构

目标检测

图像生成

PyTorch基础

神经网络

模型优化

阶段4: 实战项目

端到端项目

模型部署

性能优化

🎉 AI工程师


分阶段学习指南

🟢 阶段0:Python基础(2-4周)

学习目标:掌握Python核心语法和编程思维

核心知识点

#mermaid-svg-5mpM3ZvFyi1jmtFI{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-5mpM3ZvFyi1jmtFI .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-5mpM3ZvFyi1jmtFI .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-5mpM3ZvFyi1jmtFI .error-icon{fill:#552222;}#mermaid-svg-5mpM3ZvFyi1jmtFI .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-5mpM3ZvFyi1jmtFI .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-5mpM3ZvFyi1jmtFI .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-5mpM3ZvFyi1jmtFI .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-5mpM3ZvFyi1jmtFI .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-5mpM3ZvFyi1jmtFI .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-5mpM3ZvFyi1jmtFI .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-5mpM3ZvFyi1jmtFI .marker{fill:#333333;stroke:#333333;}#mermaid-svg-5mpM3ZvFyi1jmtFI .marker.cross{stroke:#333333;}#mermaid-svg-5mpM3ZvFyi1jmtFI svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-5mpM3ZvFyi1jmtFI p{margin:0;}#mermaid-svg-5mpM3ZvFyi1jmtFI .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-5mpM3ZvFyi1jmtFI .cluster-label text{fill:#333;}#mermaid-svg-5mpM3ZvFyi1jmtFI .cluster-label span{color:#333;}#mermaid-svg-5mpM3ZvFyi1jmtFI .cluster-label span p{background-color:transparent;}#mermaid-svg-5mpM3ZvFyi1jmtFI .label text,#mermaid-svg-5mpM3ZvFyi1jmtFI span{fill:#333;color:#333;}#mermaid-svg-5mpM3ZvFyi1jmtFI .node rect,#mermaid-svg-5mpM3ZvFyi1jmtFI .node circle,#mermaid-svg-5mpM3ZvFyi1jmtFI .node ellipse,#mermaid-svg-5mpM3ZvFyi1jmtFI .node polygon,#mermaid-svg-5mpM3ZvFyi1jmtFI .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-5mpM3ZvFyi1jmtFI .rough-node .label text,#mermaid-svg-5mpM3ZvFyi1jmtFI .node .label text,#mermaid-svg-5mpM3ZvFyi1jmtFI .image-shape .label,#mermaid-svg-5mpM3ZvFyi1jmtFI .icon-shape .label{text-anchor:middle;}#mermaid-svg-5mpM3ZvFyi1jmtFI .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-5mpM3ZvFyi1jmtFI .rough-node .label,#mermaid-svg-5mpM3ZvFyi1jmtFI .node .label,#mermaid-svg-5mpM3ZvFyi1jmtFI .image-shape .label,#mermaid-svg-5mpM3ZvFyi1jmtFI .icon-shape .label{text-align:center;}#mermaid-svg-5mpM3ZvFyi1jmtFI .node.clickable{cursor:pointer;}#mermaid-svg-5mpM3ZvFyi1jmtFI .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-5mpM3ZvFyi1jmtFI .arrowheadPath{fill:#333333;}#mermaid-svg-5mpM3ZvFyi1jmtFI .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-5mpM3ZvFyi1jmtFI .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-5mpM3ZvFyi1jmtFI .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5mpM3ZvFyi1jmtFI .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-5mpM3ZvFyi1jmtFI .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5mpM3ZvFyi1jmtFI .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-5mpM3ZvFyi1jmtFI .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-5mpM3ZvFyi1jmtFI .cluster text{fill:#333;}#mermaid-svg-5mpM3ZvFyi1jmtFI .cluster span{color:#333;}#mermaid-svg-5mpM3ZvFyi1jmtFI div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-5mpM3ZvFyi1jmtFI .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-5mpM3ZvFyi1jmtFI rect.text{fill:none;stroke-width:0;}#mermaid-svg-5mpM3ZvFyi1jmtFI .icon-shape,#mermaid-svg-5mpM3ZvFyi1jmtFI .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5mpM3ZvFyi1jmtFI .icon-shape p,#mermaid-svg-5mpM3ZvFyi1jmtFI .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-5mpM3ZvFyi1jmtFI .icon-shape rect,#mermaid-svg-5mpM3ZvFyi1jmtFI .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5mpM3ZvFyi1jmtFI .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-5mpM3ZvFyi1jmtFI .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-5mpM3ZvFyi1jmtFI :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

Python基础

数据类型

控制流程

函数

面向对象

文件操作

异常处理

int, float, str

list, dict, tuple, set

if/else

for/while循环

函数定义

lambda表达式

装饰器基础

类与对象

继承与多态

必学代码示例

示例1:列表推导式

# 传统方式
squares = []
for i in range(10):
squares.append(i ** 2)

# Pythonic方式
squares = [i ** 2 for i in range(10)]

# 带条件的列表推导式
even_squares = [i ** 2 for i in range(10) if i % 2 == 0]
print(even_squares) # [0, 4, 16, 36, 64]

示例2:字典操作

# 字典推导式
word_count = "hello world hello python"
counts = {word: word_count.split().count(word)
for word in set(word_count.split())}
print(counts) # {'hello': 2, 'world': 1, 'python': 1}

# defaultdict使用
from collections import defaultdict
counts = defaultdict(int)
for word in word_count.split():
counts[word] += 1

示例3:上下文管理器

# 正确的文件操作方式
with open('data.txt', 'r', encoding='utf-8') as f:
content = f.read()
# 自动关闭文件,即使发生异常

# 自定义上下文管理器
from contextlib import contextmanager

@contextmanager
def timer():
import time
start = time.time()
yield
print(f"耗时: {time.time() – start:.2f}秒")

with timer():
sum(range(1000000))


🔵 阶段1:数据科学基础(4-6周)

学习目标:掌握数据处理、分析和可视化技能

核心技能树

#mermaid-svg-xH6U7cMjrBbYUcSB{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-xH6U7cMjrBbYUcSB .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-xH6U7cMjrBbYUcSB .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-xH6U7cMjrBbYUcSB .error-icon{fill:#552222;}#mermaid-svg-xH6U7cMjrBbYUcSB .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-xH6U7cMjrBbYUcSB .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-xH6U7cMjrBbYUcSB .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-xH6U7cMjrBbYUcSB .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-xH6U7cMjrBbYUcSB .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-xH6U7cMjrBbYUcSB .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-xH6U7cMjrBbYUcSB .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-xH6U7cMjrBbYUcSB .marker{fill:#333333;stroke:#333333;}#mermaid-svg-xH6U7cMjrBbYUcSB .marker.cross{stroke:#333333;}#mermaid-svg-xH6U7cMjrBbYUcSB svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-xH6U7cMjrBbYUcSB p{margin:0;}#mermaid-svg-xH6U7cMjrBbYUcSB .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-xH6U7cMjrBbYUcSB .cluster-label text{fill:#333;}#mermaid-svg-xH6U7cMjrBbYUcSB .cluster-label span{color:#333;}#mermaid-svg-xH6U7cMjrBbYUcSB .cluster-label span p{background-color:transparent;}#mermaid-svg-xH6U7cMjrBbYUcSB .label text,#mermaid-svg-xH6U7cMjrBbYUcSB span{fill:#333;color:#333;}#mermaid-svg-xH6U7cMjrBbYUcSB .node rect,#mermaid-svg-xH6U7cMjrBbYUcSB .node circle,#mermaid-svg-xH6U7cMjrBbYUcSB .node ellipse,#mermaid-svg-xH6U7cMjrBbYUcSB .node polygon,#mermaid-svg-xH6U7cMjrBbYUcSB .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-xH6U7cMjrBbYUcSB .rough-node .label text,#mermaid-svg-xH6U7cMjrBbYUcSB .node .label text,#mermaid-svg-xH6U7cMjrBbYUcSB .image-shape .label,#mermaid-svg-xH6U7cMjrBbYUcSB .icon-shape .label{text-anchor:middle;}#mermaid-svg-xH6U7cMjrBbYUcSB .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-xH6U7cMjrBbYUcSB .rough-node .label,#mermaid-svg-xH6U7cMjrBbYUcSB .node .label,#mermaid-svg-xH6U7cMjrBbYUcSB .image-shape .label,#mermaid-svg-xH6U7cMjrBbYUcSB .icon-shape .label{text-align:center;}#mermaid-svg-xH6U7cMjrBbYUcSB .node.clickable{cursor:pointer;}#mermaid-svg-xH6U7cMjrBbYUcSB .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-xH6U7cMjrBbYUcSB .arrowheadPath{fill:#333333;}#mermaid-svg-xH6U7cMjrBbYUcSB .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-xH6U7cMjrBbYUcSB .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-xH6U7cMjrBbYUcSB .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-xH6U7cMjrBbYUcSB .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-xH6U7cMjrBbYUcSB .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-xH6U7cMjrBbYUcSB .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-xH6U7cMjrBbYUcSB .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-xH6U7cMjrBbYUcSB .cluster text{fill:#333;}#mermaid-svg-xH6U7cMjrBbYUcSB .cluster span{color:#333;}#mermaid-svg-xH6U7cMjrBbYUcSB div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-xH6U7cMjrBbYUcSB .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-xH6U7cMjrBbYUcSB rect.text{fill:none;stroke-width:0;}#mermaid-svg-xH6U7cMjrBbYUcSB .icon-shape,#mermaid-svg-xH6U7cMjrBbYUcSB .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-xH6U7cMjrBbYUcSB .icon-shape p,#mermaid-svg-xH6U7cMjrBbYUcSB .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-xH6U7cMjrBbYUcSB .icon-shape rect,#mermaid-svg-xH6U7cMjrBbYUcSB .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-xH6U7cMjrBbYUcSB .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-xH6U7cMjrBbYUcSB .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-xH6U7cMjrBbYUcSB :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

数据科学基础

NumPy

Pandas

可视化

数组创建

数组运算

广播机制

线性代数

Series操作

DataFrame操作

数据清洗

数据分组

数据合并

Matplotlib

Seaborn

Plotly

NumPy实战代码

import numpy as np

# 数组创建
arr = np.array([[1, 2, 3], [4, 5, 6]])
zeros = np.zeros((3, 4))
random = np.random.randn(3, 3)

# 数组运算
print(arr * 2) # 元素级乘法
print(arr @ arr.T) # 矩阵乘法
print(np.dot(arr, arr.T)) # 矩阵乘法

# 广播机制
a = np.array([[1, 2, 3], [4, 5, 6]]) # (2, 3)
b = np.array([10, 20, 30]) # (3,)
print(a + b) # b广播到(2, 3)

# 实用函数
print(np.mean(arr, axis=1)) # 按行求均值
print(np.argmax(arr, axis=1)) # 按行找最大值索引

Pandas数据处理实战

import pandas as pd

# 创建DataFrame
data = {
'name': ['张三', '李四', '王五', '赵六'],
'age': [25, 30, 35, 28],
'city': ['北京', '上海', '深圳', '杭州'],
'salary': [15000, 20000, 25000, 18000]
}
df = pd.DataFrame(data)

# 数据筛选
high_salary = df[df['salary'] > 18000]
beijing = df[df['city'] == '北京']

# 数据分组
city_stats = df.groupby('city').agg({
'salary': ['mean', 'max', 'count']
})

# 数据排序
df_sorted = df.sort_values('salary', ascending=False)

# 数据合并
df2 = pd.DataFrame({
'name': ['张三', '李四'],
'department': ['技术', '产品']
})
merged = pd.merge(df, df2, on='name', how='left')

print(city_stats)

数据可视化示例

import matplotlib.pyplot as plt
import seaborn as sns

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 创建子图
fig, axes = plt.subplots(2, 2, figsize=(12, 10))

# 1. 柱状图
axes[0, 0].bar(df['name'], df['salary'])
axes[0, 0].set_title('薪资对比')
axes[0, 0].set_xlabel('姓名')
axes[0, 0].set_ylabel('薪资')

# 2. 散点图
axes[0, 1].scatter(df['age'], df['salary'], s=100, alpha=0.6)
axes[0, 1].set_title('年龄与薪资关系')
axes[0, 1].set_xlabel('年龄')
axes[0, 1].set_ylabel('薪资')

# 3. 饼图(城市分布)
city_counts = df['city'].value_counts()
axes[1, 0].pie(city_counts, labels=city_counts.index, autopct='%1.1f%%')
axes[1, 0].set_title('城市分布')

# 4. 箱线图
axes[1, 1].boxplot(df['salary'])
axes[1, 1].set_title('薪资分布')

plt.tight_layout()
plt.savefig('visualization.png', dpi=300)
plt.show()


🟡 阶段2:机器学习(6-8周)

学习目标:理解ML原理,掌握Scikit-learn实战

ML算法分类图

#mermaid-svg-BWkT98sy1bqJ38GE{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-BWkT98sy1bqJ38GE .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-BWkT98sy1bqJ38GE .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-BWkT98sy1bqJ38GE .error-icon{fill:#552222;}#mermaid-svg-BWkT98sy1bqJ38GE .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-BWkT98sy1bqJ38GE .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-BWkT98sy1bqJ38GE .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-BWkT98sy1bqJ38GE .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-BWkT98sy1bqJ38GE .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-BWkT98sy1bqJ38GE .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-BWkT98sy1bqJ38GE .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-BWkT98sy1bqJ38GE .marker{fill:#333333;stroke:#333333;}#mermaid-svg-BWkT98sy1bqJ38GE .marker.cross{stroke:#333333;}#mermaid-svg-BWkT98sy1bqJ38GE svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-BWkT98sy1bqJ38GE p{margin:0;}#mermaid-svg-BWkT98sy1bqJ38GE .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-BWkT98sy1bqJ38GE .cluster-label text{fill:#333;}#mermaid-svg-BWkT98sy1bqJ38GE .cluster-label span{color:#333;}#mermaid-svg-BWkT98sy1bqJ38GE .cluster-label span p{background-color:transparent;}#mermaid-svg-BWkT98sy1bqJ38GE .label text,#mermaid-svg-BWkT98sy1bqJ38GE span{fill:#333;color:#333;}#mermaid-svg-BWkT98sy1bqJ38GE .node rect,#mermaid-svg-BWkT98sy1bqJ38GE .node circle,#mermaid-svg-BWkT98sy1bqJ38GE .node ellipse,#mermaid-svg-BWkT98sy1bqJ38GE .node polygon,#mermaid-svg-BWkT98sy1bqJ38GE .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-BWkT98sy1bqJ38GE .rough-node .label text,#mermaid-svg-BWkT98sy1bqJ38GE .node .label text,#mermaid-svg-BWkT98sy1bqJ38GE .image-shape .label,#mermaid-svg-BWkT98sy1bqJ38GE .icon-shape .label{text-anchor:middle;}#mermaid-svg-BWkT98sy1bqJ38GE .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-BWkT98sy1bqJ38GE .rough-node .label,#mermaid-svg-BWkT98sy1bqJ38GE .node .label,#mermaid-svg-BWkT98sy1bqJ38GE .image-shape .label,#mermaid-svg-BWkT98sy1bqJ38GE .icon-shape .label{text-align:center;}#mermaid-svg-BWkT98sy1bqJ38GE .node.clickable{cursor:pointer;}#mermaid-svg-BWkT98sy1bqJ38GE .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-BWkT98sy1bqJ38GE .arrowheadPath{fill:#333333;}#mermaid-svg-BWkT98sy1bqJ38GE .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-BWkT98sy1bqJ38GE .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-BWkT98sy1bqJ38GE .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-BWkT98sy1bqJ38GE .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-BWkT98sy1bqJ38GE .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-BWkT98sy1bqJ38GE .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-BWkT98sy1bqJ38GE .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-BWkT98sy1bqJ38GE .cluster text{fill:#333;}#mermaid-svg-BWkT98sy1bqJ38GE .cluster span{color:#333;}#mermaid-svg-BWkT98sy1bqJ38GE div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-BWkT98sy1bqJ38GE .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-BWkT98sy1bqJ38GE rect.text{fill:none;stroke-width:0;}#mermaid-svg-BWkT98sy1bqJ38GE .icon-shape,#mermaid-svg-BWkT98sy1bqJ38GE .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-BWkT98sy1bqJ38GE .icon-shape p,#mermaid-svg-BWkT98sy1bqJ38GE .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-BWkT98sy1bqJ38GE .icon-shape rect,#mermaid-svg-BWkT98sy1bqJ38GE .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-BWkT98sy1bqJ38GE .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-BWkT98sy1bqJ38GE .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-BWkT98sy1bqJ38GE :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

机器学习

监督学习

无监督学习

强化学习

回归

分类

线性回归

决策树回归

随机森林回归

梯度提升回归

逻辑回归

SVM

决策树

随机森林

XGBoost

神经网络

聚类

降维

K-Means

DBSCAN

层次聚类

PCA

t-SNE

UMAP

经典算法实现

1. 线性回归完整流程

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.preprocessing import StandardScaler

# 生成模拟数据
np.random.seed(42)
n_samples = 1000

# 特征:面积、房间数、房龄
X = np.random.randn(n_samples, 3)
X[:, 0] = X[:, 0] * 50 + 100 # 面积:50-150㎡
X[:, 1] = np.abs(X[:, 1]) * 2 + 1 # 房间数:1-5间
X[:, 2] = np.abs(X[:, 2]) * 10 + 1 # 房龄:1-30年

# 真实价格 = 面积*1000 + 房间数*50000 – 房龄*2000 + 噪声
y = (X[:, 0] * 1000 + X[:, 1] * 50000 – X[:, 2] * 2000 +
np.random.randn(n_samples) * 50000)

# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)

# 特征标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# 训练模型
model = LinearRegression()
model.fit(X_train_scaled, y_train)

# 预测
y_pred = model.predict(X_test_scaled)

# 评估
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print(f"均方误差 MSE: {mse:.2f}")
print(f"决定系数 R²: {r2:.4f}")
print(f"系数: {model.coef_}")
print(f"截距: {model.intercept_:.2f}")

# 可视化预测结果
plt.figure(figsize=(10, 6))
plt.scatter(y_test, y_pred, alpha=0.5)
plt.plot([y.min(), y.max()], [y.min(), y.max()], 'r–', lw=2)
plt.xlabel('真实价格')
plt.ylabel('预测价格')
plt.title('房价预测:真实值 vs 预测值')
plt.grid(True, alpha=0.3)
plt.show()

2. 分类算法对比

from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.neighbors import KNeighborsClassifier

# 生成分类数据
X, y = make_classification(
n_samples=1000, n_features=20, n_informative=15,
n_redundant=5, n_classes=3, random_state=42
)

# 定义模型
models = {
'逻辑回归': LogisticRegression(max_iter=1000),
'SVM': SVC(),
'决策树': DecisionTreeClassifier(),
'随机森林': RandomForestClassifier(n_estimators=100),
'朴素贝叶斯': GaussianNB(),
'KNN': KNeighborsClassifier()
}

# 交叉验证评估
results = {}
for name, model in models.items():
scores = cross_val_score(model, X, y, cv=5, scoring='accuracy')
results[name] = {
'mean': scores.mean(),
'std': scores.std()
}
print(f"{name}: {scores.mean():.4f} (+/- {scores.std():.4f})")

# 可视化对比
plt.figure(figsize=(12, 6))
names = list(results.keys())
means = [results[name]['mean'] for name in names]
stds = [results[name]['std'] for name in names]

plt.bar(names, means, yerr=stds, alpha=0.8, capsize=5)
plt.ylabel('准确率')
plt.title('不同分类算法性能对比(5折交叉验证)')
plt.ylim(0.7, 1.0)
plt.grid(axis='y', alpha=0.3)
plt.xticks(rotation=15)
plt.show()

3. 聚类算法实现

from sklearn.cluster import KMeans, DBSCAN
from sklearn.datasets import make_blobs
from sklearn.metrics import silhouette_score

# 生成聚类数据
X, _ = make_blobs(
n_samples=500, centers=4, cluster_std=1.5,
random_state=42
)

# K-Means聚类(需要指定簇数)
kmeans = KMeans(n_clusters=4, random_state=42, n_init=10)
kmeans_labels = kmeans.fit_predict(X)
kmeans_silhouette = silhouette_score(X, kmeans_labels)

# DBSCAN聚类(自动发现簇数)
dbscan = DBSCAN(eps=1.5, min_samples=10)
dbscan_labels = dbscan.fit_predict(X)
n_clusters = len(set(dbscan_labels)) – (1 if –1 in dbscan_labels else 0)

print(f"K-Means: 发现4个簇, 轮廓系数={kmeans_silhouette:.3f}")
print(f"DBSCAN: 发现{n_clusters}个簇")

# 肘部法则确定最佳K值
inertias = []
K_range = range(2, 11)
for K in K_range:
kmeans = KMeans(n_clusters=K, random_state=42, n_init=10)
kmeans.fit(X)
inertias.append(kmeans.inertia_)

plt.figure(figsize=(12, 5))

# 肘部图
plt.subplot(1, 2, 1)
plt.plot(K_range, inertias, 'bo-')
plt.xlabel('K值')
plt.ylabel('惯性(Inertia)')
plt.title('肘部法则确定最佳K值')
plt.grid(True, alpha=0.3)

# 聚类结果可视化
plt.subplot(1, 2, 2)
plt.scatter(X[:, 0], X[:, 1], c=kmeans_labels, cmap='viridis', alpha=0.6)
plt.scatter(kmeans.cluster_centers_[:, 0],
kmeans.cluster_centers_[:, 1],
c='red', s=200, marker='X', label='质心')
plt.title('K-Means聚类结果')
plt.legend()
plt.tight_layout()
plt.show()


🟠 阶段3:深度学习(8-12周)

学习目标:掌握PyTorch,理解深度学习原理

深度学习框架选择

#mermaid-svg-rECxYaUTqAA2L6Ba{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-rECxYaUTqAA2L6Ba .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-rECxYaUTqAA2L6Ba .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-rECxYaUTqAA2L6Ba .error-icon{fill:#552222;}#mermaid-svg-rECxYaUTqAA2L6Ba .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-rECxYaUTqAA2L6Ba .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-rECxYaUTqAA2L6Ba .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-rECxYaUTqAA2L6Ba .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-rECxYaUTqAA2L6Ba .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-rECxYaUTqAA2L6Ba .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-rECxYaUTqAA2L6Ba .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-rECxYaUTqAA2L6Ba .marker{fill:#333333;stroke:#333333;}#mermaid-svg-rECxYaUTqAA2L6Ba .marker.cross{stroke:#333333;}#mermaid-svg-rECxYaUTqAA2L6Ba svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-rECxYaUTqAA2L6Ba p{margin:0;}#mermaid-svg-rECxYaUTqAA2L6Ba .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-rECxYaUTqAA2L6Ba .cluster-label text{fill:#333;}#mermaid-svg-rECxYaUTqAA2L6Ba .cluster-label span{color:#333;}#mermaid-svg-rECxYaUTqAA2L6Ba .cluster-label span p{background-color:transparent;}#mermaid-svg-rECxYaUTqAA2L6Ba .label text,#mermaid-svg-rECxYaUTqAA2L6Ba span{fill:#333;color:#333;}#mermaid-svg-rECxYaUTqAA2L6Ba .node rect,#mermaid-svg-rECxYaUTqAA2L6Ba .node circle,#mermaid-svg-rECxYaUTqAA2L6Ba .node ellipse,#mermaid-svg-rECxYaUTqAA2L6Ba .node polygon,#mermaid-svg-rECxYaUTqAA2L6Ba .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-rECxYaUTqAA2L6Ba .rough-node .label text,#mermaid-svg-rECxYaUTqAA2L6Ba .node .label text,#mermaid-svg-rECxYaUTqAA2L6Ba .image-shape .label,#mermaid-svg-rECxYaUTqAA2L6Ba .icon-shape .label{text-anchor:middle;}#mermaid-svg-rECxYaUTqAA2L6Ba .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-rECxYaUTqAA2L6Ba .rough-node .label,#mermaid-svg-rECxYaUTqAA2L6Ba .node .label,#mermaid-svg-rECxYaUTqAA2L6Ba .image-shape .label,#mermaid-svg-rECxYaUTqAA2L6Ba .icon-shape .label{text-align:center;}#mermaid-svg-rECxYaUTqAA2L6Ba .node.clickable{cursor:pointer;}#mermaid-svg-rECxYaUTqAA2L6Ba .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-rECxYaUTqAA2L6Ba .arrowheadPath{fill:#333333;}#mermaid-svg-rECxYaUTqAA2L6Ba .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-rECxYaUTqAA2L6Ba .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-rECxYaUTqAA2L6Ba .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-rECxYaUTqAA2L6Ba .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-rECxYaUTqAA2L6Ba .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-rECxYaUTqAA2L6Ba .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-rECxYaUTqAA2L6Ba .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-rECxYaUTqAA2L6Ba .cluster text{fill:#333;}#mermaid-svg-rECxYaUTqAA2L6Ba .cluster span{color:#333;}#mermaid-svg-rECxYaUTqAA2L6Ba div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-rECxYaUTqAA2L6Ba .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-rECxYaUTqAA2L6Ba rect.text{fill:none;stroke-width:0;}#mermaid-svg-rECxYaUTqAA2L6Ba .icon-shape,#mermaid-svg-rECxYaUTqAA2L6Ba .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-rECxYaUTqAA2L6Ba .icon-shape p,#mermaid-svg-rECxYaUTqAA2L6Ba .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-rECxYaUTqAA2L6Ba .icon-shape rect,#mermaid-svg-rECxYaUTqAA2L6Ba .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-rECxYaUTqAA2L6Ba .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-rECxYaUTqAA2L6Ba .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-rECxYaUTqAA2L6Ba :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

深度学习框架

PyTorch

TensorFlow

JAX

研究首选

动态图

Python原生风格

工业部署

TF-Serving

TFLite移动端

函数式编程

自动微分

高性能计算

PyTorch实战代码

1. 构建神经网络

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset
import matplotlib.pyplot as plt

# 检查CUDA可用性
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
print(f"使用设备: {device}")

# 定义神经网络
class NeuralNetwork(nn.Module):
def __init__(self, input_size, hidden_size, num_classes):
super(NeuralNetwork, self).__init__()
self.layer1 = nn.Linear(input_size, hidden_size)
self.relu = nn.ReLU()
self.layer2 = nn.Linear(hidden_size, hidden_size // 2)
self.layer3 = nn.Linear(hidden_size // 2, num_classes)
self.dropout = nn.Dropout(0.2)

def forward(self, x):
out = self.layer1(x)
out = self.relu(out)
out = self.dropout(out)
out = self.layer2(out)
out = self.relu(out)
out = self.dropout(out)
out = self.layer3(out)
return out

# 超参数
input_size = 784 # MNIST图像28×28
hidden_size = 256
num_classes = 10
num_epochs = 10
batch_size = 100
learning_rate = 0.001

# 初始化模型
model = NeuralNetwork(input_size, hidden_size, num_classes).to(device)

# 损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=learning_rate)

# 模拟数据
X_train = torch.randn(1000, input_size).to(device)
y_train = torch.randint(0, num_classes, (1000,)).to(device)
train_dataset = TensorDataset(X_train, y_train)
train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)

# 训练循环
train_losses = []
for epoch in range(num_epochs):
model.train()
epoch_loss = 0
for i, (images, labels) in enumerate(train_loader):
# 前向传播
outputs = model(images)
loss = criterion(outputs, labels)

# 反向传播和优化
optimizer.zero_grad()
loss.backward()
optimizer.step()

epoch_loss += loss.item()

avg_loss = epoch_loss / len(train_loader)
train_losses.append(avg_loss)
print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {avg_loss:.4f}')

# 绘制训练曲线
plt.figure(figsize=(10, 5))
plt.plot(train_losses, marker='o')
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.title('训练损失曲线')
plt.grid(True, alpha=0.3)
plt.show()

2. CNN图像分类

import torch
import torch.nn as nn
import torch.nn.functional as F

class CNN(nn.Module):
def __init__(self, num_classes=10):
super(CNN, self).__init__()
# 第一个卷积块
self.conv1 = nn.Conv2d(1, 32, kernel_size=3, padding=1)
self.bn1 = nn.BatchNorm2d(32)
self.conv2 = nn.Conv2d(32, 32, kernel_size=3, padding=1)
self.bn2 = nn.BatchNorm2d(32)
self.pool1 = nn.MaxPool2d(2, 2)

# 第二个卷积块
self.conv3 = nn.Conv2d(32, 64, kernel_size=3, padding=1)
self.bn3 = nn.BatchNorm2d(64)
self.conv4 = nn.Conv2d(64, 64, kernel_size=3, padding=1)
self.bn4 = nn.BatchNorm2d(64)
self.pool2 = nn.MaxPool2d(2, 2)

# 全连接层
self.fc1 = nn.Linear(64 * 7 * 7, 256)
self.dropout = nn.Dropout(0.5)
self.fc2 = nn.Linear(256, num_classes)

def forward(self, x):
# 第一个卷积块
x = F.relu(self.bn1(self.conv1(x)))
x = F.relu(self.bn2(self.conv2(x)))
x = self.pool1(x)

# 第二个卷积块
x = F.relu(self.bn3(self.conv3(x)))
x = F.relu(self.bn4(self.conv4(x)))
x = self.pool2(x)

# 展平
x = x.view(–1, 64 * 7 * 7)

# 全连接层
x = F.relu(self.fc1(x))
x = self.dropout(x)
x = self.fc2(x)
return x

# 模型结构可视化
model = CNN()
print(model)

# 统计参数量
total_params = sum(p.numel() for p in model.parameters())
trainable_params = sum(p.numel() for p in model.parameters() if p.requires_grad)
print(f"总参数量: {total_params:,}")
print(f"可训练参数量: {trainable_params:,}")

3. Transformer注意力机制

import torch
import torch.nn as nn
import math

class MultiHeadAttention(nn.Module):
def __init__(self, d_model, num_heads):
super(MultiHeadAttention, self).__init__()
assert d_model % num_heads == 0

self.d_model = d_model
self.num_heads = num_heads
self.d_k = d_model // num_heads

self.W_q = nn.Linear(d_model, d_model)
self.W_k = nn.Linear(d_model, d_model)
self.W_v = nn.Linear(d_model, d_model)
self.W_o = nn.Linear(d_model, d_model)

def scaled_dot_product_attention(self, Q, K, V, mask=None):
scores = torch.matmul(Q, K.transpose(–2, –1)) / math.sqrt(self.d_k)
if mask is not None:
scores = scores.masked_fill(mask == 0, –1e9)
attention_weights = F.softmax(scores, dim=–1)
output = torch.matmul(attention_weights, V)
return output, attention_weights

def forward(self, query, key, value, mask=None):
batch_size = query.size(0)

# 线性变换并分割成多头
Q = self.W_q(query).view(batch_size, –1, self.num_heads, self.d_k).transpose(1, 2)
K = self.W_k(key).view(batch_size, –1, self.num_heads, self.d_k).transpose(1, 2)
V = self.W_v(value).view(batch_size, –1, self.num_heads, self.d_k).transpose(1, 2)

# 计算注意力
x, attention_weights = self.scaled_dot_product_attention(Q, K, V, mask)

# 拼接多头
x = x.transpose(1, 2).contiguous().view(batch_size, –1, self.d_model)

# 最终线性变换
output = self.W_o(x)
return output, attention_weights

# 使用示例
d_model = 512
num_heads = 8
seq_length = 10
batch_size = 4

# 创建模拟输入
x = torch.randn(batch_size, seq_length, d_model)

# 创建注意力层
mha = MultiHeadAttention(d_model, num_heads)
output, attention = mha(x, x, x)

print(f"输入形状: {x.shape}")
print(f"输出形状: {output.shape}")
print(f"注意力权重形状: {attention.shape}")


🔴 阶段4:NLP与LLM应用(6-8周)

学习目标:掌握现代NLP技术,熟练使用大语言模型

NLP技术发展时间线

#mermaid-svg-etm2yF6o5ZMRIe1q{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-etm2yF6o5ZMRIe1q .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-etm2yF6o5ZMRIe1q .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-etm2yF6o5ZMRIe1q .error-icon{fill:#552222;}#mermaid-svg-etm2yF6o5ZMRIe1q .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-etm2yF6o5ZMRIe1q .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-etm2yF6o5ZMRIe1q .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-etm2yF6o5ZMRIe1q .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-etm2yF6o5ZMRIe1q .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-etm2yF6o5ZMRIe1q .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-etm2yF6o5ZMRIe1q .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-etm2yF6o5ZMRIe1q .marker{fill:#333333;stroke:#333333;}#mermaid-svg-etm2yF6o5ZMRIe1q .marker.cross{stroke:#333333;}#mermaid-svg-etm2yF6o5ZMRIe1q svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-etm2yF6o5ZMRIe1q p{margin:0;}#mermaid-svg-etm2yF6o5ZMRIe1q .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-etm2yF6o5ZMRIe1q .cluster-label text{fill:#333;}#mermaid-svg-etm2yF6o5ZMRIe1q .cluster-label span{color:#333;}#mermaid-svg-etm2yF6o5ZMRIe1q .cluster-label span p{background-color:transparent;}#mermaid-svg-etm2yF6o5ZMRIe1q .label text,#mermaid-svg-etm2yF6o5ZMRIe1q span{fill:#333;color:#333;}#mermaid-svg-etm2yF6o5ZMRIe1q .node rect,#mermaid-svg-etm2yF6o5ZMRIe1q .node circle,#mermaid-svg-etm2yF6o5ZMRIe1q .node ellipse,#mermaid-svg-etm2yF6o5ZMRIe1q .node polygon,#mermaid-svg-etm2yF6o5ZMRIe1q .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-etm2yF6o5ZMRIe1q .rough-node .label text,#mermaid-svg-etm2yF6o5ZMRIe1q .node .label text,#mermaid-svg-etm2yF6o5ZMRIe1q .image-shape .label,#mermaid-svg-etm2yF6o5ZMRIe1q .icon-shape .label{text-anchor:middle;}#mermaid-svg-etm2yF6o5ZMRIe1q .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-etm2yF6o5ZMRIe1q .rough-node .label,#mermaid-svg-etm2yF6o5ZMRIe1q .node .label,#mermaid-svg-etm2yF6o5ZMRIe1q .image-shape .label,#mermaid-svg-etm2yF6o5ZMRIe1q .icon-shape .label{text-align:center;}#mermaid-svg-etm2yF6o5ZMRIe1q .node.clickable{cursor:pointer;}#mermaid-svg-etm2yF6o5ZMRIe1q .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-etm2yF6o5ZMRIe1q .arrowheadPath{fill:#333333;}#mermaid-svg-etm2yF6o5ZMRIe1q .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-etm2yF6o5ZMRIe1q .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-etm2yF6o5ZMRIe1q .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-etm2yF6o5ZMRIe1q .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-etm2yF6o5ZMRIe1q .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-etm2yF6o5ZMRIe1q .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-etm2yF6o5ZMRIe1q .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-etm2yF6o5ZMRIe1q .cluster text{fill:#333;}#mermaid-svg-etm2yF6o5ZMRIe1q .cluster span{color:#333;}#mermaid-svg-etm2yF6o5ZMRIe1q div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-etm2yF6o5ZMRIe1q .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-etm2yF6o5ZMRIe1q rect.text{fill:none;stroke-width:0;}#mermaid-svg-etm2yF6o5ZMRIe1q .icon-shape,#mermaid-svg-etm2yF6o5ZMRIe1q .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-etm2yF6o5ZMRIe1q .icon-shape p,#mermaid-svg-etm2yF6o5ZMRIe1q .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-etm2yF6o5ZMRIe1q .icon-shape rect,#mermaid-svg-etm2yF6o5ZMRIe1q .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-etm2yF6o5ZMRIe1q .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-etm2yF6o5ZMRIe1q .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-etm2yF6o5ZMRIe1q :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

2017Transformer

2018BERT/GPT

2019GPT-2

2020GPT-3

2022ChatGPT

2023GPT-4/Llama2

2024多模态大模型

Transformers实战

1. 使用预训练模型

from transformers import pipeline, AutoTokenizer, AutoModelForSequenceClassification
import torch

# 情感分析
sentiment_pipeline = pipeline(
"sentiment-analysis",
model="distilbert-base-uncased-finetuned-sst-2-english"
)

texts = [
"I love this product! It's amazing!",
"This is the worst experience ever.",
"It's okay, nothing special."
]

results = sentiment_pipeline(texts)
for text, result in zip(texts, results):
print(f"文本: {text}")
print(f"情感: {result['label']}, 置信度: {result['score']:.4f}\\n")

# 文本分类
tokenizer = AutoTokenizer.from_pretrained("bert-base-chinese")
model = AutoModelForSequenceClassification.from_pretrained(
"bert-base-chinese",
num_labels=3 # 正面、中性、负面
)

# 编码文本
text = "这家餐厅的菜品味道很好,服务也很周到!"
inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True)

# 预测
with torch.no_grad():
outputs = model(**inputs)
predictions = torch.nn.functional.softmax(outputs.logits, dim=–1)
predicted_class = torch.argmax(predictions).item()

labels = ["负面", "中性", "正面"]
print(f"预测类别: {labels[predicted_class]}")
print(f"置信度: {predictions[0][predicted_class]:.4f}")

2. RAG检索增强生成

from langchain.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import FAISS
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate

# 1. 加载文档
loader = TextLoader('knowledge_base.txt')
documents = loader.load()

# 2. 文本切分
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=50,
length_function=len
)
splits = text_splitter.split_documents(documents)

# 3. 创建向量存储
embeddings = HuggingFaceEmbeddings(
model_name="sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2"
)
vectorstore = FAISS.from_documents(splits, embeddings)

# 4. 创建检索器
retriever = vectorstore.as_retriever(
search_type="similarity",
search_kwargs={"k": 3}
)

# 5. 自定义提示模板
prompt_template = """使用以下上下文信息来回答问题。如果不知道答案,就说不知道,不要编造答案。

上下文信息:
{context}

问题: {question}

答案:"""

PROMPT = PromptTemplate(
template=prompt_template,
input_variables=["context", "question"]
)

# 6. 创建QA链
qa_chain = RetrievalQA.from_chain_type(
llm=OpenAI(temperature=0),
chain_type="stuff",
retriever=retriever,
return_source_documents=True,
chain_type_kwargs={"prompt": PROMPT}
)

# 7. 查询
query = "如何办理社保卡?"
result = qa_chain({"query": query})

print(f"问题: {query}")
print(f"答案: {result['result']}")
print("\\n参考文档:")
for doc in result['source_documents']:
print(f"- {doc.page_content[:100]}…")

3. 简单的ChatGLM对话示例

from transformers import AutoTokenizer, AutoModel
import torch

# 加载模型
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm3-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm3-6b", trust_remote_code=True).half().cuda()
model = model.eval()

# 对话历史
history = []
response = "你好!我是智能助手小政,有什么可以帮助您的吗?"
print(f"助手: {response}")

while True:
user_input = input("\\n用户: ")
if user_input.lower() in ['退出', 'exit', 'quit']:
break

# 添加政务系统人设
system_prompt = "你是一个政务服务大厅的智能引导员,名叫'小政'。"

response, history = model.chat(
tokenizer,
f"{system_prompt}\\n用户: {user_input}",
history=history,
max_length=2048,
temperature=0.7
)

print(f"小政: {response}")
history.append((user_input, response))


🟣 阶段5:实战项目(持续进行)

项目推荐
项目类型难度涉及技术预计时间
房价预测 ⭐⭐ Pandas, Scikit-learn 1周
图像分类 ⭐⭐⭐ PyTorch, CNN 2周
情感分析 ⭐⭐⭐ Transformers, NLP 2周
智能客服 ⭐⭐⭐⭐ LangChain, LLM 3周
RAG系统 ⭐⭐⭐⭐⭐ 向量数据库, Agent 4周
端到端项目示例:智能文档问答系统

# project_structure.txt
"""
智能文档问答系统
│
├── data/ # 数据目录
│ ├── documents/ # 原始文档
│ └── vectorstore/ # 向量存储
│
├── src/ # 源代码
│ ├── config.py # 配置文件
│ ├── loader.py # 文档加载
│ ├── embeddings.py # 向量化
│ ├── retriever.py # 检索器
│ ├── generator.py # 生成器
│ └── api.py # API接口
│
├── app.py # 主应用
├── requirements.txt # 依赖
└── README.md # 说明文档
"""

# config.py
import os
from dataclasses import dataclass
from typing import Optional

@dataclass
class Config:
# API密钥
OPENAI_API_KEY: str = os.getenv("OPENAI_API_KEY", "")

# 模型配置
EMBEDDING_MODEL: str = "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2"
LLM_MODEL: str = "gpt-3.5-turbo"
LLM_TEMPERATURE: float = 0.7
LLM_MAX_TOKENS: int = 1000

# 向量存储配置
CHUNK_SIZE: int = 500
CHUNK_OVERLAP: int = 50
VECTOR_DB_PATH: str = "data/vectorstore"

# 检索配置
TOP_K: int = 3
SIMILARITY_THRESHOLD: float = 0.7

# API配置
API_HOST: str = "0.0.0.0"
API_PORT: int = 8000

# loader.py
from typing import List
from langchain.document_loaders import (
TextLoader,
PyPDFLoader,
DirectoryLoader
)
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.schema import Document

class DocumentLoader:
def __init__(self, chunk_size: int = 500, chunk_overlap: int = 50):
self.text_splitter = RecursiveCharacterTextSplitter(
chunk_size=chunk_size,
chunk_overlap=chunk_overlap,
length_function=len,
separators=["\\n\\n", "\\n", "。", "!", "?", ".", "!", "?", " ", ""]
)

def load_text(self, file_path: str) –> List[Document]:
"""加载文本文件"""
loader = TextLoader(file_path, encoding='utf-8')
documents = loader.load()
return self.text_splitter.split_documents(documents)

def load_pdf(self, file_path: str) –> List[Document]:
"""加载PDF文件"""
loader = PyPDFLoader(file_path)
documents = loader.load()
return self.text_splitter.split_documents(documents)

def load_directory(self, directory: str, glob: str = "**/*.txt") –> List[Document]:
"""加载目录下的所有文档"""
loader = DirectoryLoader(directory, glob=glob)
documents = loader.load()
return self.text_splitter.split_documents(documents)

# api.py
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import List, Optional
import uvicorn

app = FastAPI(title="智能文档问答系统", version="1.0.0")

class QueryRequest(BaseModel):
question: str
top_k: Optional[int] = 3

class QueryResponse(BaseModel):
answer: str
sources: List[str]
confidence: float

@app.get("/")
async def root():
return {
"message": "智能文档问答系统API",
"version": "1.0.0",
"endpoints": {
"/query": "POST – 问答接口",
"/health": "GET – 健康检查"
}
}

@app.get("/health")
async def health_check():
return {"status": "healthy"}

@app.post("/query", response_model=QueryResponse)
async def query(request: QueryRequest):
try:
# 这里调用实际的问答逻辑
# result = qa_chain({"query": request.question})

return QueryResponse(
answer="这是示例回答",
sources=["来源1", "来源2"],
confidence=0.95
)
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))

if __name__ == "__main__":
uvicorn.run(
"api:app",
host="0.0.0.0",
port=8000,
reload=True
)


实战代码示例

示例1:完整的机器学习项目

"""
项目:预测客户是否会购买理财产品
数据集:模拟银行客户数据
"""

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split, cross_val_score, GridSearchCV
from sklearn.preprocessing import StandardScaler, LabelEncoder
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, confusion_matrix, roc_auc_score, roc_curve
from sklearn.pipeline import Pipeline
import warnings
warnings.filterwarnings('ignore')

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# ========== 1. 数据生成 ==========
np.random.seed(42)
n_samples = 5000

data = {
'年龄': np.random.randint(18, 70, n_samples),
'收入': np.random.randint(3000, 50000, n_samples),
'存款': np.random.randint(0, 1000000, n_samples),
'债务': np.random.randint(0, 500000, n_samples),
'信用评分': np.random.randint(300, 850, n_samples),
'已购买产品数': np.random.randint(0, 10, n_samples),
'上次购买天数': np.random.randint(30, 3650, n_samples),
'职业': np.random.choice(['学生', '上班族', '个体户', '退休', '自由职业'], n_samples),
'婚姻状况': np.random.choice(['单身', '已婚', '离异'], n_samples),
'学历': np.random.choice(['高中', '本科', '硕士', '博士'], n_samples),
}

df = pd.DataFrame(data)

# 生成目标变量(基于特征组合)
def calc_purchase_prob(row):
score = 0
if 25 <= row['年龄'] <= 55:
score += 20
if row['收入'] > 15000:
score += 20
if row['存款'] > 100000:
score += 20
if row['信用评分'] > 650:
score += 15
if row['职业'] in ['上班族', '个体户']:
score += 15
return min(score + np.random.randint(–10, 10), 100) / 100

df['购买概率'] = df.apply(calc_purchase_prob, axis=1)
df['是否购买'] = (df['购买概率'] > 0.5).astype(int)

# ========== 2. 数据探索 ==========
print("=" * 50)
print("数据集基本信息")
print("=" * 50)
print(df.info())
print("\\n目标变量分布:")
print(df['是否购买'].value_counts())
print(f"购买率: {df['是否购买'].mean():.2%}")

# 可视化
fig, axes = plt.subplots(2, 3, figsize=(15, 10))

# 年龄分布
axes[0, 0].hist(df[df['是否购买']==0]['年龄'], bins=30, alpha=0.5, label='未购买')
axes[0, 0].hist(df[df['是否购买']==1]['年龄'], bins=30, alpha=0.5, label='购买')
axes[0, 0].set_xlabel('年龄')
axes[0, 0].set_ylabel('人数')
axes[0, 0].legend()
axes[0, 0].set_title('年龄与购买关系')

# 收入分布
axes[0, 1].hist(df[df['是否购买']==0]['收入'], bins=30, alpha=0.5, label='未购买')
axes[0, 1].hist(df[df['是否购买']==1]['收入'], bins=30, alpha=0.5, label='购买')
axes[0, 1].set_xlabel('收入')
axes[0, 1].legend()
axes[0, 1].set_title('收入与购买关系')

# 信用评分分布
axes[0, 2].hist(df[df['是否购买']==0]['信用评分'], bins=30, alpha=0.5, label='未购买')
axes[0, 2].hist(df[df['是否购买']==1]['信用评分'], bins=30, alpha=0.5, label='购买')
axes[0, 2].set_xlabel('信用评分')
axes[0, 2].legend()
axes[0, 2].set_title('信用评分与购买关系')

# 职业分布
career_purchase = df.groupby('职业')['是否购买'].mean()
axes[1, 0].bar(career_purchase.index, career_purchase.values)
axes[1, 0].set_ylabel('购买率')
axes[1, 0].set_title('不同职业的购买率')

# 学历分布
edu_purchase = df.groupby('学历')['是否购买'].mean()
axes[1, 1].bar(edu_purchase.index, edu_purchase.values)
axes[1, 1].set_ylabel('购买率')
axes[1, 1].set_title('不同学历的购买率')

# 相关性热图
numeric_cols = ['年龄', '收入', '存款', '债务', '信用评分', '已购买产品数', '上次购买天数', '是否购买']
correlation = df[numeric_cols].corr()
sns.heatmap(correlation, annot=True, fmt='.2f', cmap='coolwarm',
center=0, ax=axes[1, 2])
axes[1, 2].set_title('特征相关性热图')

plt.tight_layout()
plt.savefig('data_exploration.png', dpi=300)
plt.show()

# ========== 3. 特征工程 ==========
# 编码分类变量
le = LabelEncoder()
df['职业编码'] = le.fit_transform(df['职业'])
df['婚姻编码'] = le.fit_transform(df['婚姻状况'])
df['学历编码'] = le.fit_transform(df['学历'])

# 创建新特征
df['债务收入比'] = df['债务'] / (df['收入'] * 12 + 1)
df['存款收入比'] = df['存款'] / (df['收入'] * 12 + 1)
df['净资产'] = df['存款'] – df['债务']

# 选择特征
feature_cols = [
'年龄', '收入', '存款', '债务', '信用评分',
'已购买产品数', '上次购买天数',
'职业编码', '婚姻编码', '学历编码',
'债务收入比', '存款收入比', '净资产'
]

X = df[feature_cols]
y = df['是否购买']

# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)

# ========== 4. 模型训练与评估 ==========
# 定义模型
models = {
'逻辑回归': Pipeline([
('scaler', StandardScaler()),
('model', LogisticRegression(max_iter=1000, random_state=42))
]),
'随机森林': RandomForestClassifier(n_estimators=100, random_state=42),
'梯度提升': GradientBoostingClassifier(random_state=42)
}

# 训练和评估
results = {}
for name, model in models.items():
print(f"\\n训练 {name}…")
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)
y_pred_proba = model.predict_proba(X_test)[:, 1]

# 评估
results[name] = {
'model': model,
'predictions': y_pred,
'probabilities': y_pred_proba,
'accuracy': model.score(X_test, y_test),
'roc_auc': roc_auc_score(y_test, y_pred_proba)
}

print(f"准确率: {results[name]['accuracy']:.4f}")
print(f"AUC: {results[name]['roc_auc']:.4f}")

# ========== 5. 最佳模型分析 ==========
best_model_name = max(results, key=lambda x: results[x]['roc_auc'])
best_model = results[best_model_name]['model']

print(f"\\n最佳模型: {best_model_name}")
print("=" * 50)
print("\\n分类报告:")
print(classification_report(y_test, results[best_model_name]['predictions']))

# 混淆矩阵
cm = confusion_matrix(y_test, results[best_model_name]['predictions'])
plt.figure(figsize=(8, 6))
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues')
plt.xlabel('预测标签')
plt.ylabel('真实标签')
plt.title(f'{best_model_name} – 混淆矩阵')
plt.show()

# ROC曲线
plt.figure(figsize=(10, 6))
for name, result in results.items():
fpr, tpr, _ = roc_curve(y_test, result['probabilities'])
plt.plot(fpr, tpr, label=f"{name} (AUC = {result['roc_auc']:.3f})")

plt.plot([0, 1], [0, 1], 'k–', label='随机分类器')
plt.xlabel('假正率')
plt.ylabel('真正率')
plt.title('ROC曲线对比')
plt.legend()
plt.grid(alpha=0.3)
plt.show()

# 特征重要性(树模型)
if hasattr(best_model, 'feature_importances_'):
feature_importance = pd.DataFrame({
'feature': feature_cols,
'importance': best_model.feature_importances_
}).sort_values('importance', ascending=False)

plt.figure(figsize=(10, 6))
plt.barh(feature_importance['feature'], feature_importance['importance'])
plt.xlabel('重要性')
plt.title('特征重要性')
plt.tight_layout()
plt.show()

print("\\n特征重要性排序:")
print(feature_importance)

print("\\n" + "=" * 50)
print("项目完成!")
print("=" * 50)


学习资源推荐

📚 在线课程

平台课程适合阶段难度
Coursera Machine Learning (Andrew Ng) 初学者 ⭐⭐⭐
吴恩达深度学习课程 Deep Learning Specialization 阶段2-3 ⭐⭐⭐⭐
李宏毅机器学习 Machine Learning 中级 ⭐⭐⭐⭐
Fast.ai Practical Deep Learning for Coders 实战导向 ⭐⭐⭐⭐
极客时间 Python进阶 阶段0-1 ⭐⭐

📖 推荐书籍

┌─────────────────────────────────────────────────────┐
│ Python编程 │
│ – 《Python编程:从入门到实践》 │
│ – 《流畅的Python》 │
│ │
│ 数据科学 │
│ – 《利用Python进行数据分析》 │
│ – 《Python数据科学手册》 │
│ │
│ 机器学习 │
│ – 《机器学习》(周志华) │
│ – 《统计学习方法》(李航) │
│ – 《西瓜书》 │
│ │
│ 深度学习 │
│ – 《深度学习》(花书) │
│ – 《动手学深度学习》 │
│ │
│ NLP与LLM │
│ – 《自然语言处理综论》 │
│ – 《注意力机制》 │
└─────────────────────────────────────────────────────┘

🛠️ 实用工具与库

#mermaid-svg-0no33YHOPbWduL36{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-0no33YHOPbWduL36 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-0no33YHOPbWduL36 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-0no33YHOPbWduL36 .error-icon{fill:#552222;}#mermaid-svg-0no33YHOPbWduL36 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-0no33YHOPbWduL36 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-0no33YHOPbWduL36 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-0no33YHOPbWduL36 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-0no33YHOPbWduL36 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-0no33YHOPbWduL36 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-0no33YHOPbWduL36 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-0no33YHOPbWduL36 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-0no33YHOPbWduL36 .marker.cross{stroke:#333333;}#mermaid-svg-0no33YHOPbWduL36 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-0no33YHOPbWduL36 p{margin:0;}#mermaid-svg-0no33YHOPbWduL36 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-0no33YHOPbWduL36 .cluster-label text{fill:#333;}#mermaid-svg-0no33YHOPbWduL36 .cluster-label span{color:#333;}#mermaid-svg-0no33YHOPbWduL36 .cluster-label span p{background-color:transparent;}#mermaid-svg-0no33YHOPbWduL36 .label text,#mermaid-svg-0no33YHOPbWduL36 span{fill:#333;color:#333;}#mermaid-svg-0no33YHOPbWduL36 .node rect,#mermaid-svg-0no33YHOPbWduL36 .node circle,#mermaid-svg-0no33YHOPbWduL36 .node ellipse,#mermaid-svg-0no33YHOPbWduL36 .node polygon,#mermaid-svg-0no33YHOPbWduL36 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-0no33YHOPbWduL36 .rough-node .label text,#mermaid-svg-0no33YHOPbWduL36 .node .label text,#mermaid-svg-0no33YHOPbWduL36 .image-shape .label,#mermaid-svg-0no33YHOPbWduL36 .icon-shape .label{text-anchor:middle;}#mermaid-svg-0no33YHOPbWduL36 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-0no33YHOPbWduL36 .rough-node .label,#mermaid-svg-0no33YHOPbWduL36 .node .label,#mermaid-svg-0no33YHOPbWduL36 .image-shape .label,#mermaid-svg-0no33YHOPbWduL36 .icon-shape .label{text-align:center;}#mermaid-svg-0no33YHOPbWduL36 .node.clickable{cursor:pointer;}#mermaid-svg-0no33YHOPbWduL36 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-0no33YHOPbWduL36 .arrowheadPath{fill:#333333;}#mermaid-svg-0no33YHOPbWduL36 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-0no33YHOPbWduL36 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-0no33YHOPbWduL36 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-0no33YHOPbWduL36 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-0no33YHOPbWduL36 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-0no33YHOPbWduL36 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-0no33YHOPbWduL36 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-0no33YHOPbWduL36 .cluster text{fill:#333;}#mermaid-svg-0no33YHOPbWduL36 .cluster span{color:#333;}#mermaid-svg-0no33YHOPbWduL36 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-0no33YHOPbWduL36 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-0no33YHOPbWduL36 rect.text{fill:none;stroke-width:0;}#mermaid-svg-0no33YHOPbWduL36 .icon-shape,#mermaid-svg-0no33YHOPbWduL36 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-0no33YHOPbWduL36 .icon-shape p,#mermaid-svg-0no33YHOPbWduL36 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-0no33YHOPbWduL36 .icon-shape rect,#mermaid-svg-0no33YHOPbWduL36 .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-0no33YHOPbWduL36 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-0no33YHOPbWduL36 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-0no33YHOPbWduL36 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

Python+AI工具生态

开发环境

数据处理

机器学习

深度学习

部署

Jupyter

VS Code

PyCharm

Google Colab

NumPy

Pandas

Polars

Apache Arrow

Scikit-learn

XGBoost

LightGBM

CatBoost

PyTorch

Transformers

LangChain

Accelerate

FastAPI

Docker

MLflow

Gradio

🔗 重要资源链接

  • 官方文档:

    • Python官方文档
    • NumPy文档
    • Pandas文档
    • PyTorch文档
    • Transformers文档
  • 学习平台:

    • Kaggle – 数据科学竞赛
    • Papers with Code – 论文与代码
    • Hugging Face – 预训练模型
    • GitHub – 开源项目

常见问题解答

Q1: 没有编程基础,能学Python+AI吗?

答: 完全可以!Python是公认最适合初学者的语言。建议学习路径:

  • 花2-3周打好Python基础
  • 从简单的数据分析项目入手
  • 逐步过渡到机器学习
  • 边学边做,保持实践
  • Q2: 数学基础不好,能学AI吗?

    答: 可以,但需要补充必要的数学知识:

    #mermaid-svg-TfNZYeKtfxPoxTNx{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-TfNZYeKtfxPoxTNx .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-TfNZYeKtfxPoxTNx .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-TfNZYeKtfxPoxTNx .error-icon{fill:#552222;}#mermaid-svg-TfNZYeKtfxPoxTNx .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-TfNZYeKtfxPoxTNx .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-TfNZYeKtfxPoxTNx .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-TfNZYeKtfxPoxTNx .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-TfNZYeKtfxPoxTNx .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-TfNZYeKtfxPoxTNx .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-TfNZYeKtfxPoxTNx .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-TfNZYeKtfxPoxTNx .marker{fill:#333333;stroke:#333333;}#mermaid-svg-TfNZYeKtfxPoxTNx .marker.cross{stroke:#333333;}#mermaid-svg-TfNZYeKtfxPoxTNx svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-TfNZYeKtfxPoxTNx p{margin:0;}#mermaid-svg-TfNZYeKtfxPoxTNx .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-TfNZYeKtfxPoxTNx .cluster-label text{fill:#333;}#mermaid-svg-TfNZYeKtfxPoxTNx .cluster-label span{color:#333;}#mermaid-svg-TfNZYeKtfxPoxTNx .cluster-label span p{background-color:transparent;}#mermaid-svg-TfNZYeKtfxPoxTNx .label text,#mermaid-svg-TfNZYeKtfxPoxTNx span{fill:#333;color:#333;}#mermaid-svg-TfNZYeKtfxPoxTNx .node rect,#mermaid-svg-TfNZYeKtfxPoxTNx .node circle,#mermaid-svg-TfNZYeKtfxPoxTNx .node ellipse,#mermaid-svg-TfNZYeKtfxPoxTNx .node polygon,#mermaid-svg-TfNZYeKtfxPoxTNx .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-TfNZYeKtfxPoxTNx .rough-node .label text,#mermaid-svg-TfNZYeKtfxPoxTNx .node .label text,#mermaid-svg-TfNZYeKtfxPoxTNx .image-shape .label,#mermaid-svg-TfNZYeKtfxPoxTNx .icon-shape .label{text-anchor:middle;}#mermaid-svg-TfNZYeKtfxPoxTNx .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-TfNZYeKtfxPoxTNx .rough-node .label,#mermaid-svg-TfNZYeKtfxPoxTNx .node .label,#mermaid-svg-TfNZYeKtfxPoxTNx .image-shape .label,#mermaid-svg-TfNZYeKtfxPoxTNx .icon-shape .label{text-align:center;}#mermaid-svg-TfNZYeKtfxPoxTNx .node.clickable{cursor:pointer;}#mermaid-svg-TfNZYeKtfxPoxTNx .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-TfNZYeKtfxPoxTNx .arrowheadPath{fill:#333333;}#mermaid-svg-TfNZYeKtfxPoxTNx .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-TfNZYeKtfxPoxTNx .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-TfNZYeKtfxPoxTNx .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-TfNZYeKtfxPoxTNx .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-TfNZYeKtfxPoxTNx .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-TfNZYeKtfxPoxTNx .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-TfNZYeKtfxPoxTNx .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-TfNZYeKtfxPoxTNx .cluster text{fill:#333;}#mermaid-svg-TfNZYeKtfxPoxTNx .cluster span{color:#333;}#mermaid-svg-TfNZYeKtfxPoxTNx div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-TfNZYeKtfxPoxTNx .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-TfNZYeKtfxPoxTNx rect.text{fill:none;stroke-width:0;}#mermaid-svg-TfNZYeKtfxPoxTNx .icon-shape,#mermaid-svg-TfNZYeKtfxPoxTNx .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-TfNZYeKtfxPoxTNx .icon-shape p,#mermaid-svg-TfNZYeKtfxPoxTNx .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-TfNZYeKtfxPoxTNx .icon-shape rect,#mermaid-svg-TfNZYeKtfxPoxTNx .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-TfNZYeKtfxPoxTNx .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-TfNZYeKtfxPoxTNx .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-TfNZYeKtfxPoxTNx :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    AI所需数学

    微积分

    线性代数

    概率统计

    优化理论

    导数/梯度

    偏导数

    矩阵运算

    特征值/向量

    概率分布

    贝叶斯定理

    假设检验

    梯度下降

    凸优化

    建议:边做项目边补数学,遇到不懂的再学。

    Q3: 学习多久能找到工作?

    答: 因人而异,大致时间线:

    投入时间学习周期可达到水平
    1小时/天 12-18个月 初级AI工程师
    2-3小时/天 8-12个月 中级AI工程师
    全职学习 4-6个月 实战能力

    关键:项目经验 > 理论知识,一定要做项目!

    Q4: GPU不够用怎么办?

    答: 多种解决方案:

  • 云平台:

    • Google Colab(免费GPU)
    • Kaggle Notebooks(免费)
    • AutoDL(便宜)
  • 优化技巧:

    # 减小batch size
    batch_size = 16 # 而不是64

    # 使用混合精度训练
    from torch.cuda.amp import autocast, GradScaler
    scaler = GradScaler()

    # 梯度累积
    accumulation_steps = 4

  • 模型压缩:

    • 量化(Quantization)
    • 剪枝(Pruning)
    • 知识蒸馏(Distillation)
  • Q5: 如何保持技术更新?

    答: AI技术迭代快,建议:

  • 关注前沿:

    • arXiv.org(论文预印本)
    • Hugging Face(新模型)
    • Twitter/X(大佬动态)
  • 实践导向:

    • 每月做一个小项目
    • 参与Kaggle竞赛
    • 贡献开源项目
  • 社区交流:

    • 加入技术Discord/微信群
    • 参加线下meetup
    • 写技术博客

  • 学习时间线总览

    #mermaid-svg-FjsqNUrqgoV4QTqc{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-FjsqNUrqgoV4QTqc .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-FjsqNUrqgoV4QTqc .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-FjsqNUrqgoV4QTqc .error-icon{fill:#552222;}#mermaid-svg-FjsqNUrqgoV4QTqc .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-FjsqNUrqgoV4QTqc .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-FjsqNUrqgoV4QTqc .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-FjsqNUrqgoV4QTqc .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-FjsqNUrqgoV4QTqc .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-FjsqNUrqgoV4QTqc .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-FjsqNUrqgoV4QTqc .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-FjsqNUrqgoV4QTqc .marker{fill:#333333;stroke:#333333;}#mermaid-svg-FjsqNUrqgoV4QTqc .marker.cross{stroke:#333333;}#mermaid-svg-FjsqNUrqgoV4QTqc svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-FjsqNUrqgoV4QTqc p{margin:0;}#mermaid-svg-FjsqNUrqgoV4QTqc .mermaid-main-font{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}#mermaid-svg-FjsqNUrqgoV4QTqc .exclude-range{fill:#eeeeee;}#mermaid-svg-FjsqNUrqgoV4QTqc .section{stroke:none;opacity:0.2;}#mermaid-svg-FjsqNUrqgoV4QTqc .section0{fill:rgba(102, 102, 255, 0.49);}#mermaid-svg-FjsqNUrqgoV4QTqc .section2{fill:#fff400;}#mermaid-svg-FjsqNUrqgoV4QTqc .section1,#mermaid-svg-FjsqNUrqgoV4QTqc .section3{fill:white;opacity:0.2;}#mermaid-svg-FjsqNUrqgoV4QTqc .sectionTitle0{fill:#333;}#mermaid-svg-FjsqNUrqgoV4QTqc .sectionTitle1{fill:#333;}#mermaid-svg-FjsqNUrqgoV4QTqc .sectionTitle2{fill:#333;}#mermaid-svg-FjsqNUrqgoV4QTqc .sectionTitle3{fill:#333;}#mermaid-svg-FjsqNUrqgoV4QTqc .sectionTitle{text-anchor:start;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}#mermaid-svg-FjsqNUrqgoV4QTqc .grid .tick{stroke:lightgrey;opacity:0.8;shape-rendering:crispEdges;}#mermaid-svg-FjsqNUrqgoV4QTqc .grid .tick text{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;fill:#333;}#mermaid-svg-FjsqNUrqgoV4QTqc .grid path{stroke-width:0;}#mermaid-svg-FjsqNUrqgoV4QTqc .today{fill:none;stroke:red;stroke-width:2px;}#mermaid-svg-FjsqNUrqgoV4QTqc .task{stroke-width:2;}#mermaid-svg-FjsqNUrqgoV4QTqc .taskText{text-anchor:middle;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}#mermaid-svg-FjsqNUrqgoV4QTqc .taskTextOutsideRight{fill:black;text-anchor:start;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}#mermaid-svg-FjsqNUrqgoV4QTqc .taskTextOutsideLeft{fill:black;text-anchor:end;}#mermaid-svg-FjsqNUrqgoV4QTqc .task.clickable{cursor:pointer;}#mermaid-svg-FjsqNUrqgoV4QTqc .taskText.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#mermaid-svg-FjsqNUrqgoV4QTqc .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#mermaid-svg-FjsqNUrqgoV4QTqc .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#mermaid-svg-FjsqNUrqgoV4QTqc .taskText0,#mermaid-svg-FjsqNUrqgoV4QTqc .taskText1,#mermaid-svg-FjsqNUrqgoV4QTqc .taskText2,#mermaid-svg-FjsqNUrqgoV4QTqc .taskText3{fill:white;}#mermaid-svg-FjsqNUrqgoV4QTqc .task0,#mermaid-svg-FjsqNUrqgoV4QTqc .task1,#mermaid-svg-FjsqNUrqgoV4QTqc .task2,#mermaid-svg-FjsqNUrqgoV4QTqc .task3{fill:#8a90dd;stroke:#534fbc;}#mermaid-svg-FjsqNUrqgoV4QTqc .taskTextOutside0,#mermaid-svg-FjsqNUrqgoV4QTqc .taskTextOutside2{fill:black;}#mermaid-svg-FjsqNUrqgoV4QTqc .taskTextOutside1,#mermaid-svg-FjsqNUrqgoV4QTqc .taskTextOutside3{fill:black;}#mermaid-svg-FjsqNUrqgoV4QTqc .active0,#mermaid-svg-FjsqNUrqgoV4QTqc .active1,#mermaid-svg-FjsqNUrqgoV4QTqc .active2,#mermaid-svg-FjsqNUrqgoV4QTqc .active3{fill:#bfc7ff;stroke:#534fbc;}#mermaid-svg-FjsqNUrqgoV4QTqc .activeText0,#mermaid-svg-FjsqNUrqgoV4QTqc .activeText1,#mermaid-svg-FjsqNUrqgoV4QTqc .activeText2,#mermaid-svg-FjsqNUrqgoV4QTqc .activeText3{fill:black!important;}#mermaid-svg-FjsqNUrqgoV4QTqc .done0,#mermaid-svg-FjsqNUrqgoV4QTqc .done1,#mermaid-svg-FjsqNUrqgoV4QTqc .done2,#mermaid-svg-FjsqNUrqgoV4QTqc .done3{stroke:grey;fill:lightgrey;stroke-width:2;}#mermaid-svg-FjsqNUrqgoV4QTqc .doneText0,#mermaid-svg-FjsqNUrqgoV4QTqc .doneText1,#mermaid-svg-FjsqNUrqgoV4QTqc .doneText2,#mermaid-svg-FjsqNUrqgoV4QTqc .doneText3{fill:black!important;}#mermaid-svg-FjsqNUrqgoV4QTqc .crit0,#mermaid-svg-FjsqNUrqgoV4QTqc .crit1,#mermaid-svg-FjsqNUrqgoV4QTqc .crit2,#mermaid-svg-FjsqNUrqgoV4QTqc .crit3{stroke:#ff8888;fill:red;stroke-width:2;}#mermaid-svg-FjsqNUrqgoV4QTqc .activeCrit0,#mermaid-svg-FjsqNUrqgoV4QTqc .activeCrit1,#mermaid-svg-FjsqNUrqgoV4QTqc .activeCrit2,#mermaid-svg-FjsqNUrqgoV4QTqc .activeCrit3{stroke:#ff8888;fill:#bfc7ff;stroke-width:2;}#mermaid-svg-FjsqNUrqgoV4QTqc .doneCrit0,#mermaid-svg-FjsqNUrqgoV4QTqc .doneCrit1,#mermaid-svg-FjsqNUrqgoV4QTqc .doneCrit2,#mermaid-svg-FjsqNUrqgoV4QTqc .doneCrit3{stroke:#ff8888;fill:lightgrey;stroke-width:2;cursor:pointer;shape-rendering:crispEdges;}#mermaid-svg-FjsqNUrqgoV4QTqc .milestone{transform:rotate(45deg) scale(0.8,0.8);}#mermaid-svg-FjsqNUrqgoV4QTqc .milestoneText{font-style:italic;}#mermaid-svg-FjsqNUrqgoV4QTqc .doneCritText0,#mermaid-svg-FjsqNUrqgoV4QTqc .doneCritText1,#mermaid-svg-FjsqNUrqgoV4QTqc .doneCritText2,#mermaid-svg-FjsqNUrqgoV4QTqc .doneCritText3{fill:black!important;}#mermaid-svg-FjsqNUrqgoV4QTqc .vert{stroke:navy;}#mermaid-svg-FjsqNUrqgoV4QTqc .vertText{font-size:15px;text-anchor:middle;fill:navy!important;}#mermaid-svg-FjsqNUrqgoV4QTqc .activeCritText0,#mermaid-svg-FjsqNUrqgoV4QTqc .activeCritText1,#mermaid-svg-FjsqNUrqgoV4QTqc .activeCritText2,#mermaid-svg-FjsqNUrqgoV4QTqc .activeCritText3{fill:black!important;}#mermaid-svg-FjsqNUrqgoV4QTqc .titleText{text-anchor:middle;font-size:18px;fill:#333;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}#mermaid-svg-FjsqNUrqgoV4QTqc :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    2025-01-01

    2025-02-01

    2025-03-01

    2025-04-01

    2025-05-01

    2025-06-01

    2025-07-01

    2025-08-01

    2025-09-01

    2025-10-01

    2025-11-01

    Python语法

    数据结构

    OOP编程

    NumPy/Pandas

    数据可视化

    实战项目1

    ML基础理论

    Scikit-learn

    实战项目2

    PyTorch基础

    CNN/RNN/Transformer

    实战项目3

    NLP基础

    Transformers

    RAG与Agent

    实战项目4

    基础阶段

    数据科学

    机器学习

    深度学习

    NLP与LLM

    Python+AI学习时间线(全职学习)


    总结

    核心要点

  • 循序渐进:不要急于求成,按阶段学习
  • 项目驱动:理论结合实践,多做项目
  • 持续学习:AI技术更新快,保持学习热情
  • 社区参与:加入社区,与他人交流学习
  • 定期复盘:总结经验,形成自己的知识体系
  • 学习建议

    • ✅ 每天至少写代码30分钟
    • ✅ 每周学习一个新概念
    • ✅ 每月完成一个小项目
    • ✅ 每季度进行一次技术复盘
    • ✅ 保持好奇心和探索精神

    最后的话

    “学习Python+AI是一场马拉松,不是短跑。重要的是保持持续学习和实践,不要害怕犯错。每一个错误都是学习的机会。”

    祝你学习顺利,早日成为AI工程师! 🚀


    附录

    A. Python环境搭建

    # 1. 安装Anaconda(推荐)
    # 下载:https://www.anaconda.com/

    # 2. 创建虚拟环境
    conda create -n ai_env python=3.10

    # 3. 激活环境
    conda activate ai_env

    # 4. 安装核心库
    pip install numpy pandas matplotlib seaborn
    pip install scikit-learn xgboost lightgbm
    pip install torch torchvision torchaudio
    pip install transformers langchain
    pip install jupyter lab

    # 5. 启动Jupyter
    jupyter lab

    B. 常用命令速查

    # Jupyter相关
    jupyter notebook # 启动notebook
    jupyter lab # 启动lab
    jupyter nbconvert # 转换notebook格式

    # Git相关
    git clone <url> # 克隆仓库
    git add . # 添加更改
    git commit -m "msg" # 提交
    git push # 推送

    # Conda相关
    conda env list # 列出环境
    conda install <pkg> # 安装包
    conda env remove -n <env> # 删除环境

    C. 学习检查清单

    阶段0检查清单
    • 掌握Python基本语法
    • 理解数据类型和结构
    • 会写函数和类
    • 熟悉常用模块
    阶段1检查清单
    • 能用NumPy进行数组运算
    • 熟练使用Pandas处理数据
    • 能用Matplotlib绘制图表
    • 完成至少3个数据分析项目
    阶段2检查清单
    • 理解常见ML算法原理
    • 能使用Scikit-learn建模
    • 会做特征工程
    • 完成至少2个ML项目
    阶段3检查清单
    • 掌握PyTorch基础
    • 能搭建神经网络
    • 理解CNN/RNN/Transformer
    • 完成至少2个DL项目
    阶段4检查清单
    • 熟练使用Transformers
    • 能调用预训练模型
    • 理解RAG原理
    • 完成至少1个NLP项目

    ✍️ 坚持用 清晰易懂的图解 + 可落地的代码,让每个知识点都 简单直观!

    💡 座右铭:“道路是曲折的,前途是光明的!”

    在这里插入图片描述

    赞(0)
    未经允许不得转载:171主机测评 » 2026年Python+AI学习路线完整指南:从零基础到实战专家
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址