社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

机器学习入门系列:关于机器学习算法你需要了解的东西、如何开发机器学习模型?

大数据挖掘DT机器学习 • 5 年前 • 492 次点击  


向AI转型的程序员都关注了这个号👇👇👇

大数据挖掘DT机器学习  公众号: datayx


一、关于机器学习算法 你需要了解的东西

对学习算法进行分类是基于构建模型时所需的数据:数据是否需要包括输入和输出或仅仅是输入,需要多少个数据点以及何时收集数据。根据上述分类原则,可以分为4个主要的类别:监督学习、无监督学习、半监督学习和强化学习。


现在,让我们来回顾一下你需要了解的技术术语,这样你才能高效地与数据科学团队进行合作,并协助他们,让他们的工作成果可以对你的业务产生尽可能大的影响(或至少让你知道他们在说什么)。

算法、模型和数据

从概念层面上来讲,我们正在构建一个机器,给这个机器一组输入数据,然后通过找到数据中的模式并从中学习,能够产生某种预期的输出。

一种非常常见的情况就是让机器在一组输入数据中查找,然后产生相对应的输出数据。机器在输入数据中识别出模式,并创建一组复杂的规则,然后将其应用于以前从未见过的输入并产生所需的输出。例如,给定房屋的面积、地址和房间数(输入),我们来预测房屋的销售价格(输出)。假设我们有10000组这样的数据,包括房屋的面积、地址、房间数量,以及销售价格。则机器会基于这些数据“训练”自己,即识别出房间面积、地址、房间数影响房屋价格的模式,这样,只要我们给出一个从未见过的房子的3个输入项,就可以预测出房子的价格了。

数据科学家的作用是找到给定输入并能够获得预期输出的最佳机器。她有多个模板,对于机器来说,称之为**算法**。从这些模板中生成的解决具体问题的机器被称为**模型**。模板有各种不同的选项和设置,可以通过调整这些选择和设置来从同一模板生成不同的模型。还可以使用不同的模板或调整相同模板的设置来生成多个模型,以便测试出哪个模型能提供最佳结果。

请注意,模型输出只是在一定概率上对决策是正确的或者有用的。模型并不是100%正确的,而是根据模型所看到的大量数据而进行的“最佳猜测”。模型看到的数据越多,提供有用输出的可能性就越大。

数据科学家用来“训练”机器的已知输入和输出集合(即让模型识别数据中的模式并创建规则)叫做“**训练集**”。该数据用于与一个或多个“模板”一起创建用于解决问题的一个或多个模型。记住,即使只使用了一个“模板”(算法),也可以通过调整某些选项来从同一模板生成多个模型。

在得到了几个“训练过”的模型之后,就必须对它们进行检查,看看它们是否能正常工作,哪一个最有效。用来检查的一组新的数据称为“**验证集**”。将验证集作为输入,然后运行模型,查看哪一个模型输出的结果最接近验证集的输出。在我们上面的例子中,就是看哪一种模型预测出来的房屋的价格与实际售价最接近。在这个阶段中,需要有一组新的数据来作为验证集,因为这些模型是根据训练集创建的,所以它们在训练集上能够工作得很好,不会给出真实的结果。

一旦验证了哪种模型性能最佳并选择了最优者,我们的数据科学家就需要确定该模型的实际性能,也就是说,这个最好的模型在解决问题方面到底好到什么程度。再一次,我们需要另外一个新的数据集,因为模型在训练集和验证集上都能表现良好!这最后一个数据集称为“**测试集**”。在我们的例子中,系统会检查对于用测试集作为输入预测出来的房价有多接近测试集的实际价格。

“学习”的类型

应用于解决机器学习问题的算法类型取决于你所拥有的数据。对学习算法进行分类是基于构建模型时所需的数据:数据是否需要包括输入和输出或仅仅是输入,需要多少个数据点以及何时收集数据。根据上述分类原则,可以分为4个主要的类别:监督学习、无监督学习、半监督学习和强化学习。

1. 监督学习

我们在上一节中详细讨论的案例描述了我们所说的“监督学习”。这种学习类型需要有大量**标记数据**示例,即由输入和相应的输出组成的数据。在我们的房屋价格示例中,“标记”是指用模型预测的结果来对输入进行标记。

