【Kaggle从入门到放弃】(04):机器学习框架

第一章 概述

机器学习的五个核心步骤:

步骤一:探索性分析

       首先,“了解”数据。这一步应该快速,有效和果断。

步骤二:数据清理

       然后,清理数据,以避免许多常见的陷阱。更好的数据优于更高级的算法。

步骤三:特征工程

接下来,通过设计新特征,帮助你的算法“专注”重要事项。

步骤四:算法选择

       为你要解决的问题,选择合适的算法。

步骤五:训练模型

       最后,训练你的模型。

请记住:“更好的数据优于更高级的算法”。专业的数据科学家将大部分时间花在了解数据,清理数据和设计新特征上。也就是前三个核心步骤十分关键!

第二章 探索性分析

工具:数据可视化、统计学分析。

目的:了解我们的数据集

数据分为数值型和类目型两种。数值型数据比如船票的价格,年龄等。类目型数据比如性别,登船点等。

1 数值型数据可视化:直方图

2 类目型数据可视化:条形图

研究相关性

相关性允许您查看数字要素与其他数字要素之间的关系。

相关性是介于-1和1之间的值,表示两个要素一致移动的程度。您无需记住数学计算它们。只要知道以下直觉:正相关意味着当一个特征增加时,另一个特征增加。例如孩子的年龄和身高。负相关意味着当一个特征增加时,另一个特征减少。例如,学习的时间和参加的人数。-1或1附近的相关性表明关系密切。

接近0的人表示关系薄弱。0表示没有关系。

3 热图:帮助您可视化此信息。

第三章 数据清理

数据清理的常见步骤:修复结构错误、缺省数据的处理和过滤特征。

更好的数据优于更高级的算法。数据清理是每个人都做的事情,但少有人真正谈论过。正确的数据清理可能会影响您的项目。专业数据科学家通常将大部分时间花在这一步上。事实上,如果您有一个正确清理的数据集,即使是简单的算法也可以从数据中获得令人印象深刻的见解!

1 删除不需要的数据

数据清理的第一步是从数据集中删除不需要的数据。这包括重复或不相关的数据。在数据收集过程中最常出现重复数据,例如:合并来自多个地方的数据集

和从客户/其他部门接收数据。

不相关的观察结果是那些实际上不符合试图解决的具体问题的数据。例如,如果您只为单户住宅建造模型,那么您不希望在那里观察公寓。这也是从探索性分析中查看图表的好时机。您可以查看分类功能的分布图,以查看是否存在不应存在的任何类。在特征工程之前检查不相关的观察可以为您节省许多麻烦。

2 修复结构错误

结构误差是在测量,数据传输或其他类型的“错误管理”期间出现的结构误差。

例如,您可以检查拼写错误或不一致的大小写。这主要是对分类功能的关注,您可以查看您的条形图以进行检查。

3 过滤不需要的异常值

异常值可能会导致某些类型的模型出现问题。例如,线性回归模型对异常值的鲁棒性低于决策树模型。

通常,如果您有合理的理由删除异常值,它将有助于您的模型的性能。

然而,在被证明有罪之前,异常值是无辜的。你永远不应该因为它是一个“大数字”而删除异常值。这个大数字可以为您的模型提供非常丰富的信息。

4 缺省数据的处理

在应用机器学习中,数据缺值是一个棘手的问题。

首先,不能简单地忽略数据集中的缺失值。因为大多数算法不接受缺失值,您必须以某种方式处理它们。

数据缺值的事实本身可能提供信息,应该告诉您的算法是否缺少值。比如泰坦尼克中一个人缺值太多,很大概率他在灾难中没有存活下来。另外,在现实世界中,即使缺少某些功能,您也经常需要对新数据进行预测!

类目型数据缺值:将它们标记为“丢失”!实际上是为该功能添加了一个新类。这告诉算法该值丢失了。

数值型数据缺值:标记并填充值。用缺失指标变量标记观察结果。然后,用0填充原始缺失值,以满足无缺失值的技术要求。通过使用这种标记和填充技术,您基本上允许算法估计缺失的最佳常量,而不是仅用均值填充它。

一个特征只有很少的缺失值时,可以考虑用统计方法填充,均值,中位数都可以。

缺省数据的处理方法很多,慢慢摸索和总结经验。

第四章 特征工程

请记住,在五个核心步骤中,数据科学家通常将大部分时间花在特征工程上。

 

探索性分析

数据清理

特征工程

选择算法

训练模型

其它

时间占比

10

20

25

10

15

20

1 什么是特征工程

特征工程是关于从现有的输入特征创建新的输入特征。

通常,您可以将数据清理视为减法,将特征工程作为加法。

这通常是数据科学家为提高模型性能而可以做的最有价值的任务之一,原因有三个:

A 您可以突出显示关键信息,这有助于您的算法“专注”重要事项。

B 您可以引入自己的领域专业知识。

C 最重要的是,一旦你理解了特征工程的“词汇”,就可以引入其他人的领域专业知识!

好消息是,随着您获得更多经验,这项技能将自然得到改善。

1 引入专业领域知识

通常可以通过利用您(或其他人)关于该领域的专业知识来设计新的特征。

“专业领域知识”是非常广泛和开放的。在某些时候,你会陷入困境或用尽你的想法。

2 创建交互特征

检查您是否可以创建任何有意义的交互特征。即把两个或更多输入特征组合起来创建一个新的有意义的特征!组合方式可以是两个特征之间的乘积,求和或者作差等数学组合。

查看每对特征并问自己,“我能以任何可能更有用的方式组合这些信息吗?”

