引言
开始机器学习的第一道坎,不是算法,而是「环境装不上」。Python 包之间版本冲突、GPU 驱动缺失、Notebook 启动即崩……这些环境问题劝退了大量入门者。实际上,只要掌握「虚拟环境 + 包管理 + Notebook」这三板斧,环境搭建可以在十分钟内稳定复现。
本文是机器学习实战的第零课:从 Python 环境选择讲起,安装并验证 NumPy、pandas、Matplotlib、Scikit-learn 四大核心库,跑通一个「加载数据 → 处理 → 可视化 → 训练模型」的最小闭环,让你从「能跑」到「理解自己在跑什么」。
前置知识:Python 基础语法(变量、函数、类)。若完全没接触过,建议先跑一遍 Python 官方教程的前半部分。关于机器学习的知识结构全景,可先阅读 https://plumephp.com/machine-learning-knowledge-structure/。
目录
- 1. 环境选型:直接安装 vs 发行版 vs 容器
- 2. Python 与虚拟环境:隔离是美德
- 3. 核心库安装与版本验证
- 4. Jupyter Notebook 与 Lab:交互式开发的入口
- 5. NumPy:数组计算的基石
- 6. pandas:表格数据处理的第一步
- 7. Matplotlib 与可视化基础
- 8. 最小闭环:从数据到模型的完整脚本
- 9. 环境排错速查与最佳实践
- 延伸阅读
1. 环境选型:直接安装 vs 发行版 vs 容器
1.1 三种方案对比
| 方案 | 优点 | 缺点 | 适合谁 |
|---|---|---|---|
| 系统 Python + pip | 轻量、可控 | 包冲突风险 | 有经验者 |
| Conda / Miniconda | 环境隔离强、二进制包预编译 | 体积大、命令多 | 数据分析主流 |
| Docker 镜像 | 完全可复现 | 学习曲线陡 | 团队协作/部署 |
1.2 我的建议
个人学习起步用 Miniconda 或系统 Python + venv。两者都能满足需求,关键在于「一个项目一个环境」。
2. Python 与虚拟环境:隔离是美德
2.1 为什么需要虚拟环境
不同项目对库版本要求不同:项目 A 要 scikit-learn 1.3,项目 B 要 1.6。装进同一个全局环境会互相覆盖,最终「这个项目跑不了那个项目也崩」。虚拟环境让每个项目有自己的包目录。
2.2 venv 创建与激活
# 创建虚拟环境(Python 3.10+ 内置 venv)
python3 -m venv ml_env
# 激活(macOS / Linux)
source ml_env/bin/activate
# 激活(Windows PowerShell)
# ml_env\Scripts\activate
# 此时提示符前会出现 (ml_env),包只装在这个环境里
2.3 退出与删除
deactivate # 退出当前虚拟环境
rm -rf ml_env # 删除整个环境(重来成本极低)
2.4 pip 升级与源
pip install --upgrade pip
# 国内可配置镜像加速(示例:清华源)
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
3. 核心库安装与版本验证
3.1 一键安装四大件
pip install numpy pandas matplotlib scikit-learn jupyter
3.2 安装后必须验证
import numpy as np
import pandas as pd
import matplotlib
import sklearn
print("NumPy 版本:", np.__version__)
print("pandas 版本:", pd.__version__)
print("Matplotlib 版本:", matplotlib.__version__)
print("scikit-learn 版本:", sklearn.__version__)
3.3 版本冲突时的思路
pip check # 检查依赖冲突
pip list --outdated # 查看可更新包
pip freeze > requirements.txt # 导出当前环境快照
4. Jupyter Notebook 与 Lab:交互式开发的入口
4.1 启动
jupyter notebook # 经典版
jupyter lab # 新一代界面(推荐)
启动后浏览器打开 http://localhost:8888,即可创建 .ipynb Notebook。
4.2 Notebook 的核心操作
| 操作 | 快捷键 | 说明 |
|---|---|---|
| 运行单元格 | Shift+Enter | 执行并进入下一格 |
| 新增单元格 | Esc 后 b | 在下方插入 |
| 切换为 Markdown | Esc 后 m | 写说明文字 |
| 切换为代码 | Esc 后 y | 写代码 |
| 清空输出 | Esc 后 O O | 重新运行 |
4.3 一个最小 Notebook
单元格1(Markdown): # 房价预测实验
单元格2(代码): import pandas as pd
单元格3(代码): df = pd.DataFrame({'area':[50,80,120],'price':[200,320,480]})
单元格4(代码): df.plot()
Notebook 的价值在于「边写边看结果」,适合探索性分析与教学演示。
5. NumPy:数组计算的基石
5.1 为什么需要 NumPy
Python 列表能做数学运算,但慢、且 + 是拼接不是逐元素相加。NumPy 提供多维数组 ndarray,用 C 底层加速逐元素运算。
5.2 创建与基本运算
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(a + b) # [5 7 9] 逐元素相加
print(a * 2) # [2 4 6] 广播
print(a.dot(b)) # 32 点积
# 多维数组
m = np.zeros((2, 3)) # 2行3列全0
print(m.shape) # (2, 3)
5.3 布尔索引与切片
data = np.array([1, 5, 3, 9, 7])
mask = data > 4
print(data[mask]) # [5 9 7] 过滤出大于4的元素
print(data[1:4]) # [5 3 9] 切片
5.4 随机数(数据科学常用)
np.random.seed(42) # 固定随机种子,保证结果可复现
x = np.random.randn(1000) # 标准正态分布 1000 个点
print(x.mean(), x.std()) # 约 0 和 1
NumPy 是 pandas 与 Scikit-learn 的地基,多花半小时把「广播」「布尔索引」玩熟,后续效率翻倍。
6. pandas:表格数据处理的第一步
6.1 DataFrame:像 Excel 一样的 Python 对象
import pandas as pd
df = pd.DataFrame({
'姓名': ['张三', '李四', '王五'],
'年龄': [25, 32, 28],
'城市': ['北京', '上海', '深圳'],
})
print(df)
6.2 读取真实数据
df = pd.read_csv('housing.csv') # 最常用:读 CSV
df = pd.read_excel('data.xlsx') # 读 Excel(需 openpyxl)
print(df.head()) # 看前 5 行
print(df.info()) # 列类型与缺失值概览
print(df.describe()) # 数值列的统计摘要
6.3 选择与过滤
df['area'] # 选一列
df[['area', 'price']] # 选多列
df[df['area'] > 100] # 按条件过滤行
df.iloc[0:5] # 按位置取前5行
df.loc[df['city'] == '北京'] # 按标签/条件取行
6.4 处理缺失值
df.isnull().sum() # 每列缺失数量
df = df.dropna() # 删掉含缺失的行
df['age'] = df['age'].fillna(df['age'].mean()) # 用均值填充
6.5 groupby 分组聚合
# 按城市分组,计算平均年龄
city_mean = df.groupby('城市')['年龄'].mean()
print(city_mean)
7. Matplotlib 与可视化基础
7.1 散点图:两个数值变量的关系
import matplotlib.pyplot as plt
plt.scatter(df['area'], df['price'])
plt.xlabel('面积 (m²)')
plt.ylabel('价格 (万元)')
plt.title('面积与房价散点图')
plt.show() # Jupyter 里可直接显示
7.2 直方图:看分布
plt.hist(df['age'], bins=20, edgecolor='black')
plt.title('年龄分布')
plt.show()
7.3 多图并排
fig, axes = plt.subplots(1, 2, figsize=(10, 4))
axes[0].scatter(df['area'], df['price'])
axes[0].set_title('面积 vs 价格')
axes[1].hist(df['age'], bins=15, edgecolor='black')
axes[1].set_title('年龄分布')
plt.tight_layout()
plt.show()
可视化是「理解数据」最廉价的方式。任何数据集,先画三张图:散点看关系、直方看分布、箱线看离群。
8. 最小闭环:从数据到模型的完整脚本
把前面所有组件串成一个 20 行的小项目:造数据、切分、训练线性回归、评估。
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
# 1. 造数据:面积 → 房价(带噪声)
np.random.seed(42)
n = 200
area = np.random.uniform(30, 200, n)
price = 2 * area + 50 + np.random.normal(0, 20, n)
df = pd.DataFrame({'area': area, 'price': price})
# 2. 切分训练集/测试集
X = df[['area']]
y = df['price']
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42)
# 3. 训练模型
model = LinearRegression()
model.fit(X_train, y_train)
# 4. 预测与评估
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print("均方误差 MSE:", round(mse, 2))
print("系数(每㎡价值):", round(model.coef_[0], 2))
print("截距:", round(model.intercept_, 2))
输出示例:
均方误差 MSE: 393.51
系数(每㎡价值): 2.02
截距: 48.76
这 20 行就是机器学习工作流的缩影:准备数据 → 切分 → 训练 → 评估。后面所有专题文章都在放大这套流程的某一步。
9. 环境排错速查与最佳实践
9.1 常见错误速查
| 报错 | 原因 | 解法 |
|---|---|---|
ModuleNotFoundError: No module named 'numpy' | 库没装或装错环境 | pip install numpy,确认当前虚拟环境 |
import 报版本冲突 | 依赖不兼容 | pip check,必要时重建环境 |
| Notebook 打不开 | 端口占用 | jupyter notebook --port 8899 |
df.plot() 无输出 | Matplotlib 后端问题 | 加 %matplotlib inline |
| GPU 相关报错 | CUDA 未配置 | 先 CPU-only 版本起步 |
9.2 环境管理的黄金法则
# 法则1:每个项目一个虚拟环境
python3 -m venv .venv && source .venv/bin/activate
# 法则2:项目根目录放 requirements.txt
pip freeze > requirements.txt
# 法则3:换机器/同事协作时一键重建
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
9.3 学习建议
- 先跑通最小闭环,再啃算法:环境第零课,闭环第一课。
- 固定随机种子:所有实验
np.random.seed(42),结果可复现。 - 环境问题先问自己:当前在哪个环境?
which python/pip list。
延伸阅读
- https://plumephp.com/machine-learning-knowledge-structure/ — 机器学习知识结构全景图谱(本专题入口)
- https://plumephp.com/ml-supervised-regression/ — 线性回归与监督学习实战
- Python 官方教程 与 pandas 官方入门
- 进阶参考:[[ai-ml]] 专题的模型评估与 MLOps 文章
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。