在监督学习算法中可以看到标记数据(也称为“**参考标准**”数据),从这些数据中学习并根据这些实例进行预测。他们需要大量的标记数据:虽然数据的数量取决于用例,但几百个数据点是最起码的。

使用监督学习解决的两个经典问题是:

  • 回归。根据其他明显的数据集对变量产生的影响来推断未知变量的值。在时间预测中有两个常见用途。例如,我们之前的那个根据位置和面积等变量来预测住宅价格的例子,以及预测未来价格,例如,根据历史和目前的价格数据,预测房屋从现在到一年以后的价格。回归是一种统计方法,它用于确定自变量(你已拥有的数据)与其所需预测值的因变量之间的关系。

  • 分类。确定实体属于多个类别中的哪一个类别。这可以是一个二元分类,例如,确定某个帖子是否会像病毒一样传播(是/否);也可以是多标签分类,例如,在产品照片上标记合适的类别(可能有数百个类别)。

2. 无监督学习

在无监督学习中,算法在试图识别数据中模式的时候,无需使用预期结果来标记数据集。数据是“未标记的”,即没有附加任何有意义的标记。通过无监督学习方法可以解决一些经典问题:

  • 聚类给定某个相似性标准,找出哪些与其他另外一个更相似。使用聚类的一个领域是文本搜索,例如,返回的搜索结果包含了很多非常相似的文档。聚类可用来将它们进行分组,让用户更方便地识别出差异较大的文档。

  • 关联。根据某种关系将对象分类到不同的桶中,这样,桶中某个物体的存在预示着另一个物体也存在。比如类似于“买了xxx的人也买了yyy”这样的推荐问题:如果对大量的购物车进行分析,则可以看出,购物车中商品xxx的存在很有可能暗示着产品yyy也在购物车中,那么,你可以立即向将产品xxx放入购物车的人推荐产品yyy。

  • 异常检测在需要标记和处理的数据中识别意外模式。标准的应用范围包括了对复杂系统的欺诈检测和健康监测。

3. 半监督学习

这是监督学习和无监督学习混合的结果,在这种“学习”中,算法需要一些训练数据,但是比监督学习的要少很多(可能要差一个数量级)。其算法可以是在监督学习和无监督学习中使用的方法的扩展:分类、回归、聚类、异常检测等等。

4. 强化学习

算法以有限的数据集开始,在学习的同时,还可以获得更多关于其预测的反馈信息,以进一步改善学习效果。

正如你所看到的,除了要解决的问题类型外,你所拥有的数据量也会影响到你所能使用的学习方法。这也适用于另一种方式:你需要使用的学习方法可能需要比你现在拥有的更多的数据,这样才能有效地解决你的问题。我们稍后再讨论这个。

其他常见的“流行语”

在你的工作中,还会遇到其他一些术语。了解他们与我们今天谈论到的类别之间的关系很重要。

深度学习与上面的那些定义并没有什么关系。它只是应用特定类型的系统来解决学习问题,其解决方案可以是监督的,也可以是无监督的,等等。

人工神经网络(ANN)是一种学习系统,它试图通过不同层上的“神经”网络来模拟我们大脑的工作方式。神经网络至少有一个输入层(即数据被摄入网络的一组神经元),一个输出层(将结果传递出来的神经元)以及两者之间的一个或多个层,称为“隐藏层”(真正做计算工作的层)。深度学习只是使用具有多个隐藏层的神经网络来完成学习任务。如果你曾经使用过这样的网络,恭喜你,你也可以合理地扔掉这个时髦术语了!

集合方法或**综合学习**是使用多个模型来获得结果,这样比利用单个模型获得的结果要更好。这些模型可以采用不同的算法,或是使用不同参数的相同算法。比如,对于某种类型的预测,你有一组模型,每一个模型都能产生一个预测,有一些处理方法能够平衡不同的预测结果,并决定应该输出什么样的组合。集合方法通常用于监督学习(它们在预测问题中非常有用),但也可以用于无监督学习。你的数据科学团队可能会测试这些方法,并在适当的时候使用它们。

