英语原文共 415 页,剩余内容已隐藏,支付完成后下载完整资料
学 号: |
0121310880239 |
毕业设计外文翻译
毕设题目 |
基于微博数据的用户画像系统的设计与实现 |
学院 |
计算机科学与技术学院 |
专业 |
软件工程 |
班级 |
软件工程1302班 |
姓名 |
郑云佩 |
指导教师 |
李琳 |
2017 |
年 |
2 |
月 |
8 |
日 |
14章:分类器训练
本章节涵盖:
- 文本特征抽取
- 特征转化以用于Mahout
- 两个Mahout分类器训练
- Mahout学习算法选择
本章节探索了分类器的第一个阶段:模型训练。开发分类器是一个动态的过程,这个过程需要你用创造性的思维来思考描述数据特征的最好的方法,同时也需要你考虑你选择的学习算法如何用在模型训练上。有一些种类的数据很容易用于分类,其他数据则给了我们一些挑战,这些数据很有价值,会让我们感到沮丧同时又令人感兴趣。
在本章节中,你将会学习如何有效地选择和抽取特征用与建立一个Mahout分类器。特征抽取涉及到的不仅仅是你在13章看到的例子中的简化步骤。现在我们将学习特征抽取的细节部分,包括如何对原始数据进行预处理将其转化为可分类数据,也包括如何将可分类数据转化为可以被Mahout分类算法进行处理的向量。我们将一个计算营销问题作为例子来展示如何从数据库中抽取出训练数据。
一旦你理解了如何获得准备用于分类的数据,在14.4节你将会利用一个20个新闻组的标准数据集采用随机梯度下降(stochasticgradientdescent SGD)的Mahout算法建立一个分类器。
在14.5节,我们将回顾各种可用于Mahout分类的学习算法的特点,并且帮助你决定如何选择适合于特定项目的最优算法。特征抽取和算法选择这两个步骤在分类器的设计和训练中密切相关,这两个步骤会帮助你培养不同选择的直觉,后面我们将会看到一步一步地展现利用同样的20个新闻组采用朴素贝叶斯这样一个不同的学习算法的例子。
本章节开头将会阐述如何在你的训练样本中从事数据工作。
14.1抽取特征以用于建立一个Mahout分类器
通过一个分类器使数据转变为可用的形式是一个复杂并且通常非常耗时的步骤,在这一节我们展现所涉及到的知识的一个梗概。在13章的图13.2你看到了一个分类器的训练和用法的简化视图;这个图展现了一个从训练样本到训练分类模型的训练算法的重要单个步骤。但是实际上这个情景更加复杂。图14.1会展示在13章中没有提及的重要细节。
图13.2展示了一个从训练数据到训练算法的重要单个步骤。实际上,原始数据必须要收集起来并且被处理以将其转化为可分类的训练数据。图14.1的训练样本就是可分类数据,这一章我们将涵盖将原始数据处理转化为可分类数据的内容,在15、16章中我们将阐述更多细节。
一旦原始数据被预处理转变为可分类的形式,我们需要一些步骤来选择预测变量和目标变量并将它们编码为向量,即Mahout分类器要求的输入风格。回顾第13章,可以作为预测变量的特征的类型有四种:
连续型
分类型
类单词型
类文本型
预测变量的这个描述整体上是正确的,但是它遗漏了一个重要的事实,这个事实是当这些属性被介绍给用于训练分类器的算法的时候,它必须是数字向量的形式,要么在内存中要么以训练算法可以读取的文件形式存在。
将图14.1描述的简化顺序与图14.2中更细节的图表比起来,原始的数据为了转化成训练算法要求输入的向量形式经历了一系列的变化。这些变化发生在两个阶段:为了产生用于训练样本的可分类数据的预处理阶段和将可分类数据转化为向量的阶段。
就像图14.2所表示的那样,准备训练算法的数据包括两个主要步骤:
1 原始数据的预处理——原始数据被重新安排变成拥有相同属性的记录。为了使其变得可分类,这些属性可以有四种类型:连续型,分类型,类单词型,类文本型。
2数据向向量的转变——可分类数据通过一些定制的编码或者工具例如Lucene分类器和Mahout向量编码器可以被解析并且向量化。一些Mahout分类器也包括了向量编码。
其中的第二个步骤有两个阶段:标记化和向量化。对于连续型变量,解析可能没有价值,但是对于其他类型的变量就可以向量化,例如分类型,类单词型,类文本型的变量。
我们将在这个章节接下来的部分详细讨论这两个步骤。
14.2对原始数据进行预处理以将其转化为可分类数据
特征抽取的第一个阶段涉及到数据的重新思考和识别可以作为预测变量的特征。首先你要选择与分类目标一致的目标变量并且拾取或者丢弃一些特征来得到值得初试的特征的组合。这里没有明确的秘诀:这个步骤需要聪明的你根据经验的指导来猜测,并且当你完成这章的例子之后,对于获得这种经验你就会上道了。
这一节提供给你一个如何对数据进行预处理的简要概括。这个步骤包括对数据进行收集和重组将数据转变为单个记录,也包括收集原始数据的隐含意义(例如将ZIP编码转化为三位数字的编码或者由出生日期得到年龄)。预处理不是这一章的例子的主要部分,因为你所使用的这个阶段的数据抽取我们已经帮你做了。预处理在16、17章中占主要部分。
14.2.1原始数据转化
一旦你识别出了你想要尝试的特征,这些特征必须被转化为可分类的形式。这就涉及到将数据重组成一个单一的位置并且将其转化为一个合适的一致的形式。
注意:可分类数据由一系列拥有相同属性的记录组成,这些属性包括四个属性:连续型,分类型,类单词型,类文本型中的其中一个。每一个记录都包含一个训练样本的完全规格化的说明。
乍一看好像这个步骤早就已经做了:如何数据长得像单词,它就一定是单词,对吗?如果数据长得像数字,它就一定是连续型,对吗?但是看到13章的时候,你会知道第一眼是具有欺骗性的。例如,一个ZIP编码看起来像一串数字但是它其实是一个种类,是一个预定的类的标签。包含单词的事物可能看起来像单词,也有可能他们最好被看作是种类或者文本。用户或者产品的ID编码可能看起来像数字,是分类型或者是类单词型数据,但是更加通常地,ID编码应该被规格化以支持与用户或者产品相关的特点。
接下来的计算营销提供了一个准备原始数据用以分类的例子。
14.2.2计算营销的例子
假设你正在尝试建立一个决定一个用户被提供一个特定商品的时候是否会购买的分类器模型。这并不是一个推荐系统,因为它将会通过使用用户和产品的特点而不是使用相似用户的行为集合来对范例进行分类。
对于这个例子,如图14.3,你有一个拥有一些表在里面的数据库。这些表是一个典型的高度简化的零售系统。有代表用户和产品的表,有一个当用户被提供或者被展示一些商品的时候做记录的表,有一个记录由向用户展示了产品而引发了购买行为的表。这些数据不能立马被接受去作为一个分类器的训练数据或者测试数据,因为这些数据是分散在几个表中的。
图14.3描述的市场项目有非常多种类的数据类型。用户有统计数据,例如出生日期和性别;产品有类别和颜色。对用户的产品提供的数据记录在offer表中,提供了产品之后随之购买的数据记录在purchase表中。
图14.4展示了这些数据如何变成分类器的训练数据。对于offer表的每一个记录,在这些记录中都会有一个相应记录,但是请注意两张表user表和product表中的userID和productID是如何用于连接的。在这次处理中,用户的出生日期被表达为年龄。一个外连接被用于得到提供和购买的延迟时间,同时也加入了一个标志指示是否产生了购买行为。
为了将像图14.4中展示的那样的表示在表中的数据转变成可用的数据形式,这些数据需要被整合在一起并重组。为了达到这一目的,你可能会用到类似这样的SQL语句:
select
now()-birthDate as age, gender,
typeId, colorId, price, discount, offerTime,
ifnull(purchase.time, 0, purchase.time - offer.time) as purchaseDelay,
ifnull(purchase.time, 0, 1) as purchased
from
offer
join user using (userId)
join product using (productId)
left outer join purchase using (offerId);
这种查询语句将存储在数据库不同表中的数据规格化并将其转化为包含所有必要数据的记录。这里得到的表是offer表,并且userId,productId和offerId这些外码的自然属性迫使这个查询语句的输出对于原始offer表中的每一个记录都有一个相应记录。注意和purchase表连接的时候是外连接,这就让ifnull表达式与当没有购买时purchase.time产生的0值相联系。
注意:有些时候年龄更适合分类,有些时候出生日期更适合分类。例如,在汽车事故保险数据中,年龄是一个更好的变量,因为汽车事故与汽车的生命阶段联系更大而不是与车主是第几手联系更大。另一方面,在购买音乐的情景中,出生日期可能更有趣,因为人们在变老的过程中经常保留了他们早期的音乐偏好。他们的品味常常反映了这一代人的品味。
现在这个查询语句的结果就是可分类数据的形式,这些数据已经准备好被训练算法解析和向量化。接下来你可以自己写代码或者将数据变成Mahout分类器所接受的形式(Mahout分类器包含了它自己的解析和向量化代码)。接下来的章节和例子将会聚焦于向量化这些已经被解析和分类了的数据。
14.3将可分类数据转化为向量
在Mahout用语中,向量是一种数据类型,是一种存储由整数索引的浮点数的数据类型。这一章节将会展示如何将数据变成向量,解释特征散列法是什么,并且演示Mahout API如何进行特征散列。我们也会看到如何对这些与变量有关的不同类型的数据进行编码。
你在聚类那一章中已经看到了我们所使用的向量。很多种类的分类器,特别是Mahout,都基本是基于线性代数的,因此需要训练数据以向量的形式输入。
14.3.1用向量来表示数据
如何用向量来表示可分类数据呢?这里有几个方法,我们将它总结在表14.1中。
表14.1列出来的方法使用在不同的Mahout分类器中。让我们从如何对类单词型、类文本型和分类型值进行编码开始吧。
一个单词一个单元格
一种将可分类的数据编码为向量的方法涉及到对训练数据进行两次遍历:一次来决定向量的必要规模,并且要建立一个字典用来记住向量中的每一个特征应该去哪里,另一次用来转化数据。这种方法可以用一种简单的方法表示编码训练和测试范例:每一个连续值和每一个唯一的单词或者分类型种类,类文本型和类单词型的数据都在向量表示法中分配了唯一的一个位置。
这种方法的一个很明显的缺点就是训练数据必须遍历两次,可能使分类器的训练的计算代价非常昂贵,如果是非常大的数据集这就是一个大问题。
在Mahout中这种遍历两次的方法被应用于很多的聚类算法中。
单词包表示的向量
另一种方法不是携带向量对象,而是携带特征名或者是带有种类,单词或者文本值的名字。这种方法初期通常被像朴素贝叶斯和互补朴素贝叶斯这样的Mahout分类器使用。
这种方法的优点是它避免了建立字典的需要,Mahout的线性代数的能力需要向量对象的长度已知并且是一致的,这意味着这种方法很难充分利用Mahout的线性代数能力。
特征散列
预先简单地选取一个合理的向量规模然后将训练数据强塞进既定规模的向量中的这种情况,基于随机梯度下降的分类器很好地避免了这一点。这种方法叫做特征散列方法。通过散列方法选取连续变量的变量名,或者通过散列方法选取变量名、种类名、分类型类文本型类单词型单词数据,这样强塞方法才能选取一个或多个位置。
这种特征散列方法有着独特的优势。它需要更少的内存和更少的训练数据遍
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[137545],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。