《Python机器学习——预测分析核心算法》——2.1 “解剖”一个新问题

2.1 “解剖”一个新问题

本书介绍的算法通常是从一个充满了数字,可能是特征(变量)的矩阵(或表格)开始的。表2-1展示了一些术语,代表了一个小规模的二维机器学习数据集。此表提供了一个数据集的基本印象,这样对“列代表属性特征,行代表实例”等约定就比较熟悉。这个例子中的问题是预测下一年在线购买书籍所需花费的金额。

数据是按照行和列组织的。每行代表一个实例(或者叫一个例子、观察)。在表2-1中每列指定相应的列名,用来指明在一个机器学习问题中所起的作用。标明为“属性”的列用来预测在买书上所花的费用。在标明为“标签”的列,可以看到去年每个顾客在购书上的花费。

注意

机器学习数据集通常列对应一个属性,行对应一个观察,但也有例外。例如,有些文本挖掘问题的数据矩阵就是另外的形式:列对应一个观察,行对应一个属性。
在表2-1中,一行代表一个顾客,此行的数据都与此顾客相关。第一列叫作UserID(用户ID),是每行惟一的识别符。实际问题中可能有惟一识别符也可能没有。例如,网站通常为网站的访客建立一个相应的用户ID,并且在此用户访问网站期间,用户的所有行为都与此用户ID绑定。如果用户在此网站上没有注册,则用户的每次访问都将获得一个不同的用户ID。通常每个观察会被分配一个ID,这个就是预测的目标对象。第2~第4列称为属性,以代替更具体的名字,如身高、性别等。这主要是为了突出他们在预测过程中起到的作用。属性就是在具体实例中用来预测的数据。

标签就是需要预测的数据。在这个例子中,用户ID就是一个简单的数字,属性1是身高,属性2是性别,属性3是此人去年阅读的书籍的数量。标签列上的数字代表每人去年在线购书的花费。那么不同类型的数据分别代表什么样的角色呢?一个机器学习算法是如何利用用户ID、属性和标签列的呢?最简短的回答就是:忽略用户ID。使用属性来预测标签。

惟一的用户ID只是起到记账的目的,在某些情况下可以根据用户ID检索到用户的其他数据。通常机器学习算法并不直接使用用户ID。属性是挑选出来用于预测的。标签是观察得到的结果,机器学习基于此来构建预测模型。

预测通常不用用户ID信息,因为它太特殊了。它一般只属于一个实例。一个机器学习的技巧就是构建的模型要有泛化能力(即可以解决新的实例,而不仅仅是把过去的例子都记下来)。为了达到这个目的,算法必须能够关注到不止一行的数据。一个可能的例外是,如果用户ID是数字的,并且是按照用户登录的时间依次进行分配的。这样就指示了用户的登录日期,那么如果用户ID比较接近,就证明了用户是在比较接近的时间上登录的,依此为条件可以把用户划分为不同的组。

构建预测模型的过程叫作训练。具体的方法依赖于算法,后续章节会详述,但基本上采用迭代的方式。算法假定属性和标签之间存在可预测的关系,观察出错的情况,做出修正,然后重复此过程直到获得一个相对满意的模型。技术细节后续会介绍,这里只是介绍基本思想。

名字的含义:

属性和标签有不同的名字。机器学习的初学者往往被这些名词迷惑,不同的作者可能会采用不同的名字,甚至一篇文章的段落与段落之间都会采用不同的名字。

属性(用来进行预测的变量)也被称为:

预测因子
特征
独立变量
输入
标签通常也被称为:

结果
目标
依赖变量
响应

2.1.1 属性和标签的不同类型决定模型的选择

表2-1中的属性可以分成2类:数值变量、类别(或因素、因子)变量。属性1(身高)是一个数值变量,也是最常见的属性类型。属性2是性别,可以是男性或女性。这种类型的属性叫作类别变量或因素变量。类别变量的一个特点就是不同值之间没有顺序关系。男性<女性是没有意义的(噢,忘掉几个世纪的争吵吧)。类别变量可以是2值的,如男性和女性,也可以是多值的,如美国的州(AL,AK,AR,…WY)。关于属性还有其他差别(如整数与浮点数),但这些差别对机器学习算法的影响并不像数值变量和类别变量那么大。主要原因是很多机器学习算法只能处理数值变量,不能处理类别变量或因素变量(factor variable)。例如,惩罚回归算法只能处理数值变量,SVM、核方法、K最近邻也是同样。第4章将介绍将类别变量转换为数值变量的方法。这些变量的特性将会影响算法的选择以及开发一个预测模型的努力的方向,因此这也是当面临一个新问题时,需要考虑的因素之一。

