- 回顾: 第 5 课和从零开始的 OneR
- 如何手动构建一个 TwoR 模型 (走向决策树)?
- 如何创建一个有 4 个叶子的决策树并绘制图?如何解释这个图?为什么在进行探索性分析时,决策树受到喜爱?
- `gini` 在衡量分割优劣方面是什么?它的源代码是什么?如何从多次抓取相同物品的概率来理解 `gini`?
- 为什么决策树的 `mean_absolute_error` 实际上比 OneR 版本更差?
- 如何构建一个有 50 个叶子的决策树?它的效果如何?
- 如何进行预测并准备一个 csv 文件上传到 Kaggle 排行榜?我们应该从这样的基础模型开始,每天改进模型
- 决策树如何让你摆脱虚拟变量、对票价取对数、考虑异常值和长尾分布?Jeremy 总是使用决策树创建基线模型,这很难搞砸。决策树如何将像 `embarked` 这样的类别转换为字符串,然后转换为数字进行排序?Jeremy 通常使用多少层级的决策树?
- 如何为 bagging 构建许多无偏且不相关的模型 (或决策树)?这种构建所有这些模型的方法称为随机森林
- 如何创建一个包含 100 棵决策树的随机森林?如何使它们成为随机树?如何平均所有树的预测并提交到 Kaggle?
- 特征重要性 (Jeremy 的最爱) 有什么作用?它关心分布或数值 vs 类别吗?Jeremy 如何使用它?还有一个 Jeremy 和特征重要性用于信用违约问题的精彩故事
- 增加树的数量总是会提高准确性吗?是的,会有微小的提升。回报的增加会减少吗?树越多,推理时间越长,但你可以通过好的代码加快速度。Jeremy 经常使用超过 100 棵树吗?fastbook 第 8 章
- OOB (袋外错误) 是什么?考虑到每棵树只使用数据集的 75% 进行训练,bagging 如何避免没有验证集?sklearn 使用 OOB 容易吗?
- bagging 与随机森林相比是什么?随机森林是否只是应用于包含大量决策树的 bagging (元模型)?我们能否不仅 bagging 很多决策树 (变成随机森林),还可以 bagging 很多神经网络吗?考虑到大多数人不做,我们 (fastai 的人) 会这样做吗?
- 随机森林能给我们带来哪些洞察或模型解释?
- bagging 如何帮助我们了解我们对表格数据某一行预测的置信度?
- 在你找出那些重要特征后,对于表格数据集中那些不那么重要的列或特征,该怎么办?
- 查阅书中关于移除冗余特征的部分
- 局部依赖有什么作用?每一列/特征与因变量有何关系?这是随机森林特有的吗?为什么计算局部依赖不像听起来那么容易?局部依赖在幕后是如何工作的?我们能否同时计算多个特征的局部依赖?
- 你能解释为什么会做出某个特定的预测吗?树解释器能否为我们提供模型对某一行数据的预测的特征重要性 (或从根到叶的路径)?
- 你会删除表现不好的树吗?不会,这样做会使你的 bagging 产生偏差。
- 对袋子进行 bagging 会比一个袋子做得更好吗?不会,平均值的平均值仍然是平均值
- Jeremy 如何看待随机森林的特征重要性与其他模型可解释性技术?何时使用特征重要性和其他可解释性技术?
- 表格数据部分在第 9 章。随机森林会过拟合吗?不会,树越多越准确,但层级不够深的树过多可能会导致随机森林过拟合。
- 通过添加大量噪声列/特征,你能扰乱随机森林吗?
- 使用随机森林时你不需要担心什么?逻辑回归中的交互作用、归一化
- 什么是梯度提升?提升是如何工作的?bagging 和 boosting 都是可以应用于决策树的元模型吗?随机森林 vs 梯度提升树。梯度提升由于更准确会过拟合吗?Jeremy 对随机森林 vs 梯度提升有什么看法?
- 介绍稻谷比赛的 walkthroughs 以及它令人激动之处
- 从 walkthroughs 中提取的基本流程是什么?
- `fastkaggle` 为我们做什么?如何安装和更新它?无论你是否在 kaggle 上,它都能为我们下载 kaggle 数据吗?
- 持续参与 Kaggle 竞赛有很多好处,例如迫使你面对真相,不再自欺欺人地认为你的模型有多好等等。
- 我们应该关注哪两件事?一个好的验证集和如何在一分钟内迭代。为什么迭代如此重要 (用故事讲述)?
- Jeremy 何时使用 `seed=42`,何时不使用?
- 你是否认识到 pytorch 和 PILImage 如何描述张量/图像的形状?Pytorch (640 行 x 480 列) vs PILImage (480 列 x 640 行)
- 找出图像的形状或大小需要很多计算吗?Jeremy 的 `fastcore.parallel` 如何帮助更快地找出所有图像的大小?
- 处理图像最简单的事情是什么?`item_tfms=Resize(480, method='squish'` 有什么作用?`batch_tfms=aug_transforms(size=128, scale=0.75` 有什么作用?我们可以对任何类型的数据使用 `dls.show_batch(max_n=6)` 吗?
- 为什么 Jeremy 通常很早就构建模型,并选择可以快速迭代的模型?
- Jeremy 和 Thomas 创建的项目是为了找出最适合微调的模型?他们检查了多少种不同的架构?他们使用的两个数据集有多大差异?
- 评估模型的标准是什么?它们是如何比较的?Jeremy 为他的第一个模型选择了哪种模型架构,为什么?Jeremy 如何看待研究像 resnet26 这样的模型架构结构?
- Jeremy 如何创建他的第一个模型?Jeremy 如何使用 `lr_find` 来选择更合适的学习率?Jeremy 的第一个模型有多快?为什么 Jeremy 希望它这样?
- 我们应该尽快提交吗?我们首先如何查看提交格式?我们应该如何为测试集构建数据加载器?我们如何预测所有测试集并返回指向最可能的疾病类型的索引列表?我们如何使用 `dls.vocab` 创建字典并使用 pandas map 函数将索引映射到疾病类型字符串?如何将我们最终处理的结果放入数据框并保存到 csv 文件中,然后在终端中检查 csv 文件的结果?
- 我们如何才能让提交到 Kaggle 成为快速自动化?
- 一个快速迭代并在几分钟内训练完成的基线模型能让我们达到前 80% 或后 20%,这并不坏,是一个好的起点。
- 如何才能自动化共享 Kaggle notebook 的过程?以及为什么你应该在 Kaggle 上发布你的 notebook (或者为什么这非常有益)?
- Jeremy 如何以一种非常简单但实际有效的方式,使用 notebook (本地和 Kaggle 上) 迭代模型?
- Jeremy 如何看待 AutoML?Jeremy 如何处理超参数优化?Jeremy 如何在不进行网格搜索的情况下发现 `squish` 在大多数情况下总是优于 `cropping`?Jeremy 如何在不进行网格搜索的情况下快速找到一个好的学习率?
- Jeremy 的经验法则是什?计算机视觉问题使用深度学习模型,表格数据集使用随机森林 (不纠结于 GBM)
- 为什么第一个模型在 Kaggle GPU 上运行得如此慢?如何让我们的模型/notebook 在 Kaggle GPU 和 CPU 上运行得更快?如何先调整大小 (缩小) 所有训练数据并将它们放入不同的文件夹?Jeremy 在这样做之后快了多少?
- 第一个模型对 Kaggle GPU 的利用率有多低?Kaggle 的 2 个 CPU 是否耗尽了?
- Jeremy 如何为第二次迭代选择第二个模型架构?
- 与第一个模型 (resnet26) 相比,一个新的新颖架构能将准确性提高多少?
- 为什么我们应该从 resnet 时代迈向 convnext 的新时代?如何从 convnext 系列中选择合适的模型进行迭代?
- 如何通过将所有内容放入一个函数 `train` 中来快速迭代不同设置的模型?如何快速尝试使用随机裁剪进行调整大小,而不使用 `squish`?Jeremy 关于这次模型迭代发现了什么?
- 如何使用填充来迭代模型?填充与裁剪和 squish 有什么特别之处?它的缺点是什么?以及这次迭代做得如何?
- 我们的数据增强对图像做了什么?如何从迷你 bagging 的角度理解测试时间增强 (tta)?fastai 使 tta 工作起来有多容易?tta 应该效果更好,但在这次特定的 Kaggle 运行中,它没有。Jeremy 说下次会再讨论这个。
- 如何使用更大的图像和更长的 epoch 来迭代模型?这次迭代让我们提升了多少?到目前为止,上述所有迭代背后的机制对于所有不同的问题都是通用的
- pandas 索引如何使得从索引到 vocab 字符串的映射变得超快?以及如何以通常的方式提交到 Kaggle?
- 我们总是对图像进行数据增强吗?tta 使用什么数据增强?
- 为什么 Jeremy 在不同的迭代中使用不同的纵横比?Jeremy 一直在尝试哪些更好的方法?
- 为什么 Jeremy 没有让图像更像图像,而是使用简单的填充 (即黑色条纹)?