我们需要从多个维度去了解一个事物,形成自己的思维逻辑,才能达到能举一反三的效果,碰到相应的问题,可以有对策。
本文可以看作是前几个任务流程的一个展开与汇合
初始数据集 - Initial Dataset
数据集是你构建机器学习模型历程中的起点。简单来说,数据集本质上是一个M×N矩阵,其中M代表列(特征),N代表行(样本)。
Input variables
列可以分解为X和Y,首先,X是几个类似术语的同义词,如特征、独立变量和输入变量。其次,Y也是几个术语的同义词,即类别标签、因变量和输出变量。
应该注意的是,一个可以用于监督学习的数据集(可以执行回归或分类)将同时包含X和Y,而一个可以用于无监督学习的数据集将只有X。
此外,如果Y包含定量值,那么数据集(由X和Y组成)可以用于回归任务,而如果Y包含定性值,那么数据集(由X和Y组成)可以用于分类任务。
探索性数据分析: EDA - Exploratory Data Analysis
进行探索性数据分析(EDA)是为了获得对数据的初步了解。在一个典型的数据科学项目中,我会做的第一件事就是通过执行EDA来 "盯住数据",以便更好地了解数据。
EDA三大方法包括:
- 描述性统计:平均数、中位数、模式、标准差。
- 数据可视化:热力图(辨别特征内部相关性)、箱形图(可视化群体差异)、散点图(可视化特征之间的相关性)、主成分分析(可视化数据集中呈现的聚类分布)等。
- 数据整形:对数据进行透视、分组、过滤等。
举例
NBA球员统计数据的箱形图示例:
NBA球员统计数据的相关热力图示例:
NBA球员统计数据的散布图示例:
数据预处理: Pre-processed Dataset
数据预处理(又称数据清理、数据整理或数据处理)是指对数据进行各种检查和审查的过程,以纠正缺失值、拼写错误、使数值正常化/标准化以使其具有可比性、转换数据(如对数转换)等问题。
"Garbage in, Garbage out."
正如上面的引言所说,数据的质量将对生成模型的质量产生很大的影响。因此,为了达到最高的模型质量,应该在数据预处理阶段花费大量精力。一般来说,数据预处理可以轻松地占到数据科学项目所花费时间的80%,而实际的模型建立阶段和后续的模型分析仅占到剩余的20%。
数据分割(Data Splitting)
1. 训练-- 测试集分割
在机器学习模型的开发过程中,希望训练好的模型能在新的、未见过的数据上表现良好。为了模拟新的、未见过的数据,对可用数据进行数据分割,从而将其分割成2部分(有时称为 训练—测试 分割)。特别是,第一部分是较大的数据子集,用作训练集(如占原始数据的80%),第二部分通常是较小的子集,用作测试集(其余20%的数据)。需要注意的是,这种数据拆分只进行一次。
接下来,利用训练集建立预测模型,然后将这种训练好的模型应用于测试集(即作为新的、未见过的数据)上进行预测。根据模型在测试集上的表现来选择最佳模型,为了获得最佳模型,还可以进行超参数优化。
训练--测试集分割:
在回归问题上,我们需要解决泛化能力及过拟合问题。
当模型过于复杂,完美地拟合所有的数据点,达到最小误差,过拟合就出现了。
从图中可以看出,直线并没有完全拟合所有的数据点,蓝色曲线经过了所有的数据点,达到了训练数据集上的最小误差。但是,在新的数据集上,直线所在的模型可能会比蓝色曲线具有更好的泛化能力。实际上,回归或者分类问题是在模型泛化能力与模型复杂度之间的较量。
泛化能力越差,在新的数据集上的误差就会越大。
如图所示,随着模型复杂度升高,模型在新数据集上的表现是先降低,到达某个位置后逐渐升高(红色线)。 而在训练数据集上,误差在不断地降低。这种新数据集用于测试模型的泛化能力,所以称为测试集。
2. 训练--验证--测试集分割
另一种常见的数据分割方法是将数据分割成3部分。(1) 训练集,(2) 验证集 和(3) 测试集。与上面解释的类似,训练集用于建立预测模型,同时对验证集进行评估,据此进行预测,可以进行模型调优(如超参数优化),并根据验证集的结果选择性能最好的模型。正如我们所看到的,类似于上面对测试集进行的操作,这里我们在验证集上做同样的操作。请注意,测试集不参与任何模型的建立和准备。因此,测试集可以真正充当新的、未知的数据。
训练--验证--测试集分割图示:
如果只有一个固定的训练集,一个固定的测试集,可能存在一个很大的问题:模型在将来的新数据集上有可能表现不佳,因为这个固定的训练集和测试集实在是太单一了。
有的时候,自己的模型性能不错,遇到新的数据后变化很大,这个时候我们就需要一种叫做交叉验证的方法去解决问题。
如果仅仅有训练集和测试集的话,假设测试集是模型无法接触到的数据,我们就没法去处理超参数。
验证集就是这样一个数据集,让我们调整超参数的时候,我们可以看到模型的准确度。
经典做法是,将数据集的60%作为训练集,20%作为测试集,20%作为验证集。
模型训练 - Trained Modal
现在我们可以使用精心准备的数据来建立模型了。根据目标变量(通常称为Y变量)的数据类型(定性或定量),我们要建立一个分类(如果Y是定性的)或回归(如果Y是定量的)模型。
学习算法 - learning algorithm
监督学习、无监督学习、强化学习等,详见 机器学习的之数据学习算法
参数调优 - Hyperparameter optimization
超参数本质上是机器学习算法的参数,直接影响学习过程和预测性能。由于没有“一刀切 ”的超参数设置,可以普遍适用于所有数据集,因此需要进行超参数优化(也称为超参数调整或模型调整)。 我们以随机森林为例。在使用randomForest R包时,通常会对两个常见的超参数进行优化,其中包括mtry和ntree参数(这对应于scikit-learnPython库中RandomForestClassifier()和RandomForestRegressor()函数中的nestimators和maxfeatures)。mtry(maxfeatures)代表在每次分裂时作为候选变量随机采样的变量数量,而ntree(nestimators)代表要生长的树的数量。
另一种流行的机器学习算法是支持向量机。需要优化的超参数是径向基函数(RBF)内核的C参数和gamma参数(即线性内核只有C参数;多项式内核的C和指数)。C参数是一个限制过拟合的惩罚项,而gamma参数则控制RBF核的宽度。如上所述,调优通常是为了得出超参数的最佳值集,尽管如此,也有一些研究旨在为C参数和gamma参数找到良好的起始值(Alvarsson等人,2014)。
特征选择 - Feature Selection
顾名思义,特征选择从字面上看就是从最初的大量特征中选择一个特征子集的过程。除了实现高精度的模型外,机器学习模型构建最重要的一个方面是获得可操作的见解,为了实现这一目标,能够从大量的特征中选择出重要的特征子集非常重要。
特征选择的任务本身就可以构成一个全新的研究领域,在这个领域中,大量的努力都是为了设计新颖的算法和方法。从众多可用的特征选择算法中,一些经典的方法是基于模拟退火和遗传算法。除此之外,还有大量基于进化算法(如粒子群优化、蚁群优化等)和随机方法(如蒙特卡洛)的方法。
原文作者的自己的研究小组也在对醛糖还原酶抑制剂的定量结构—活性关系建模的研究中,探索了利用蒙特卡洛模拟进行特征选择的方法(Nantasenamat等,2014)。
Predictive QSAR modeling of aldose reductase inhibitors using Monte Carlo feature selection
在《遗传算法搜索空间拼接粒子群优化作为通用优化器》的工作中,原文作者的小组还设计了一种基于结合两种流行的进化算法即遗传算法和粒子群算法的新型特征选择方法(Li等,2013)。
Genetic algorithm search space splicing particle swarm optimization as general-purpose optimizer
上图是遗传算法搜索空间拼接粒子群优化(GA-SSS-PSO)方法的原理示意图,用Schwefel函数在2维度上进行说明
"原搜索空间(a)x∈[-500,0]在每个维度上以2的固定间隔拼接成子空间(图中一个维度等于一个横轴)。这样就得到了4个子空间(b-e),其中x在每个维度上的范围是原始空间的一半。GA的每一个字符串都会编码一个子空间的索引。然后,GA启发式地选择一个子空间(e),并在那里启动PSO(粒子显示为红点)。PSO搜索子空间的全局最小值,最好的粒子适应性作为编码该子空间索引的GA字符串的适应性。最后,GA进行进化,选择一个新的子空间进行探索。整个过程重复进行,直到达到满意的误差水平。"
交叉验证 - Cross-validation Model
为了最经济地利用现有数据,通常使用N倍交叉验证(CV),将数据集分割成N个折(即通常使用5倍或10倍CV)。在这样的N倍CV中,其中一个折被留作测试数据,而其余的折则被用作建立模型的训练数据。
例如,在5倍CV中,有1个折被省略,作为测试数据,而剩下的4个被集中起来,作为建立模型的训练数据。然后,将训练好的模型应用于上述遗漏的折(即测试数据)。这个过程反复进行,直到所有的折都有机会被留出作为测试数据。因此,我们将建立5个模型(即5个折中的每个折都被留出作为测试集),其中5个模型中的每个模型都包含相关的性能指标(我们将在接下来的部分讨论)。最后,度量(指标)值是基于5个模型计算出的平均性能。
交叉验证示意图在N等于数据样本数的情况下,我们称这种留一的交叉验证。在这种类型的CV中,每个数据样本代表一个折。例如,如果N等于30,那么就有30个折(每个折有1个样本)。在任何其他N折CV中,1个折点被留出作为测试集,而剩下的29个折点被用来建立模型。接下来,将建立的模型应用于对留出的折进行预测。与之前一样,这个过程反复进行,共30次;计算30个模型的平均性能,并将其作为CV性能指标。
这部分笔者没看懂...
预测值(Predicted value) - 两种学习任务
两种学习任务
例 - 波士顿住房数据集
波士顿住房数据集(Boston Housing Dataset)是数据科学教程中通常使用的一个热门示例数据集。该数据集由506行和14列组成。为了简洁起见,下面显示的是标题(显示变量名称)加上数据集的前4行。
在14列中,前13个变量被用作输入变量,而房价中位数(medv)被用作输出变量。可以看出,所有14个变量都包含了量化的数值,因此适合进行回归分析。
www.wenjiangs.com/doc/714b98f…
训练流程
graph TD
读取数据集 --> 将数据分享为x和Y矩阵 --> 进行80/20的数据拆分 --> 利用百分之80的子集建立线性回归模型 --> 并应用训练好的模型对百分之20的子集进行预测 --> 最后显示了实际与预测medv值的性能指标和散点图
试集的实际medv值与预测medv值(20%子集)的散点图:
原作教程: youtu.be/R15LjD8aCzc
参考