示例:假设我们已经有一个名为'num_schools'的功能,即距离酒店5英里范围内的学校数量。假设我们也有'median_school'这个功能,即这些学校的中位数质量得分。但是,我们可能会怀疑,真正重要的是  拥有许多学校选择,但前提是它们是好的。那么我们可以简单的创建一个新的功能  “school_score”  =  “num_schools”  *  “median_school”!新的有意义的输入特征创建成功!

3 组合稀疏类

稀疏类(在分类特征中)是具有非常少的数量的类。它们对于某些机器学习算法可能是有问题的,导致模型过度拟合。

没有关于每个类需要多少数量的正式规则。它还取决于数据集的大小和您拥有的其他特征的数量。根据经验,我们建议组合类,直到每个类至少有50个数量。与任何“经验法则”一样,使用此作为指导(实际上不作为规则)。

我们可以将多个相似的稀疏类组合成一个单独的大类(大类的数量超过50个)。也可以将剩余的稀疏类归类为“其他”类,即使已经存在“其他”类。在组合稀疏类之后,我们有更少的类别,但每个类都有更多的数量。

通常,观察条形图足以决定是否要将某些类组合在一起。

4 添加虚拟变量Dummy Variables

大多数机器学习算法不能直接处理类目型特征。具体来说,他们无法处理文本值。因此,我们需要为类目型特征创建dummy 变量。虚拟变量是一组二进制(0或1)变量,每个变量代表一个类目型特征中的单个类。

示例:性别中男女。我们可以映射一下,“男性”变成0,“女性”变成1。

5 删除不需要的特征

最后,从数据集中删除未使用或冗余的特征。

未使用的特征是那些无法传递到我们的机器学习算法中的特征。包括:ID列、预测时无法使用的特征、其他文字说明等

冗余特征通常是那些已被特征工程中添加的其他特征所取代的特征。

第五章 选择算法

吴恩达的课程《机器学习》上提到的机器学习算法,如下。

监督学习算法:线性回归、逻辑回归、神经网络、支持向量机

无监督学习算法:聚类、降维、异常检测

特殊算法:推荐算法

在实践中,现代机器学习算法有力的两个工具:正则化和ensembles

使用正则化技术来防止过拟合问题,吴恩达详细讲过。有关ensembles集成学习的理论和技术细节以后再说。

我们通常在选择机器学习模型的过程中使用以下算法:

分类问题:Random Forest、GBM、Logistic Regression、Naive Bayes、Support Vector Machines、k-Nearest Neighbors

回归问题:Random Forest、GBM、Linear Regression、Ridge、Lasso、SVR

我应该优化哪些参数?如何选择最接近最佳参数的参数?这些是人们在大多数时间提出的几个问题。

模型调参的经验,是指导不是法则!

【Kaggle从入门到放弃】(04):机器学习框架

第六章 训练模型

如何设置整个建模过程以最大限度地提高性能,同时防止过拟合

1 拆分数据集

您可以花一些时间来训练您的模型(即将数据喂给算法)。也可以花一些时间来评估(测试)模型。但是你不能为两者重复使用相同的数据!所以拆分数据集为两部分:训练集和测试集。

训练集用于训练和调整模型(交叉验证技术用来调整模型)。

测试集被放在一边作为“看不见的”数据来评估您的模型。

比较测试集与训练集的性能使我们能够避免过度拟合。如果模型在训练集上表现很好但在测试集上表现不佳,那么表示模型过度拟合了。

2 交叉验证技术

       我们使用交叉验证技术来调整模型参数。

交叉验证是一种仅使用您的训练数据获得模型性能可靠估计的方法。交叉验证技术有好几种。最常见的是10倍交叉验证(10-fold cross-validation),将训练集分成10个相等的部分,基本上可以创建10个训练集和交叉验证集的分割。

10倍交叉验证的步骤:

  1. 将数据拆分为10个相等的部分,一共10个fold。
  2. 用9个fold训练你的模型(例如前9个fold)。
  3. 用剩下的1个fold评估模型。
  4. 执行前两个步骤(2)和(3)10次,每次都使用不同的fold来评估模型。
  5. 将10次得到的模型评估分数求平均

将10次得到的模型评估分数求平均作为最终的模型表现估计,也称为交叉验证得分。如何调整模型的参数?对于每种算法(即逻辑回归,随机森林等),对于要尝试的每组模型参数值,使用训练集执行交叉验证技术,计算交叉验证得分。选择具有最高得分的那组参数值。

       现在我们仅仅通过训练集和交叉验证技术,每种算法都能得到1个“最佳”模型!然后使用测试集在其中选出最佳性能的模型。

3 用测试集选出最佳性能的模型

因为您已将测试集保存为真正看不见的数据集,所以现在可以使用它来获得每个模型性能的可靠估计。

可以选择各种性能指标。对于回归任务,建议使用均方误差(MSE)或平均绝对误差(MAE)。(值越低越好)对于分类任务,我们建议使用ROC曲线下面积(AUROC)。(值越高越好)

这个过程非常简单:对于每个模型,请对测试集进行预测。使用这些预测和测试集中的“基础事实”目标变量计算性能指标。

最后,使用这些问题来帮助您选择获胜的模型:

  1. 哪个模型在测试集上表现最佳?(性能指标)
  2. 它在各种性能指标中表现良好吗?(鲁棒性)
  3. 它是否也具有(训练集)中最佳的交叉验证分数(其中之一)?(一致性)
  4. 它是否解决了原有的业务问题?(胜利条件)