这种二分法同样适用于标签。表2-1所示的标签是数值的:去年在线购书所花费的金额。然而在其他问题中,标签就可能是类别的。例如,如果表2-1的任务是预测哪些人下一年的花费超过200美元,那么问题就变了,解决问题的方法也随之变了。预测哪些顾客的花费会超过200美元的新问题会产生新的标签。这些标签会在两个值中选一个。表2-1中的标签与新的逻辑命题“花费>200美元”下的新标签之间的关系如表2-2所示。表2-2所示的新标签取值为:真或假。

当标签是数值的,就叫作回归问题。当标签是类别的,就叫作分类问题。如果分类结果只取2个值,就叫作二元分类问题。如果取多个值,就是多类别分类问题。

在很多情况下,问题的类型是由设计者选择的。刚刚的例子就是如何把一个回归问题转换为二元分类问题,只需要对标签做简单的变换。这实际上是面临一个问题时所做的一种权衡。例如,分类目标可以更好地支持2种行为选择的决策问题。

分类问题也可能比回归问题简单。例如考虑2个地形图的复杂度差异,一个地形图只有一个等高线(如30.5米的等高线),而另一个地形图每隔3.05米就有一个等高线。只有一个等高线的地形图将地图分成高于30.5米的区域和低于30.5米的区域,因此相比另一个地形图含有更少的信息。一个分类器就相当于只算出一个等高线,而不再考虑与这条分界线的远近距离之类的问题,而回归的方法就相当于要绘制一个完整的地形图。

2.1.2 新数据集的注意事项

初始审视数据集时,还需要考查数据集的其他特性。下面是一个检查清单,是为了熟悉数据集需要考察的一系列事情,这也有利于明确后续预测模型的开发流程。这些都是很简单的事情,但是直接影响后续步骤,通过这个过程可以了解此数据集的特性。

需要检查的事项:

行数、列数
类别变量的数目、类别的取值范围
缺失的值
属性和标签的统计特性
第一个要确认的就是数据的规模。将数据读入二维数组,则外围数组的维度就是行数,内部数组的维度就是列数。下节将会展示针对某一数据集应用此方法获取数据的规模。

下一步就要确定每行有多少缺失的值。这么一行行处理数据的原因是处理缺失数据最简单的方法就是直接抛弃有缺失数据的行(如至少少了一个值的行)。在很多情况下,这样做会导致结果偏差,但在抛弃的行不多的情况下,并不会产生实质性的差异。通过计算具有缺失数据的行数(加上具体缺失的项数),就可以知道如果采用最简单的方法,则实际上抛弃了多少数据。

如果你有大量的数据,例如正在收集互联网上的数据,那么丢失的数据相对于你获得的数据总量应该是微不足道的。但如果处理的是生物数据,这些数据都比较昂贵,而且有多种属性,这时抛弃这些数据的代价就太大了。在这种情况下,需要找到方法把丢失的值填上,或者使用能够处理丢失数据的算法。把丢失的数据填上的方法一般叫作遗失值插补(imputation)。遗失值插补的最简单方法就是用每行所有此项的值的平均值来代替遗失的值。更复杂的方法要用到第4章和第6章介绍的预测模型。用预测模型时,将含有遗失值的那列属性当作标签,当然在进行这步之前要确保将初始问题的标签移除。

接下来的小节将从头到尾介绍分析数据集的完整过程,并引入刻画数据集的一些方法,这些都将帮助你确定如何解决建模的问题。

时间: 2024-08-22 15:23:06

《Python机器学习——预测分析核心算法》——2.1 “解剖”一个新问题的相关文章

《Python机器学习——预测分析核心算法》——导读

前言 Python机器学习--预测分析核心算法 从数据中提取有助于决策的信息正在改变着现代商业的组织,同时也对软件开发人员产生了直接的影响.一方面是对新的软件开发技能的需求,市场分析师预计到2018年对具有高级统计和机器学习技术的人才需求缺口将达140000-190000人.这对具有上述技能的人员来说意味着丰厚的薪水和可供选择的多种有趣的项目.另一方面对开发人员的影响就是逐步出现了统计和机器学习相关的核心工具,这减轻了开发人员的负担.当他们尝试新的算法时,不需要重复发明"轮子".在所有

《Python机器学习——预测分析核心算法》——第1章 关于预测的两类核心算法

第1章 关于预测的两类核心算法 Python机器学习--预测分析核心算法 本书集中于机器学习领域,只关注那些最有效和获得广泛使用的算法.不会提供关于机器学习技术领域的全面综述.这种全面性的综述往往会提供太多的算法,但是这些算法并没有在从业者中获得积极的应用. 本书涉及的机器学习问题通常是指"函数逼近(function approximation)"问题.函数逼近问题是有监督学习(supervised learning)问题的一个子集.线性回归和逻辑回归是解决此类函数逼近问题最常见的算法

《Python机器学习——预测分析核心算法》——第2章 通过理解数据来了解问题

