总览题型分布与策略
| 组别 | 题数 | 类型 | 核心技术 | 策略 |
|---|---|---|---|---|
| 1.1.x | 5 | 编程 | pandas 数据清洗 | 背模板 80% 是固定句式 |
| 2.1.x | 5 | 编程 | 数据预处理标准流程 | |
| 2.2.x | 5 | 编程 | 训练 ML 模型 + 评估 | |
| 3.2.x | 5 | 编程 | ONNX 模型推理 | 六步万能 |
| 1.2.x | 5 | 简答 | 业务模块痛点+优化 | 背万能答案 列点+套句 |
| 3.1.x | 5 | 简答 | 硬件数据分析报告 | |
| 4.1.x | 5 | 简答 | 培训学习大纲 | |
| 4.2.x | 5 | 简答 | 数据采集处理方案 |
pandas1. 数据清洗速查
类比
pandas 就是代码版的 Excel:
DataFrame 是整张表,
Series 是一列。每个操作要么"改这张表",要么"从中查/统计"。
1.1 读数据 / 看数据
import pandas as pd
import numpy as np
data = pd.read_csv('patient_data.csv') # 普通 csv
data = pd.read_csv('医疗.csv', encoding='gbk') # ★ 中文 csv 必加 encoding=gbk(2.1.4)
data = pd.read_excel('数据集.xlsx') # excel(2.1.2 / 2.2.4)
print(data.head()) # 看前 5 行
print(data.info()) # 每列类型 + 非空数
print(data.isnull().sum()) # ★ 每列缺失值统计
举例
data.head() = 像在 Excel 里"按 Ctrl+Home 看前几行"。data.isnull().sum() = "每一列里有几个空格子",输出像:
Age 0
Income 3
LoanAmount 12
1.2 清洗三件套:缺失值 · 重复 · 异常
data = data.dropna() # 删除含空值的行(简单粗暴)
data = data.dropna(subset=['Age']) # 只看 Age 列的空就删
data = data.drop_duplicates() # 删除完全重复的行
# 类型转换
data['Age'] = data['Age'].astype(int)
data['Speed'] = data['Speed'].astype(float)
data['horsepower'] = pd.to_numeric(data['horsepower'], errors='coerce')
# ★ to_numeric + errors='coerce' = 转不了的塞 NaN,再 dropna 最稳
# 异常值过滤(布尔筛选)
data = data[
(data['Age'].between(18, 70)) &
(data['Speed'].between(0, 200))
]
类比
data[条件] 像 Excel 的"筛选":括号里写"哪些行要留下"。
& 是"并且", | 是"或者"。
易错
中文 csv 必须写
encoding='gbk' 否则乱码报错;
布尔筛选每个条件必须用圆括号包起来,否则优先级出错。
1.3 标准化 vs 归一化(高频考点)
| 方法 | 公式 | 结果范围 | 类比 | 用在 |
|---|---|---|---|---|
| StandardScaler 标准化 | (x − 均值) / 标准差 | 均值 0,方差 1 | "排名分数化",离平均多远算多少分 | 2.1.1 / 2.1.2 / 2.2.2 |
| MinMaxScaler 归一化 | (x − min) / (max − min) | 0 ~ 1 | "百分比化",最低 0 分、最高 1 分 | 2.1.3 / 2.1.4 |
| LabelEncoder 标签编码 | "高/中/低" → 2/1/0 | 整数 | 给类别贴号 | 2.1.5 |
from sklearn.preprocessing import StandardScaler, MinMaxScaler
scaler = StandardScaler()
data[['A', 'B']] = scaler.fit_transform(data[['A', 'B']])
为什么
"年龄(18~70)"和"收入(2000~200000)"放一起,模型会被大数压住。
标准化让它们站在同一起跑线。
1.4 区间分桶 pd.cut(1.1.1 / 1.1.4 必考)
bins = [0, 18.5, 24, 28, np.inf]
labels = ['偏瘦', '正常', '超重', '肥胖']
data['BMIRange'] = pd.cut(data['BMI'], bins=bins, labels=labels, right=False)
举例
BMI=22.5 → 落在
[18.5, 24) 区间 → 贴上 "正常"标签。right=False = 左闭右开 [a, b)。np.inf = "以上,无上限"。
1.5 分组统计 groupby(高频)
data['Gender'].value_counts() # 每个性别多少人
data.groupby('Gender')['Amount'].mean() # 按性别求金额均值
data.groupby('AgeGroup').agg({'Speed':'mean', 'Dist':'sum'}) # 多列多聚合
类比
groupby 就是 Excel "数据透视表":
①先 groupby('某列') 选行标签 → ②再 ['另一列'] 选要算的值 → ③再 .mean()/.sum()/.count()。
举例
data.groupby('Gender')['Amount'].mean() 输出:
Gender
F 580.3
M 712.5
1.6 新列 & 条件赋值
# np.where(条件, A, B) 相当于 Excel 的 IF(...)
data['RiskLevel'] = np.where(data['DaysInHospital'] > 7, '高风险', '低风险')
# 字符串 → 日期(才能做日期减法)
data['就诊日期'] = pd.to_datetime(data['就诊日期'])
data['诊断延迟'] = (data['诊断日期'] - data['就诊日期']).dt.days
1.7 保存
data.to_csv('cleaned_data.csv', index=False) # ★ index=False 不要多余索引列
ML2. 机器学习训练五步
类比
训练模型 = 考前刷题。
X 是题目,y 是答案,
fit() 是学,predict() 是考。
2.1 万能五步公式
from sklearn.model_selection import train_test_split
X = data.drop(columns=['目标列'])
y = data['目标列']
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
model = 某模型(...)
model.fit(X_train, y_train) # 训练
y_pred = model.predict(X_test) # 预测
小贴士
random_state=42 = 固定洗牌种子,每次跑出来一样,方便对答案。test_size=0.2 = 测试集占 20%(几乎所有题都这样)。
2.2 五种模型 一句话区分
| 模型 | 用途 | 一句话理解 | 出题在 |
|---|---|---|---|
LinearRegression | 数值预测 | 画一条直线最贴合数据点 | 2.2.2 / 2.2.4 |
LogisticRegression | 二分类 | 直线 + 概率压到 0~1 | 2.2.1 |
DecisionTreeRegressor | 数值/分类 | "二十问":身高>170?是→… 否→… | 2.2.5 |
RandomForestRegressor | 数值/分类 | 一群决策树投票,更稳 | 2.2.2 / 2.2.3 |
XGBRegressor | 数值/分类 | 一棵树补一棵树的错,越来越准 | 2.2.4 |
2.3 流水线 Pipeline(2.2.2)
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
pipeline = Pipeline([
('scaler', StandardScaler()),
('linreg', LinearRegression())
])
pipeline.fit(X_train, y_train)
类比
把"标准化"和"训练"装进一根管道,数据从一头进、模型从另一头出,
避免忘了对测试集做同样的标准化。
2.4 评估指标
from sklearn.metrics import classification_report # 分类
from sklearn.metrics import mean_squared_error, r2_score # 回归
print(classification_report(y_test, y_pred)) # 精确率/召回率/F1
print(mean_squared_error(y_test, y_pred)) # MSE 越小越好
print(r2_score(y_test, y_pred)) # R² 越接近 1 越好
坑
R² 为负 = 模型比"瞎猜均值"还差(2.2.5 答案就是这种反例)。
此时该重做特征工程或换模型。
2.5 不平衡 SMOTE / 类别哑变量
# 类别多寡极不平衡时(比如 1000 个正样本只有 20 个负样本)
from imblearn.over_sampling import SMOTE
smote = SMOTE(random_state=42)
X_res, y_res = smote.fit_resample(X_train, y_train)
# 类别变量(性别/学历...)转为数字
X = pd.get_dummies(X) # "红/绿/蓝" → 3 列 0/1
X = pd.get_dummies(X, drop_first=True) # 防多重共线性
举例
get_dummies 把一列 Color 变成 Color_红 / Color_绿 / Color_蓝 三列,
红色那行就 [1, 0, 0],模型才能算。
2.6 保存 / 加载模型
import pickle, joblib
pickle.dump(model, open('m.pkl', 'wb')) # 经典写法
joblib.dump(model, 'm.pkl') # 大模型更快
ONNX3. 模型推理(3.2.x 一套到底)
类比
ONNX = "预制菜":别人训练好的模型,
你只负责 加热(加载)→ 装盘(预处理)→ 上桌(推理)。
3.1 万能六步(几乎一字不改)
import onnxruntime as ort
import numpy as np
from PIL import Image
# ① 加载模型
session = ort.InferenceSession('xxx.onnx')
# ② 读图(灰度 'L' / 彩色 'RGB')
img = Image.open('img_test.png').convert('L')
# ③ 预处理:resize → numpy → 加维度
img = img.resize((28, 28))
arr = np.array(img, dtype=np.float32)
arr = np.expand_dims(arr, axis=0) # 加 batch 维 → (1, H, W)
arr = np.expand_dims(arr, axis=0) # 加 channel 维 → (1, 1, H, W)
# ④ 拿到输入/输出名
input_name = session.get_inputs()[0].name
output_name = session.get_outputs()[0].name
# ⑤ 推理
out = session.run([output_name], {input_name: arr})[0]
# 或 out = session.run(None, {input_name: arr}) # None = 全部输出
# ⑥ 解码结果
pred_class = np.argmax(out[0])
3.2 维度 NCHW 图解
| 题目 | 模型 | convert | 形状 |
|---|---|---|---|
| 3.2.1 ResNet 图像分类 | resnet.onnx | 'RGB' | (1, 3, 224, 224) |
| 3.2.2 MNIST 手写数字 | mnist.onnx | 'L' | (1, 1, 28, 28) |
| 3.2.3 情感识别 | emotion-ferplus.onnx | 'L' | (1, 1, 64, 64) |
| 3.2.4 花朵识别 | flower-detection.onnx | 'RGB' | (1, 3, 224, 224) |
| 3.2.5 人脸检测 | version-RFB-320.onnx | 多框 + NMS | (1, 3, 240, 320) |
3.3 softmax → 取 top-K → 翻译标签
import scipy.special
probs = scipy.special.softmax(out, axis=-1) # 原始分 → 概率(加起来=1)
top5_idx = np.argsort(probs[0])[-5:][::-1] # 排序取末尾 5 个,倒序
# 把数字索引翻成"猫/狗"
labels = [line.strip() for line in open('labels.txt')]
print(labels[top5_idx[0]])
举例
模型输出
[2.1, 0.3, 5.6, -1.2] → softmax 后 [0.05, 0.01, 0.93, 0.01]
→ argmax = 2(第三类),翻译就是 labels[2]。
三大必出错
- 忘了
astype(np.float32)→ onnxruntime 报类型错 - 维度顺序错:RGB 是 (C, H, W),需
np.transpose(arr, (2, 0, 1)) - 灰度 / 彩色搞反:MNIST 必须
convert('L'),ResNet 必须convert('RGB')
简答4. 万能答案模板
通用心法
简答题分数大头在"列点 + 解释",每点 2 分。
只要 ①列够数量 ②每点带 2~3 句解释 ③包含关键词 ④结尾给数字预期效果,基本满分。
只要 ①列够数量 ②每点带 2~3 句解释 ③包含关键词 ④结尾给数字预期效果,基本满分。
4.1 业务模块痛点(1.2.x):四大万能病根
不管什么系统(智能音箱/医疗/金融/数智人),都从下面四个里挑 2~3 个写:
| 万能问题 | 关键词 | 影响体验 |
|---|---|---|
| ① 准确性不高 | 识别不准 / 误诊 / 误判 / 偏差 | 信任崩塌、决策失误 |
| ② 响应速度慢 | 等待时间长 / 延迟 / 效率低 | 错过最佳时机 / 用户流失 |
| ③ 缺乏个性化 | 千篇一律 / 不记忆偏好 | 降低粘性 / 不被重视感 |
| ④ 界面不友好 | 步骤多 / 操作复杂 / 难找功能 | 放弃使用 / 浪费时间 |
套用模板
问题:[系统名] 在 [功能模块] 方面存在 [准确性/响应/个性化/界面] 不足。
用户为什么不满:[影响决策 / 浪费时间 / 误导消费 / 操作困难]。
影响体验:[降低信任 / 流失用户 / 错失时机 / 体验差]。
用户为什么不满:[影响决策 / 浪费时间 / 误导消费 / 操作困难]。
影响体验:[降低信任 / 流失用户 / 错失时机 / 体验差]。
4.2 优化方案(1.2.x 后半 / 3.1.x):四大角度
| 角度 | 具体动作 | 常用关键词 |
|---|---|---|
| ① 算法/模型优化 | 收集标注更多数据 / 引入深度学习/NLP / 持续迭代 | 数据增强、模型微调、训练优化 |
| ② 硬件/网络升级 | GPU 集群 / 边缘计算 / 并发架构 / 预加载缓存 | 提升算力、降低延迟、并行处理 |
| ③ 个性化服务 | 用户画像 / 历史行为分析 / 推荐算法 / 自定义场景 | 千人千面、定制化、推荐系统 |
| ④ UI / 交互优化 | 简化流程 / 突出关键信息 / 可视化反馈 / 一键操作 | 易用性、人性化、扁平化 |
必加结尾(预期效果)
- 识别准确率提升至 95% 以上
- 响应时间缩短至 2 秒以内 / 异常预警秒级
- 用户满意度 / 忠诚度提升 10~20%
- 操作步骤减少 40% 以上
4.3 数据采集与处理方案(4.2.x):六段式
四道题(零售/医疗影像/安防/自动驾驶/文化遗产)结构高度一致:
| 序号 | 段落 | 必写内容 |
|---|---|---|
| 1 | 数据源 / 采集方法 | POS、API 接口、传感器/IoT、摄像头、问卷、社交媒体 |
| 2 | 数据预处理 | 清洗(去重、补缺、纠错)、标准化(归一化、编码)、整合 |
| 3 | 数据安全与合规 | 加密传输、访问控制、脱敏处理、GDPR / HIPAA |
| 4 | 数据存储与管理 | 云存储(AWS/Azure)、备份恢复、数据库选型 |
| 5 | 模型训练与应用 | 深度学习、交叉验证、可视化仪表板、报告 |
| 6 | 持续优化与升级 | 反馈循环、数据集更新、跟踪 AI 前沿技术 |
4.4 培训学习大纲(4.1.x):每节"目标 + 内容"模板
通用模板
学习目标:了解/掌握 [XX] 的概念、类型 / 方法、实践操作技巧。
内容:概念介绍 → 工具简介 → 实践操作 → 项目案例。
内容:概念介绍 → 工具简介 → 实践操作 → 项目案例。
动词四件套(按深浅排序):了解掌握熟悉综合运用
4.5 硬件分析报告(3.1.x):四段式
| 段落 | 内容 |
|---|---|
| ① 用户使用习惯 | 最常 / 最少使用的功能、使用频率排名 |
| ② 响应时间分析 | 响应较长 / 适中 / 较短的功能,延迟瓶颈 |
| ③ 优化方向 | 组合写 3~4 条:网络/硬件、个性化、可靠性、识别精度 |
| ④ 解决方案 | 对应给具体技术:边缘计算 / ML 推荐 / 预加载 / 自我诊断 |
避坑5. 易踩坑清单(考前 5 分钟扫一遍)
pd.cut漏写right=False→ 边界值被分错桶- 中文 csv 漏写
encoding='gbk'→ 直接乱码报错(2.1.4) - ONNX 输入忘
astype(np.float32)→ 类型错误 - RGB 维度错:必须
np.transpose(arr, (2, 0, 1))把 HWC 变 CHW random_state=42漏写 → 结果对不上答案X = data.drop(['y'], axis=1)必须先把目标列移出 X,否则作弊- 布尔筛选每个条件用圆括号包,
&而不是and - 简答题:列点数量不够,记得每段配 2~3 句解释 + 数字效果
- 文件命名严格按要求:
1.1.2-1.JPG、3.2.4-1.jpg(大小写、连字符) - 保存 csv 加
index=False,否则多一列索引
考前最后一句
编程题:把"读 csv → 清洗 → 标准化 → split → fit/predict → 保存"流程背到能默写。
ONNX:记住六步 + (N, C, H, W) 维度 +
简答题:痛点 4 病根 + 优化 4 角度 + 数字效果。
祝考试顺利! 🎯
ONNX:记住六步 + (N, C, H, W) 维度 +
astype(float32)。简答题:痛点 4 病根 + 优化 4 角度 + 数字效果。
祝考试顺利! 🎯