一个机器学习项目从开始到结束大致分为 5 步,分别是定义问题、收集数据和预处理、选择算法和确定模型、训练拟合模型、评估并优化模型性能。是一个循环迭代的过程,优秀的模型都是一次次迭代的产物。
定义问题
要剖析业务场景,设定清晰的目标,同时还要明确当前问题属于哪一种机器学习类型。
收集数据和预处理
收集数据
数据来源有多种形式,根据业务问题进行搜集和整合。
数据可视化
通过散点图来观察特征和指标间的分布,推测之间的关系。
数据清洗
1、处理缺失的数据。(补充、剔除)
2、处理重复的数据。
3、处理错误的数据。
4、处理不可用的数据。
特征工程
特征工程是一个专门的机器学习子领域,它是数据处理过程中最有创造力的环节,特征工程做得好不好,非常影响机器学习模型的效率。特征工程就是指优化数据集的特征,使机器学习算法更起作用的过程。数据和特征决定了机器学习的上限,而模型和算法只是无限逼近这个上限而已 。
摒弃掉冗余的特征、降低特征的维度,能使机器学习模型训练得更快。
特征编码
-
独热编码(One-HotEncoding)
用于将分类特征的每个元素转化为一个可直接计算的数值,也即特征值数字化。独热编码采用N位状态寄存器来对N个可能的取值进行编码,每个状态都由独立的寄存器来表示,并且在任意时刻只有其中一位有效。
独热编码的优点:能够处理非数值属性;在一定程度上扩充了特征;编码后的属性是稀疏的,存在大量的零元分量。
-
LabelEncoder
针对离散变量,将离散型的数据转换成 0 到 n − 1 之间的数,这里 n 是一个列表的不同取值的个数,可以认为是某个特征的所有不同取值的个数。
特征选择
在一个数据集中,每个特征在标签预测或分类过程中发挥的作用其实都不同。对于那些没作用和作用小的数据,我们就可以删掉,来降低数据的维度,节省模型拟合时的计算空间。
自动特征选择工具,klearn 的 feature_selection 模块中,有很多自动特征选择工具。SelectKBest 的原理和使用都非常简单,它是对每个特征和标签之间进行统计检验,根据 X 和 y 之间的相关性统计结果,来选择最好的 K 个特征,并返回。
数据降维
把多维特征压缩成低维的特征,也就是通过算法实现特征选择,减少特征的数目。常见的降维算法有两种:主成分分析法(PCA)和线性判别分析(LDA)。PCA 是一种无监督的降维方法,而 LDA 是一种有监督的降维方法。
特征变换
特征变换的整体目标是让原始特征变得机器学习模型可用,甚至是更好用。
特征构建
特征构建是整个特征工程领域最具创造力的部分,也是我觉得在数据预处理环节中最有意思的地方。因为它完全没有一定之规,全凭借你的经验、领域知识和创造力。
构建特征集和标签集
主要是针对监督学习,拆分出特征和标签。
拆分训练集、验证集和测试集
训练集用来训练模型,验证集用来模型调优,测试集用来评估模型性能。
验证集,是模型训练过程中单独留出的样本集,它可以用于调整模型的超参数和用于对模型的能力进行初步评估。
测试集,用来评估模最终模型的泛化能力。但不能作为调参、选择特征等算法相关的选择的依据。
选择算法并建立模型
最常用的算法工具包是 scikit-learn,简称 sklearn,它是使用最广泛的开源 Python 机器学习库,堪称机器学习神器。
模型的参数
内部参数和外部参数。内部参数是属于算法本身的一部分,不用我们人工来确定,刚才提到的权重 w 和截距 b,都是线性回归模型的内部参数;而外部参数也叫做超参数,它们的值是在创建模型时由我们自己设定的。
深度学习
最基本、最简单的神经网络就是逻辑回归模型。神经网络需要对数据进行归一化的操作。
深度学习特别擅长处理非结构化的数据。传统的模型需要先做各种各样的特征工程,让数据变得"计算机友好",再输入模型进行学习。而深度学习模型则可以自动进行特征提取,因此就省略掉了手工做特征工程的环节。
集成学习
集成学习的核心思想是训练出多个模型并将这些模型进行组合。根据分类器的训练方式和组合预测的方法,集成学习中两种最重要的方法就是:降低偏差的 Boosting 和降低方差的 Bagging。
训练模型
训练模型就是用训练集中的特征变量和已知标签,根据当前样本的损失大小来逐渐拟合函数,确定最优的内部参数,最后完成模型。
在模型训练的过程中,控制模型的复杂度,防止过拟合。比如决策树的最大深度,和回归模型的正则化。
模型的评估和优化
在验证集或者测试集进行模型效果评估的过程中,我们则是通过最小化误差来实现超参数(模型外部参数)的优化。
如果模型的评估分数不理想,我们就需要回到第 3 步,调整模型的外部参数,重新训练模型。要是得到的结果依旧不理想,那我们就要考虑选择其他算法,创建全新的模型了。如果很不幸,新模型的效果还是不好的话,我们就得回到第 2 步,看看是不是数据出了问题。
对于过拟合的讨论,我们多限于监督学习的应用范围,也就是回归和分类两大类问题。当然,也有人认为无监督学习中也存在过拟合现象,但是无监督学习中的过拟合被讨论的不多。