自然语言处理(NLP)是计算机科学领域的一门研究机器理解语言的学科。不是所有类型的NLP都使用机器学习。例如,如果我们生成一个“标签云”(一个词出现在文本中的次数的视觉表示法),这就不涉及学习。对语言和文字的更加复杂的分析和理解往往需要机器学习。这里有一些例子:

  • 关键字生成。理解正文的主题并自动为其创建关键字。

  • 语言歧义。从一个词或一句句子的多种可能的解释中确定相关的含义。

  • 情绪分析理解在文字中表达出来的情绪的积极或者消极的程度。

  • 命名实体提取在文本中识别公司、人员、地点、品牌等等;当这些名称并不特殊时,要提取出来就会特别困难(例如,公司“微软”比公司“目标”更容易识别,因为“目标”是英文中的一个单字)。

NLP不仅用于机器学习领域里面向语言的应用,例如chatbots,它也被广泛用于准备和预处理数据,这样,这些数据才能成为许多机器学习模型的有用输入。我们稍后在讨论这个。

问题如何影响解决方案(另外还有一些关键的机器学习概念)

用机器学习来实现的战略目标将决定许多下游决策。为了确保你的数据科学团队能为业务生成正确的解决方案,了解一些基本的机器学习概念及其对业务目标的影响是非常重要的。

算法的选择

在问题定义上的一个小变动可能需要有一个完全不同的算法来解决,或者至少要使用不同的数据输入来构建不同的模型。一个能够为用户识别照片类型的约会网站可以使用无监督学习技术(比如聚类)来识别常见的主题。而如果要向特定的某个人推荐潜在的约会对象,则网站可能要使用基于输入的监督学习,输入数据需具体到个人,例如他们已经看过的照片。

特征的选择

机器学习模型识别数据中的模式。输入到模型中的数据被组织成特征(也称为变量或属性):这些特征都是相关的、大部分独立的数据片段,描述了你想要预测或识别的现象的某些方面。

以前文提到的那家希望优先考虑贷款申请人外展服务的公司为例。如果我们将问题定义为“根据客户转换的可能性优先考虑”,我们将会得到包括类似客户对公司各种外展活动的响应率等特征。如果我们将问题定义为“优先考虑最可能偿还贷款的客户”,我们就不会得到这些特征,因为它们与评估客户的可能性无关。

目标函数的选择

目标函数是你要优化的目标,或者是模型试图预测的结果。例如,如果你向用户推荐他们可能感兴趣的商品,则模型的输出可能是用户在看到商品时点击该商品的概率,也可能是用户购买商品的概率。目标函数的选择主要取决于业务目标,在这个例子中,你对用户的参与感兴趣(目标函数可能是点击或停留的时间)还是对营业收入感兴趣(目标函数是购买)?另一个要考虑的关键因素是数据的可用性:对于要学习的算法,你必须提供大量“标记”为正(用户看到并点击的产品)或负(用户看到的产品,但没有点击)的数据点。

二、如何开发机器学习模型?

 创建一个优秀的机器学习模型跟创建其他产品是一样的:首先从构思开始,把要解决的问题和一些潜在的解决方案放在一起考虑。一旦有了明确的方向,就可以对解决方案进行原型化,然后对它进行测试以确定是否满足需求,不妨看看本文是如何一步一步实现的。

建模步骤一览

从较高的层次上来讲,创建一个优秀的机器学习模型跟创建其他任何产品是一样的:首先从构思开始,把要解决的问题和一些潜在的解决方案放在一起考虑。一旦有了明确的方向,就可以对解决方案进行原型化,然后对它进行测试以确定是否满足需求。你需要在构思、原型设计和测试之间不断地迭代,直到你的解决方案足够好,并能够投入市场,此时你就可以将其产品化,并发布出去。现在,我们来看看每个阶段的细节吧。