第2章 通过理解数据来了解问题 Python机器学习--预测分析核心算法新数据集(问题)就像一个包装好的礼物,它充满了承诺和希望.一旦你能解决它,你就收获了喜悦.但是直到你打开它,它都一直保持着神秘.本章就是告诉你怎么"打开"新的数据集,看清楚里面都有什么,知道如何处置这些数据,并且开始思考如何利用这些数据构建相应的模型. 本章有两个目的:一是熟悉这些数据集,这些数据集被用来作为解决各种类型问题的例子,主要是利用第4章和第6章介绍的算法:另一个目的就是展示Python中分析数据的工具包

《Python机器学习——预测分析核心算法》——1.6 各章内容及其依赖关系

1.6 各章内容及其依赖关系 依赖于读者的背景和是否有时间来了解基本原理,读者可以采用不同的方式来阅读本书.图1-7为本书各章之间的依赖关系. 第2章仔细审视各种数据集.这些数据集用于本书中的问题实例,用以说明算法的使用,以及各种算法之间基于性能和其他特征的比较.面对一个新的机器学习问题的起点就是深入专研数据集,深入理解数据集,了解它们的问题和特质.第2章的部分内容就是展示Python中可以用于数据集探索的一些工具集.可以浏览第2章中的部分例子,不需要阅读全部例子就可以了解整个流程,当在后续章节

《Python机器学习——预测分析核心算法》——1.1 为什么这两类算法如此有用

1.1 为什么这两类算法如此有用 有几个因素造就了惩罚线性回归和集成方法成为有用的算法集.简单地说,面对实践中遇到的绝大多数预测分析(函数逼近)问题,这两类算法都具有最优或接近最优的性能.这些问题包含:大数据集.小数据集.宽数据集(wide data sets)[1].高瘦数据集(tall skinny data sets)[2].复杂问题.简单问题,等等.Rich Caruana及其同事的两篇论文为上述论断提供了证据. 1."An Empirical Comparison of Supervi

《Python机器学习——预测分析核心算法》——2.4 基于因素变量的实数值预测:鲍鱼的年龄

2.4 基于因素变量的实数值预测:鲍鱼的年龄 探测未爆炸的水雷数据集的工具同样可以用于回归问题.在给定物理测量值的情况下,预测鲍鱼的年龄就是此类问题的一个实例.鲍鱼的属性中包括因素属性,下面将说明属性中含有因素属性后与上例有什么不同. 鲍鱼数据集的问题是根据某些测量值预测鲍鱼年龄.当然可以对鲍鱼进行切片,然后数年轮获得鲍鱼年龄的精确值,就像通过数树的年轮得到树的年龄一样.但是问题是这种方法代价比较大,耗时(需要在显微镜下数年轮).因此更方便经济的方法是做些简单的测量,如鲍鱼的长度.宽度.重量等指

《Python机器学习——预测分析核心算法》——1.5 构建预测模型的流程

1.5 构建预测模型的流程 使用机器学习需要几项不同的技能.一项就是编程技能,本书不会把重点放在这.其他的技能用于获得合适的模型进行训练和部署.这些其他技能将是本书重点关注的.那么这些其他技能包括哪些内容? 最初,问题是用多少有些模糊的日常语言来描述的,如"给网站访问者展示他们很可能点击的链接".将其转换为一个实用的系统需要用具体的数学语言对问题进行重述,找到预测所需的数据集,然后训练预测模型,预测网站访问者对出现的链接点击的可能性.对问题用数学语言进行重叙,其中就包含了对可获得的数据

《Python机器学习——预测分析核心算法》——2.5 用实数值属性预测实数值目标:评估红酒口感

2.5 用实数值属性预测实数值目标:评估红酒口感 红酒口感数据集包括将近1 500种红酒的数据.每一种红酒都有一系列化学成分的测量指标,包括酒精含量.挥发性酸.亚硝酸盐.每种红酒都有一个口感评分值,是三个专业评酒员的评分的平均值.问题是构建一个预测模型,输入化学成分的测量值,预测口感评分值,使之与评酒员的评分一致. 代码清单2-14为获得红酒数据集统计信息的代码.代码打印输出数据集的数值型统计信息,在代码清单的最后部分可以看到.代码还产生了归一化属性的箱线图,可以直观发现数据集中的异常点.图2-

《Python机器学习——预测分析核心算法》——2.2 分类问题:用声纳发现未爆炸的水雷

2.2 分类问题:用声纳发现未爆炸的水雷 此小节将介绍在分类问题上首先需要做的工作.首先是简单的测量:数据的规模.数据类型.缺失的数据等.接着是数据的统计特性.属性之间的关系.属性与标签之间的关系.本节的数据集来自UC Irvine 数据仓库(见参考文献1).数据来源于实验:测试声纳是否可以用于检测在港口军事行动后遗留下来的未爆炸的水雷.声纳信号又叫作啁啾信号(chirped signal),即信号在一个脉冲期间频率会增加或降低.此数据集的测量值代表声纳接收器在不同地点接收到的返回信号,其中在大