由于数据是机器学习的重要组成部分,因此我们需要在产品开发过程之上进行数据分层,因此我们的流程如下所示:

  • 构思。让待解决的关键问题和针对解决方案的潜在数据输入保持一致。

  • 数据准备。以一种有用的格式收集和获取数据,以便对模型进行理解和学习。

  • 原型与测试。建立一个或一组模型来解决问题,测试它们执行和迭代的程度,直到有一个模型能得到令人满意的结果。

  • 产品化。让模型以及数据收集与处理稳定化、规模化,以便在生产环境中生成有用的输出。

构思

这个阶段的目标是要让模型解决的关键问题、目标函数和潜在的输入作为一个整体与模型保持一致。

  • 与问题保持一致。如前所述,机器学习可用于解决真正的业务问题。请确保你的团队和公司中的所有利益相关者就你正在解决的问题以及如何使用解决方案达成一致。

  • 选择目标函数。待解决的问题决定了模型的目标是什么。模型试图预测的目标函数是什么?你是否在查找数据中的模式?例如,将照片集按照某种特征分成多个组。

  • 定义质量指标。你如何衡量模型的质量?在没有看到真正结果的时候,一般很难预见可接受的质量,但目标的定向性对此是有帮助的。

  • 集思广益所有可能的输入。你的目标是确定哪些数据可以帮你解决问题或者做出决定。最有帮助的问题是:“专家会如何处理这个问题”。考虑一下解决方案将以什么样的变量或者数据为基础。每一个可能影响人类判断的因素是否都应该测试。请尽可能广泛地搜集这些问题的答案。了解关键因素可能需要有商业方面专业的知识,这是企业或者产品人员需要在此阶段中频繁参与的重要原因之一。数据团队将不得不将这些潜在的输入转化为模型特征。请注意,为了将输入转换为特征,可能需要额外的处理,后面我们会详细讨论这个。

数据准备

本阶段的目标是收集原始数据,并将其作为原型模型的输入。你可能需要对原始数据进行复杂的转换才能使其成为输入数据。例如,假设你的某个特征是消费者对品牌的看法:你首先需要找到消费者谈论品牌的相关来源。如果品牌名称包括常用词(例如“苹果”),则需要将品牌名称与一般情况下的含义(与水果有关)区分开来,然后再通过观点分析模型来运行,所有这些都要在构建原型之前完成。并非所有的特征构建起来都很复杂,但有些可能需要耗费大量的工作。

让我们来更详细地了解一下这个阶段需要做什么:

  • 以最快的速度收集数据。首先,确定缺少了哪些数据。在某些情况下,你可能需要对必要的输入分解到“构建块”级别,或者是到代理级别,这样才能更方便地获取到数据。一旦确定下来缺少哪些数据,就要以最快捷、最简单的方法去获取。对于不可扩展的方法,比如手工下载或购买数据样本,即使代价有点高但可能却是最实际的方法。在这个阶段采集太多的数据通常没有太大的意义,因为你不了解数据是否有用,哪种格式最好,等等。商业人士应该参与到这个阶段中来,因为他们可以协助数据专家们从大量的渠道获取到原本不太容易获取的数据。请注意,在监督学习算法中,你不仅需要用于模型特征的数据,你还需要为模型的目标函数提供数据点,以进行训练、验证以及测试模型。回到房价那个例子,为了建立一个预测房价的模型,你需要一些包含房价的房屋信息!


  • 数据清洗与规范化。在这个阶段中,数据科学或工程团队将承担起主要的工作职责。他们将投入大部分的精力把构思和原始数据转化为实际的模型。数据集需要进行检查和清洗,以避免使用不良数据以及不相关的异常值等等。同时,数据还可能会以不同的比例进行转换,以使其更容易地与其他数据集一致,并能一起使用。特别是在处理文字和图像的时候,通常需要对数据进行预处理,以提取相关的信息。例如,将太多太大的图像插入模型可能会导致信息过量而无法处理,因此你可能需要降低图片的质量、使用图像的其中一部分或仅使用对象轮廓。对于文本,你可能需要检测与文本相关的实体,进行观点分析,查找常用的n-gram(经常用于表示一定数量单词的序列)或执行各种其他的转换。这些通常可由现成的库来实现,无需重新发明轮子。

原型与测试

这个阶段的目标是获得一个模型的原型,测试并对它进行迭代,直到能够得到一个足够好并且能够用于生产的的模型。

  • 构建原型。一旦数据准备完毕,数据科学团队就可以开始研究实际的模型了。这个阶段涉及到大量的实验,比如选择最相关的特征、测试多种算法等。这并不是一个简单的任务,获得用于生产模型在时间计划上并不好把控。

  • 验证和测试原型。在这个阶段中,数据科学家的职责就是要确保最终生成的模型尽可能的好。他们将根据预定义的质量度量标准来评估模型的性能,比较不同算法下模型的性能,调整各种参数并对最终的模型进行性能测试。对于监督学习,需要确定模型预测的结果是否能够满足你的需求。对于无监督学习,根据问题的不同,有多种不同的性能评估技术。以聚类为例,你可以轻松地绘制出在多个维度上聚类的对象。如果算法使用了关键字来标记文档,那么关键字是否有意义呢?在打标记失败或重要用例丢失的情况下,是否有明显的差距呢?这并不能代替更加科学的方法,但在实践上有助于快速改进。

  • 迭代。此时,你需要与团队一起来决定是否需要进一步的迭代。该模型与你的预期有多少相符?它是否表现得足够好,让你目前的业务状况得到显著的改善?是否有特别薄弱的方面?是否需要更多的数据点?你能想到其他特征来提高性能吗?是否有替代数据源可以提高模型的输入质量?等等。这些都需要集思广益。

产品化

当原型模型能够很好地解决业务问题,并能进入生产的时候,你就来到了这个阶段。请注意,如果尚未准备好进行全面的产品化,你需要首先确定模型要扩展的比例。比如说,对于一个电影推荐工具:你可能是先对少数用户提供推荐服务,但要为每个用户提供完整的使用体验,在这种情况下,模型就要根据每个用户的相关性对数据库中的每个电影进行排序。与仅推荐动作电影相比,这是另一个不同的扩展要求。

现在,我们来探讨一下有关将模型生产化的更多的技术细节:

  • 增加数据覆盖率。在很多情况下,你可以用比生产中更少更有限的数据来构建原型。例如,你可以根据特定客户来构建原型,然后将其扩展到整个客户群。

  • 扩展数据收集。一旦验证了哪些数据对模型有用,你需要构建一种可扩展的方式来收集和获取数据。在原型设计阶段,以手动方式来收集数据还是可以的,但是对于生产,你应该尽可能地自动化。

  • 刷新数据。创建一个随时间刷新数据的机制,以更新现有值或添加新信息。除非由于某种原因不能保留历史数据,否则系统应该要以某种方式来持续积累更多的数据。

  • 扩展模型。这个包含了数据科学和工程学两个方面的内容。从数据科学的角度来讲,如果你更改了基础数据,例如扩大了客户群的数量,就需要重新训练和测试模型。在特定数据集上工作良好的模型并不一定能适用于更广泛或其他不同的数据集。从架构上来讲,模型需要能够在数据不断增长的基础上及时扩展以进行更频繁地运行。在电影推荐示例中,可能会有更多的用户、更多的电影以及有关每个用户喜好的更多信息。

  • 检查特殊值。虽然模型也许在整体上可以很好地扩展,但在某些很小但很重要的情况下可能就无法正常工作了。例如,电影推荐的平均使用效果可能还不错,但对于家长来说,如果他们用自己的账号为孩子选择了电影,那么推荐系统就会显示儿童电影。这是一个产品设计问题,你需要在产品中将父母自己的建议与为孩子的建议分开来,但是,这并不是模型可以告诉你的。

到目前为止,我所描述的是一个概念性的流程。在现实中,界限一般比较模糊,你经常需要在不同阶段之间来回走动。你可能会对数据的供给不满意,从而考虑重来,或者在模型产品化之后,你发现模型并不能很好的工作,你不得不退回去重新构建原型。


搜索公众号添加: datayx  

不断更新资源

深度学习、机器学习、数据分析、python

长按图片,识别二维码,点关注


微商 这么营销才赚钱

作者:深圳市马帮云商科技服务有限公司 编

当当 广告
购买



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/iicqnZAcMS
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/13957
 
492 次点击