精华内容
下载资源
问答
  • 机器学习过程

    千次阅读 2019-04-18 08:26:22
    机器学习不仅仅是一种简单的算法,还可以将其放在其他任何地方以获得奇妙的结果。...机器学习的过程从定义一个商业问题开始。机器学习的需求是什么?这个任务真的需要高级的预测算法来解决吗? 问题定义...

    https://www.toutiao.com/a6680712064157090315/

     

    机器学习不仅仅是一种简单的算法,还可以将其放在其他任何地方以获得奇妙的结果。机器学习是一个从定义数据开始,最终获得一定准确率的模型的过程。在本节中,我们将学习这个过程。

    1.问题定义

    机器学习的过程从定义一个商业问题开始。机器学习的需求是什么?这个任务真的需要高级的预测算法来解决吗?

    问题定义是非常重要的,它提供了更正式地思考解决方案的方向。它基本上处理两个问题。

    A.问题是什么?

    这个问题涵盖了问题的定义,并使问题变得更加正式。假设我们想要确认图像中是否包含人。

    现在定义这个任务,将其分为任务(T)、经验(E)和性能(P)。

    • 任务(T):根据图像中是否包含人对图像进行分类。经验(E):带有是否包含人的标签的图像。性能(P):错误率。在所有的分类图像中,错误预测的百分比是多少。错误率越低,准确率越高。

    B.为什么这个问题需要解决方案?

    这个问题更侧重于商业方面,它包括解决问题的动机和益处。

    假如你是一个研究者,希望解决某个问题并发表论文,使之成为他人解决问题的基准,这可能就是你的动机。

    关于你的问题其他需要确定的是,在没有安全措施的情况下,夜间在银行的自动取款机上是否有人类活动(假设所要解决的问题与自动取款机的安全有关)。

    还需要定义可以使用此解决方案的场景。这是一个通用型的解决方案,还是为特定任务(ATM传感器中的检测人员)所设计的呢?解决方案的失效日期是什么时候(它是终身的还是在特定的期限内)?

    2.数据采集

    在定义问题之后,开始进行数据采集。收集数据有多种不同的方式,如果想把评论与评级联系起来,就要从抓取网站开始。为了分析Twitter数据并将其与情感联系起来,就要从Twitter提供的API入手,收集标签数据或者与某个公司相关联的数据。市场调查人员通过创建不同的调查表格,并将其放在网站上来收集数据。对于像Amazon、 Facebook这样拥有众多用户的公司,其数据是巨大的,而根据问题的不同,还需要收集数据和标签。假设要建立一个新闻分类器,将新闻划分为体育新闻、市场新闻和政治新闻。因此,收集到的每一条新闻都需要一个与之相关的标签,通过这些数据可以构造机器学习的分类器。

    正确的数据是解决机器学习问题的关键。即使是基本算法,高质量的数据也会产生令人满意的结果。

    3.数据准备

    在采集数据之后,需要专注于数据准备。收集的数据要准备成机器学习算法所能使用的格式。算法不是魔术表演,数据必须以正确的形式输入到机器学习算法中才能获得结果。根据算法库的不同,算法可以适应不同类型的输入格式。

    数据准备是从数据选择开始的,并不是收集到的每个数据都对问题的解决有帮助。假设你正在分析服务器上的日志,在每个用户活动之后会生成许多与系统相关的信息,如果正在预测的是营销活动的市场反应,那么这个日志可能就不起作用了。所以,基于所要解决的问题,应将无关数据从之后的操作中删除。

    在更高层次的基础上识别数据后,需要对数据进行转换或预处理,使之能更好地应用于机器学习算法。以下是数据预处理过程中的一些过程。

    • 清理(Cleaning):数据可能含有需要移除的错误。假设数据中缺少某些属性的数值,由于目前并没有适合的算法能够处理值缺失问题,因此可以用一些值(数值的均值/中值和分类值的默认值)代替缺失值。如果数据包含敏感信息,如电子邮件的ID和用户的联系号码,则需要在与团队共享数据之前删除数据中的敏感信息。格式化(Formatting):算法需要预定义格式的数据。基于Python机器学习库的要求,采用Python列表的形式表示数据。一些实时的机器学习库使用的是JSON格式的数据,而Excel文件使用CSV格式的数据。根据使用工具或技术的不同,需要对数据进行格式化,使其满足使用工具或技术对数据格式的要求。采样(Sampling):并非所有的数据都是有用的。一些在模型中存储数据的算法很难实时生成预测,可以从数据中删除类似的实例。如果是分类模型,可以按照标签进行等比例采样。分解(Decomposition):分解会使得一些特征更加有用。以数据库中的日期属性为例,可以把日期分解成日、月、年,还可以创建诸如周末或工作日、季度、闰年或日期等特征,使其在预测中更有用。缩放(Scaling):不同的属性遵循不同的单位和值。假设通常以厘米为单位测量一个人的身高,而对于一些数据,可能是以英寸为单位。所以,需要先将其换算成厘米。另外,一个属性的高/低值可能会影响到其他属性。例如有3个特征,如人的年龄、体重和年收入,现在希望根据它们预测医疗保险计划。如果直接使用这些数据,模型将高度依赖于工资,因为工资的数值远远高于其他属性的值。所以,需要对每个属性的值进行缩放,调整为[0,1]或[-1,1 ]。

    这个过程也称为特征处理(Feature Processing),它包括特征选择、预处理以及将其转换为对于机器学习算法有益处的格式。

    4.数据分割——训练数据和测试数据

    机器学习算法的目标是对未知的新数据进行预测。我们使用训练数据来建立模型。在训练数据时,算法将逐渐减少训练的误差。但是,不能将训练数据的准确率(Accuracy)视为广义的准确率,其原因在于该算法可能会记住实例并对其进行相应的分类。所以,为了评估生成的模型,需要将数据分为训练数据和测试数据。利用训练数据进行算法训练,利用测试数据来计算生成模型的最终准确率。测试数据并不参与算法训练。

    一般将60%~80%的数据作为训练数据,剩余的部分作为测试数据。所以,在测试数据中获得最好结果的模型可以作为目标模型。

    5.算法选择

    我们从一组机器学习算法开始,并将训练数据的特征应用到算法中,算法选择依赖于问题的定义。如果从电子邮件中收集数据,并将邮件分为垃圾邮件或非垃圾邮件,则这时所需要的算法是在输入变量后输出相应的结果(垃圾邮件或者非垃圾邮件),这类算法称为分类(Classification)算法(如决策树、朴素贝叶斯、神经网络等)。如果想预测某一任意连续变量(如预测即将到来的季度销售量),则使用回归(Regression)算法(如线性回归、核回归等)。如果所解决的问题并没有相关的任何输出或反应,则可以使用聚类(Clustering)算法,根据它们的特性对其分组。每种类别中都有大量的算法,我们将在后续的章节中给出示例。

    6.算法训练

    在选择算法之后,开始训练模型。训练模型是在训练数据集上进行的,大多数算法的权值/参数在训练开始时都是随机分配的,并在每次迭代中加以改进。算法训练过程中,在训练数据集上多次运行以产生结果,如图1.1所示。例如,在线性回归的情况下,算法在开始时随机放置分离线,在每次迭代之后不断地改进自身(也就是移动分离线)。

    机器学习过程

     

    图1.1

    7.测试数据评估

    利用训练数据生成最佳算法后,在测试数据集上对算法的性能进行评估。测试数据集并不能参与算法训练,因此测试数据并不能影响算法的决策。

    8.参数调整

    在选择正确的算法后,可以尝试对其进行改进以获得更好的性能。每个算法都有不同的参数设置方式,可以对其进行配置从而更改算法性能,这称为参数调整(Parameter Tuning)。例如可以改变算法学习的速率(学习率)来提高算法性能,这些参数称为超参数(Hyper Parameter)。对于机器学习来说,参数调整更像是一门艺术。

    9.模型使用

    上述所有步骤完成之后,就可以获得在训练集上训练生成,并在测试集上完成评估的模型。现在可以使用这个模型来预测新数据的值。对于生产环境,可以将模型部署到服务器,并通过API接口使用模型的预测功能。当然,这个模型并不总一样的,每当获得新数据时,都要将上面所列出的步骤重新进行一遍,以改进模型的性能。

    因此,在机器学习中,从问题开始,最后以一个解决问题的预测算法结束。

    通过下面的问题,我们开始尝试了解机器学习算法是如何解决问题的。

    假设你需要购买一栋房子,现在开始查看市场上正在出售的房屋,并据此核对你的预算。你对将要购买的房子有多个要求,首先就是房子的面积。

    在图1.2的情景中,你先考查了一栋600平方英尺(约56m2)的房子,价格是220 000英镑(约1 942 578元)。这个房子的确很不错,但是它并不满足你的要求——你将和你的家人一同居住,而这个房子面积太小,并不能让每个人都住得舒适。所以,你继续研究并找到一栋1700平方英尺(约158m2)的房子,价格是730 000英镑(约6 445 827元)。这个房子满足你的要求,但是它的价格有些超出你现在的预算——你的预算与小面积房子的价格相比要高一些,但也不像大房子的价格那么高。然而,只有当你与业主或代理人见面并提交详细资料后,才能得到房子的实际价格。但是你并不想与每一个业主或者代理人见面。

    机器学习过程

     

    图1.2

    在二维(2D)平面上分析一下你所考查的两个属性,如图1.3所示。

    机器学习过程

     

    图1.3

    现在,你在城市里闲逛,找到一栋面积在这两栋房子之间的房子。

    这栋新房子的面积大约有1 250平方英尺(约116m2),但你还不知道价格。所以,你想预测房子的价格,看其是否符合预算和要求。

    将新房子的信息放在同一个二维平面上,试着预测这个房子的价格,如图1.4所示。

    机器学习过程

     

    图1.4

    为了预测房屋的价格,将设置一条符合已知结果(即房屋价格和房屋面积)的直线,这里得到了如图1.5所示的一条直线。

    机器学习过程

     

    图1.5

    通过这条直线,可以预测出1250平方英尺(约116m2)的房子的价格是475 000英镑(约4 194 202.5元)。所以,我们得到了一条根据房子面积来预测房子价格的直线,这种技术称为线性回归(Linear Regression)。可以把这种技术理解为在现有数据点上寻找最佳直线。

    比如,计算3个点到直线距离之和的最小值。首先,随机选择一条线,直线上方有A、B、C共3个点,如图1.6所示。

    机器学习过程

     

    图1.6

    然后,计算每个点到直线的距离,如图1.7所示。

    机器学习过程

     

    图1.7

    可以得到总距离是a+b+c。现在,移动直线的位置(向下移动)并再次计算点到直线的距离,如图1.8所示。

    机器学习过程

     

    图1.8

    改变了线的位置,但总距离a+b+c增加了。显然,这不是我们想要的结果。让我们将直线朝另一个方向(向上移动)移动,如图1.9所示。

    机器学习过程

     

    图1.9

    这条直线(见图1.9)比第一条直线(见图1.7)要更符合要求。现在移动这条线,并试着重复进行同样的步骤。最终通过这种方式结束直线的选择,从而确定直线位置,如图1.10所示。

    机器学习过程

     

    图1.10

    对于给定的3个点(A、 B、 C)来说,图1.10所示的直线是最符合条件的。在这里取3个点到直线的非负距离,找到这条线的方法称为梯度下降法。

    有时在所有数据点上拟合一条直线并没有多大意义。现在思考图1.11所示的点集。

    机器学习过程

     

    图1.11

    如果尝试使用线性回归技术来拟合一条直线,它看起来如图1.12所示。

    机器学习过程

     

    图1.12

    很明显,这条线不适合用来预测。相反,可以用图1.13所示的曲线来对数据建模。

    机器学习过程

     

    图1.13

    这就是所谓的多项式回归(Polynomial Regression) —— 因为其参数是多项式。

    再来看另一个例子,例如有一个售鞋网站,其中包含来自不同公司的各种鞋子,可以通过其网上商店订购鞋子。鞋子成功交付后,公司将发送电子邮件获取顾客的反馈。顾客在评论区内留言,其中有些评论是正面的,有些评论则是负面的。

    该公司每天销售数千双鞋,需要跟踪每一个评论并采取相应的行动。如果顾客评论说鞋子质量不佳,则需向生产商询问有关产品的质量问题;有些鞋子反响很好,则最好将它们放在网站的首页。

    为了解决这个问题,首先需要从一组顾客评论开始,将每个评论分为负面评论或者正面评论,下面给出部分示例。

    正面评论

    A1:质量不错!我很喜欢这双鞋子。

    A2:非常好的产品。

    A3:给我爸爸买的,他很喜欢。

    负面评论

    B1:材质不好,不适合。

    B2:很不喜欢这个产品,包装也很不好。

    B3:千万不要买这个产品。

    分析示例中的正面评论和负面评论,会发现,如果评论中包含“喜欢”这个词,那么它更可能是一个正面评论。因此,创建这条规则并检查所有数据集,会发现60%的正面评论中包含“喜欢”这个词;另一方面,只有10%的负面评论中包含“喜欢”这个词。

    同样,其他词语所占的比例如表1.1所示。

    机器学习过程

     

    因此,对于将来可能获得的评论,根据其所包含的词的复合概率,可以判定该评论是正面评论还是负面评论,这就是朴素贝叶斯分类器(Naïve Bayes Classifier)。

    再列举一个向不同的人推荐杂志的例子。假设已经记录了用户的年龄、性别、位置以及他们阅读的杂志类型,表1.2所列为记录的数据。

    机器学习过程

     

    现在,通过对这些数据进行观察,可以发现小于15岁的人喜欢阅读儿童杂志。根据其制作一个节点和它的决策,如图1.14所示。每个圆节点表示决策节点,图的边缘(箭头)则表示相应的决策,每个矩形节点表示通过图分支之后采取的决策。

    机器学习过程

     

    图1.14

    因此,可以说每个年龄小于或等于15岁的人都有可能阅读儿童杂志。现在再来处理大于15岁的读者的分支。

    现在,第二个观察特征是男性,他们喜欢阅读政治杂志。为其创建相同的决策节点和分支,如图1.15所示。

    机器学习过程

     

    图1.15

    接下来,需要看一下年龄在15岁以上的女性的选择。还有一个信息可以利用——地区。因此,可以说,来自美国的女性喜欢阅读体育杂志,而其他地区的女性则喜欢商业杂志。在这里形成的节点如图1.16所示。

    机器学习过程

     

    图1.16

    正确地对每个数据点进行分类,这个过程中形成了决策树。可能存在多种创建决策树的方法。根据现有的数据,这些方法可以做出正确的预测。

    图1.17所示的这棵树对数据进行了准确的分类。

    机器学习过程

     

    图1.17

    再来举另一个例子,有几个人每年申请贷款,银行根据他们的收入和贷款额从而决定是否对其提供贷款,目标是向那些在规定时间内偿还债务,且没有任何违约的人提供贷款。

    如果一个人月收入是20 000美元,他申请了100 000美元的贷款,银行根据他的收入来源可以批准贷款;如果一个人月收入是3 000美元,他申请了600 000美元的贷款,则银行可能会早早地拒绝他。

    因此,银行基于以往违约者的历史创建了一个数据,如图1.18所示。红点表示银行拒绝受理的申请,绿点表示银行批准的申请。横坐标是请求的贷款额度,纵坐标是月收入。

    机器学习过程

     

    图1.18

    现在,一个月收入10 000美元的人想要贷款300 000美元,银行是否会给予批准呢?可以通过一条直线来分割数据,如图1.19所示。

    机器学习过程

     

    图1.19

    根据上面的直线,可以预测银行将同意月薪20 000美元的人申请300 000美元的贷款申请。

    现在,已经有一条合适的直线来分割现有的数据点。我们使用的算法(梯度下降法)与在线性回归过程中使用的算法相同。在这里,目标变量是类别而不是在线性回归情况下连续的预测值,这种技术称为逻辑回归(Logistics Regression)。

    现在,银行来了一位新的经理,他要检查所有记录,他认为银行批准或拒绝贷款申请的参数是荒谬的,一些像10 000美元或20 000美元的贷款申请并没有风险,银行可以同意这部分贷款申请。所以,他改变了规则和数据,如图1.20所示。

    机器学习过程

     

    图1.20

    显然,仅仅使用一条直线并不能将红点和绿点分开,既然这样,那使用两条直线呢?如图1.21所示。

    机器学习过程

     

    图1.21

    与一条直线相比,使用两条直线可以将红点和绿点分开。这种技术被称为神经网络(Neural Network)。神经网络是基于大脑中的神经元的概念提出的。大脑中的神经元收集信息并将其传递给其他神经元。简单来说,就是基于先前神经元的输入,下一个神经元接收要求并决定输出,它还将信息传递给其他神经元。最后,通过处理不同的神经元,大脑做出决定。

    这个概念可以用下面的模型(见图1.22)来理解。在这个模型中,两个神经元通过使用不同的假设建立模型,并且将它们的发现发送给另一个神经元。根据收集到的信息,输出神经元做出决策。

    机器学习过程

     

    图1.22

    在处理数据时,对于一条分割数据点的直线,可能有不同的选择。如图1.23所示的两个例子。

    机器学习过程

     

    图1.23

    与直线1相比,直线2的边距更大,其在分割数据方面似乎更好,如图1.24所示。

    机器学习过程

     

    图1.24

    现在我们要寻找最佳分割路线,而梯度下降并不能解决这个问题,需要线性优化才能实现。这种技术被称为最大间隔分类器或支持向量机(Support Vector Machine, SVM)。

    在现实世界中,数据并不能完全分割开。它可能会如图1.25所示的那样。

    机器学习过程

     

    图1.25

    所以,不能通过一条直线就把红点和绿点分开。但是如果通过一个平面来区分红点和绿点,就可以用一个分类器对它们进行分类。创建一个新的维度并用这个平面来分割红点和绿点,如图1.26所示。

    机器学习过程

     

    图1.26

    现在使用一个新的维度将红点和绿点分开。这种技术被称为核函数(Kernel Trick)。

    真实的数据非常复杂,而且有很多维度。带有支持向量机分类器的核函数可以用来解决这些复杂的问题。

    现在来看另一个问题。如图1.27所示,有一家杂货店A2A。他们提供电话送货服务,每当接到电话时,他们就会将地址发送给派送员,派送员会赶赴送货地点并交付商品。他们设法将办公室设在城市的中心,以便为越来越多的人及时提供服务。

    机器学习过程

     

    图1.27

    这里的点代表A2A的服务需求。现在他们意识到,这种一个配送中心处理所有的需求的做法并不明智。于是,他们决定在城市中开设4个配送中心,依照不同地区来接受需求并提供服务。

    因此,为了解决这个问题,首先可以随机地添加4个配送中心并给予其商品派送需求,如图1.28所示。

    机器学习过程

     

    图1.28

    显然,这不是配送中心的最佳分配位置。接下来,将每个点移动到分类点的中心。然后,将所有点分类到最近的配送中心,并将配送中心的位置移动到之前的分类中心。经过多次迭代,将得到图1.29所示的分配位置。

    机器学习过程

     

    图1.29

    因此,每个点的分配都是基于点到中心的距离。这种技术称为K-均值聚类(K-Means Clustering)。

    也可以使用另一种方法进行聚类。把所有的点看作是独立的集群,而不是首先将它们分组到集群中再对其进行重新分配。然后,将两个最近的点进行分组,形成一个簇。一直这样操作,直到出现较大的距离或者形成最小数量的簇。这种技术称为层聚类(Hierarchical Clustering)。

    在这一章中,列举了许多日常生活中机器学习的例子。本书将详细地介绍这里提到的每一个技术并用Python编写代码实现,同时也将涉及一些先进技术。

    本文摘自

    《Python机器学习》([印]阿布舍克·维贾亚瓦吉亚(Abhishek,Vijayvargia))

    机器学习过程

     

    《Python机器学习》通过解释数学原理和展示编程示例对机器学习进行了系统、全面的解析。《Python机器学习》共分为12章,内容涵盖了机器学习以及Python语言的基础知识、特征工程的概念与操作技术、数据可视化技术的实现、监督学习及无监督学习算法、文本分析、神经网络和深度学习、推荐系统的构建方法以及预测处理时间序列的方法等。阅读《Python机器学习》能够加深读者对机器学习的认识和理解,从而达到理论与实践相结合、学以致用的目的。

    《Python机器学习》适合Python程序员、数据分析人员、对机器学习感兴趣的读者以及机器学习领域的从业人员阅读。

    展开全文
  • 机器学习1-机器学习中建模过程

    万次阅读 多人点赞 2018-05-30 09:00:49
    机器学习中建模过程 数据处理 特征工程 模型选择 寻找最佳超参数 模型分析与模型融合 1.数据处理 1.1机器学习中使用数据原则 属性值和属性名称应该具有实际意义。 去除属性中相关度高属性 ...

    机器学习中建模过程

    • 数据处理
    • 特征工程
    • 模型选择
    • 寻找最佳超参数
    • 模型分析与模型融合

    1.数据处理

    1.1机器学习中使用的数据的原则

    • 属性的值和属性的名称应该具有实际的意义。
    • 去除属性中相关度高的属性
    • 去除对结果影响不大的属性
    • 合理选择关联字段

    1.2常见的数据预处理方法

    • 数据清洗:数据清洗的目的不仅仅是清除错误点,冗余点和数据的噪声,还要将数据按照一定的规则进行统一处理。
    • 数据集成:将多个数据源中的数据进行合并,形成一个统一的表格。如果数据量比较多,则存储于数据仓库中;若数据亮不大,则存储于文件中,常用的数据文件存储格式为:csv,json等等。
    • 数据变化:找到数据的特征表示,用维度变换来减少有效的数据,包括:规格化,规约和投影等操作
    • 数据规约:是在对发现任务和数据本身内容理解的基础上,寻找依赖于发现目标的表达数据的有用特征,以缩减数据模型,从而在尽可能保持数据原貌的前提下最大限度的精简数据量,主要有两个途径:属性选择和数据抽样,分别针对数据库中的属性和记录

    1.3数据清洗

    1.3.1缺失值的处理

    • 删除法:根据数据处理的不同角度,删除法可分为以下4种
      • 删除观测样本
      • 删除变量:当某个变量缺失值较多且对研究目标影响不大时,可以将整个变量整体删除。
      • 使用完整原始数据分析:当数据存在较多缺失而其原始数据完整时,可以使用原始数据替代现有数据进行分析;
      • 改变权重:当删除缺失数据会改变数据结构时,通过对完整数据按照不同的权重进行加工,可以降低删除数据带来的偏差
    • 插补法:在条件允许的情况下,找到缺失值的替代值进行插补,尽可能还原真实数据是更好的方法。常见的方法有均值插补、回归插补、二阶插补、热平台、冷平台等单一变量插补。
      • 均值法是通过计算缺失值所在变量所有非缺失观测值的均值,使用均值来代替缺失值的插补方法。
      • 均值法不能利用相关变量信息,因此会存在一定偏差,而回归模型是将需要插补变量作为因变量,其他相关变量作为自变量,通过建立回归模型预测出因变量的值对缺失变量进行插补
      • 热平台插补是指在非缺失数据集中找到一个与缺失值所在样本相似的样本(匹配样本),利用其中的观测值对缺失值进行插补。
      • 在实际操作中,尤其当变量数量很多时,通常很难找到与需要插补样本完全相同的样本,此时可以按照某些变量将数据分层,在层中对缺失值使用均值插补,即采取冷平台插补法。

    1.3.2噪声数据的处理: 噪声是一个测量变量中的随机错误和偏差,包括错误值或偏离期望的孤立点值

    • 噪声检查中比较常见的方法:
      • 通过寻找数据集中与其他观测值及均值差距最大的点作为异常
      • 聚类方法检测,将类似的取值组织成“群”或“簇”,落在“簇”集合之外的值被视为离群点。
    • 在进行噪声检查后,通常采用分箱、聚类、回归、计算机检查和人工检查结合等方法“光滑”数据,去掉数据中的噪声
      • 分箱:分箱方法是一种简单常用的预处理方法,通过考察相邻数据来确定最终值。所谓“分箱”,实际上就是按照属性值划分的子区间,如果一个属性值处于某个子区间范围内,就称把该属性值放进这个子区间所代表的“箱子”内。把待处理的数据(某列属性值)按照一定的规则放进一些箱子中,考察每一个箱子中的数据,采用某种方法分别对各个箱子中的数据进行处理。在采用分箱技术时,需要确定的两个主要问题就是:如何分箱以及如何对每个箱子中的数据进行平滑处理。

    1.3.3噪声数据的处理: 分箱的方法:有4种:等深分箱法、等宽分箱法、最小熵法和用户自定义区间法。

    • 等深分箱法(统一权重):将数据集按记录行数分箱,每箱具有相同的记录数,每箱记录数称为箱子的深度。这是最简单的一种分箱方法。

      箱1:800 1000 1200 1500
      箱2:1500 1800 2000 2300 
      箱3:2500 2800 3000 3500
      箱4:4000 4500 4800 5000
      
    • 等宽分箱法(统一区间):使数据集在整个属性值的区间上平均分布,即每个箱的区间范围是一个常量,称为箱子宽度。

      箱1:800 1000 1200 1500 1500 1800
      箱2:2000 2300 2500 2800 3000
      箱3:3500 4000 4500
      箱4:4800 5000 
      
    • 用户自定义区间:用户可以根据需要自定义区间,当用户明确希望观察某些区间范围内的数据分布时,使用这种方法可以方便地帮助用户达到目的。

      箱1:800 
      箱2:1000 1200 1500 1500 1800 2000 
      箱3:2300 2500 2800 3000  
      箱4:3500 4000 
      箱5:4500 4800 5000 
      

    1.3.4数据平滑方法。

    • 按平均值平滑 :对同一箱值中的数据求平均值,用平均值替代该箱子中的所有数据。
    • 按边界值平滑:用距离较小的边界值替代箱中每一数据。
    • 按中值平滑:取箱子的中值,用来替代箱子中的所有数据。

    1.4数据集成

    • 数据集成中的两个主要问题是:
      • 如何对多个数据集进行匹配,当一个数据库的属性与另一个数据库的属性匹配时,必须注意数据的结构;
      • 数据冗余。两个数据集有两个命名不同但实际数据相同的属性,那么其中一个属性就是冗余的。

    1.5数据变换

    • 数据变换策略主要包括以下几种:
      • 光滑:去掉噪声;
      • 属性构造:由给定的属性构造出新属性并添加到数据集中。例如,通过“销售额”和“成本”构造出“利润”,只需要对相应属性数据进行简单变换即可
      • 聚集:对数据进行汇总。比如通过日销售数据,计算月和年的销售数据;
      • 规范化:把数据单按比例缩放,比如数据标准化处理;针对数值型的数据
      • 离散化:将定量数据向定性数据转化。比如一系列连续数据,可用标签进行替换(0,1);
      • 对于文本型数据,若包含的是类别的信息,可以采用one-hot的编码方式,对其进行处理;对于分类别信息,则可以视具体的属性的含义,将其转换为数值型,如:姓名属性可以转换为词频的统计。

    1.6数据规约

    数据归约通常用维归约、数值归约方法实现。维归约指通过减少属性的方式压缩数据量,通过移除不相关的属性,可以提高模型效率。常见的维归约方法有:分类树、随机森林通过对分类效果的影响大小筛选属性;小波变换、主成分分析通过把原数据变换或投影到较小的空间来降低维数。

    1.7数据可视化

    我们将绘制图表,找出特征信号(比如,模式,可分性,特征和目标之间的关系,不同特征间的关系等等)和波动(比如,噪声量,数据分布等)。

    • 数据可视化常用方法
      • 箱线图(Boxplot/violinplot);
      • 直方图(histogram);
      • 散点图矩阵(scatter plot matrice/splom);
      • 径向坐标可视化(radviz);
      • 平行坐标图(parallel coordinate);
      • 双标图(jointplot)
    • 箱线图
      • 箱线图可以看出数据的集中趋势、分布和异常点。
      • Violinplot提供了的传统箱线图,除了提供前面的信息,也反映相对密度估计,这对判断特征的可分性很有用。violin的两边显示了分类变量的分布,这对二分类特有用。使用sns.violinplot代替sns.boxplot即可绘制Violinplot图。
    • 直方图
      • 直方图显示根据每个特征的组距值放入不同的直条,并根据每个直条的频率来计算直条值。下面绘制信用卡默认支付数据集的年龄特征的直方图
    • 散点图矩阵
      • 散点图矩阵是非常值得推荐的特征分析工具。我们在散点图中把所有特征配对(每两两特征组合画在一个矩阵中)绘制,对角一般留白或者用来显示核密度估计、直方图或者特征标注。散点图矩阵可以检查两两不同特征之间的关系。我们从散点图矩阵中找出协方差,线性关系、二次关系或者指数关系,同方差或者异方差(代表特征之间分散的程度)。
    • 径向坐标可视化(radviz)
      • 径向坐标可视化是基于弹簧张力最小化算法。它把数据集的特征映射成二维目标空间单位圆中的一个点,点的位置由系在点上的特征决定。把实例投入圆的中心,特征会朝圆中此实例位置(实例对应的归一化数值)“拉”实例。
    • 平行坐标图
      • 平行坐标图,类似于radviz图,是可视化数据集聚类的方法。数据点表示为可连接的线段,x轴的单位没有实际意义,每个竖直线代表一个属性。连接线段的一个集合代表一个实例。紧挨着的点聚成一类,相同颜色的线意味着好的分散性。
    • 双标图(jointplot)
      • 一般来讲,维度数目必须通过技术(比如,层次聚合,降维(例如,PCA和LDA)和维度裁剪)来减少。对于维度裁剪,可以使用散点图矩阵生成小倍数的特征。另外一种可行的办法是用双标图来检测每两两特征间的相关性。


    2.特征工程

    2.1 特征工程定义

    特征工程是将原始数据转化为特征,更好表示预测模型处理的实际问题,提升对于未知数据的准确性。它是用目标问题所在的特定领域知识或者自动化的方法来生成、提取、删减或者组合变化得到特征。

    2.2特征工程的重要意义

    数据特征会直接影响你使用的预测模型和实现的预测结果。准备和选择的特征越好,则实现的结果越好。
    影响预测结果好坏的因素:模型的选择、可用的数据、特征的提取
    优质的特征往往描述了数据的固有结构。
    大多数模型都可以通过数据中良好的结构很好的学习,即使不是最优的模型,优质的特征也可以得到不错的效果。优质特征的灵活性可以让你使用简单的模型运算的更快,更容易理解,更容易维护。
    优质的特征可以在使用不是最优的模型参数的情况下得到不错的预测结果,这样你就不必费力去选择最适合的模型和最优的参数了。

    2.3特征工程的内容

    • 特征选择
      • 不同的特征对模型的准确度的影响不同,有些特征与要解决的问题不相关,有些特征是冗余信息,这些特征都应该被移除掉。
        特征选择是自动地选择出对于问题最重要的那些特征子集的过程。
        特征选择算法可以使用评分的方法来进行排序;还有些方法通过反复试验来搜索出特征子集,自动地创建并评估模型以得到客观的、预测效果最好的特征子集;还有一些方法,将特征选择作为模型的附加功能,像逐步回归法(Stepwise regression)
        就是一个在模型构建过程中自动进行特征选择的算法。
    • 特征提取
      • 一些观测数据如果直接建模,其原始状态的数据太多。像图像、音频和文本数据,如果将其看做是表格数据,那么其中包含了数以千计的属性。
        特征提取是自动地对原始观测降维,使其特征集合小到可以进行建模的过程。
        对于表格式数据,可以使用主元素分析(Principal Component Analysis)、聚类等映射方法;对于图像数据,可以进行线(line)或边缘(edge)的提取;根据相应的领域,图像、视频和音频数据可以有很多数字信号处理的方法对其进行处理。
    • 特征构建
      • 特征重要性和选择是告诉使用者特征的客观特性,但这些工作之后,需要你人工进行特征的构建。
        特征构建需要花费大量的时间对实际样本数据进行处理,思考数据的结构,和如何将特征数据输入给预测算法。
        对于表格数据,特征构建意味着将特征进行混合或组合以得到新的特征,或通过对特征进行分解或切分来构造新的特征;对于文本数据,特征够自己按意味着设计出针对特定问题的文本指标;对于图像数据,这意味着自动过滤,得到相关的结构。
    • 特征学习
      • 特征学习是在原始数据中自动识别和使用特征。
        现代深度学习方法在特征学习领域有很多成功案例,比如自编码器和受限玻尔兹曼机。它们以无监督或半监督的方式实现自动的学习抽象的特征表示(压缩形式),其结果用于支撑像语音识别、图像分类、物体识别和其他领域的先进成果。
      • 抽象的特征表达可以自动得到,但是你无法理解和利用这些学习得到的结果,只有黑盒的方式才可以使用这些特征。你不可能轻易懂得如何创造和那些效果很好的特征相似或相异的特征。这个技能是很难的,但同时它也是很有魅力的,很重要的。

    2.4特征工程的流程

    • 数据的转换流程
      • 选择数据:收集整合数据,将数据规划化为一个数据集
      • 预处理数据:对数据进行清洗、格式化、采样
      • 转换数据:特征工程所在
      • 对数据建模:构建模型、评估模型、调整模型
    • 特征工程迭代过程
      • 对特征进行头脑风暴:深入分析问题,观察数据特点,参考其他问题的有关特征工程的方法并应用到自己问题中
      • 特征的设计:你可以自动提取特征,手动构造特征,或将两者相结合
      • 特征选择:使用不同的特征重要性评分方法或特征选择方法
      • 评估模型:利用所选择的特征对测试数据进行预测,评估模型准确性


    3.模型选择

    • 问题导读
      • 1.机器学习常见的分类有哪些?
      • 2.如何确定自己当前的问题需要哪类算法来解决?
      • 3.不同类别的机器学习算法下分别包括哪些算法?
      • 4.为什么要对统一数据采用多种可用的算法?
      • 5.特征工程是用来干嘛的?
      • 6.如何进行超参数的优化?

    3.1机器学习分类

    在我们深入之前,我们要明确我们了解了基础知识。具体来说,我们应该知道有三个主要的机器学习分类:监督学习(supervised learning)、无监督学习(unsupervised learning),以及强化学习(reinforcement learning)

    • 监督学习:每个数据点被标记或者与一个类别或者感兴趣值相关联。分类标签的一个例子是将图像指定为“猫”或者“狗”。价值标签的一个例子是销售价格与二手车相关联。监督学习的目标是研究许多这样的标记示例,进而能够堆未来的数据点进行预测,例如,确定新的照片与正确的动物(分类(classification))或者指定其他二手车的准确销售价格(回归(regression))。
    • 无监督学习:数据点没有标签对应。相反,一个无监督学习算法的目标是以一些方式组织数据或者表述它的结构。这意味着将其分组到集群内部,或者寻找不同的方式查看复杂数据,使其看起来更简单。
    • 强化学习:对应于每一个数据点,算法需要去选择一个动作。这是一种常见的机器人方法,在一个时间点的传感器读数集合是一个数据点,算法必须选择机器人的下一个动作。这也是很普通的物联网应用模式,学习算法接收一个回报信号后不久,反馈这个决定到底好不好。基于此,算法修改其策略为了达到更高的回报.

    3.2对问题进行分类

    下一步,我们要对手头上的问题进行分类。这是一个两步步骤:
    - 通过输入分类:如果我们有标签数据,这是一个监督学习问题。如果我们有无标签数据并且想要去发现结构,这是一个无监督学习问题。如果我们想要通过与环境交互优化目标函数,这是一个强化学习问题。
    - 通过输出分类:如果一个模型的输出是一个数字,这是一个回归问题。如果模型的输出是一个类(或者分类),这是一个分类问题。如果模型的输出是输入组的集合,这是一个分类问题。

    就是那么简单。总而言之,我们可以通过问自己算法需要解决什么问题,进而发现算法的正确分类。
    问题分类框架
    上面这张图包含了一些我们还没有讨论的技术术语:

    • 分类(Classification):当数据被用来预测一个分类,监督学习也被称为分类。这是一个例子当指定一张相作为“猫”或“狗”的图片。当只有两种选择时,称为二类(two-class)或二项式分类(binomialclassification)。当有更多类别的时候,当我们预测下一个诺贝尔物理学奖得住,这个问题被称为多项式分类(multi-classclassification)。
    • 回归(Regression):当一个值被预测时,与股票价格一样,监督学习也被称为回归。
    • 聚类(Clustering):非监督学习最常用的方法是聚类分析或者聚类。聚类是一组对象组的任务,在这样的一种方式下,在同一组中的对象(称为集群)是更加相似的(在某一种意义上),相比其他组(集群)里的对象。
    • 异常检测(Anomalydetection):需要在目标里找到不寻常的数据点。在欺诈检测里,例如,任何非常不寻常的信用卡消费模式都是可以的。可能的变化很多,而训练示例很少,这看起来不是一种可行方式了解欺诈活动。异常检测需要的方法是简单地了解什么是正常的活动(使用非欺诈交易历史记录),并且确定明显不同的内容。

    3.3找到可用算法

    现在我们有分类问题,我们可以使用工具去调研和验证算法是可行的和可实践的。

    sklearn

    一些值得关注的算法是:

    • 分类(Classification):
      • 支持向量机(SVM):通过尽可能宽的边缘方式发现分离类的边界。当二分式不能清晰的切分时,算法找到最好的边界。这个算法真正的亮点是强烈的数据特征,好像文本或者染色体组(>100特性)。在这些情况下,SVMs比其许多其他算法更快递切分二项,也更少地过度拟合,除了需要少量的内存。
      • 人工神经网络(Artificial neural networks):是大脑启发学习算法,覆盖多项式分类、二项式分类,以及回归问题。它们带来了无限的多样性,包括感知和深度学习。它们花费很长时间进行训练,但是带来各种应用领域的先进性能。
      • 逻辑回归(Logistic regression):虽然包含‘回归’这个词看上去有点令人费解,逻辑回归事实上是一个对于二项式和多项式分类来说强大的功能。它很快和简单。事实是它使用了‘S’形曲线代替直线让它对于切分数据进入组变得很自然。逻辑回归给出线性分类边界(linear class boundaries),所以当你使用它来确保一个线性近似的时候,类似于你生活中可以使用的一些东西。
      • 决策树和随机树(Decision trees、random forests):决策森林(回归、二项式,以及多项式),决策丛林(二项式、多项式),以及提高决策树(回归和二项式)所有被称为决策树,一种机器学习的基本概念。决策树的变种有很多,但是它们都做了相同的事情,使用相同的标签细分特征空间到各个区域。这些可以是一致类别或者恒定值的区域,依赖于是否你正在做分类或者回归。
    • 回归(Regression):
      • 线性回归(Linearregression):线性回归拟合直接(或者平台,或者超平面)数据集。这是一个工具,简单而快速,但是对于一些问题可能过于简单。
      • 贝叶斯线性回归(Bayesian linearregression):它有非常可取的品质,避免了过度拟合。贝叶斯方式实现它通过对可能分布的答案作出一些假设。这种方式的其他副产品是它们有很少的参数。
      • 提高决策树回归:如上所述,提高决策树(回归或二项式)是基于决策树的,并通过细分大多数相同标签的特征空间到区域完成。提高决策树通过限制它们可以细分的次数和每一个区域的最小数据点数量避免过度拟合。算法构造一颗序列树,每一颗树学习补偿树前留下的错误。结果是非常准确的学习者,该算法倾向于使用大量内存。
    • 聚合(Clustering):

      • 层次聚类(Hierarchicalclustering):层次聚类的试图简历一个层次结构的聚类,它有两种格式。聚集聚类(Agglomerativeclustering)是一个“自下而上”的过程,其中每个观察从自己的聚类开始,随着其在层次中向上移动,成对的聚类会进行融合。分裂聚类(Divisiveclustering)则是一种“自顶向下”的方式,所有的观察开始于一个聚类,并且会随着向下的层次移动而递归式地分裂。整体而言,这里进行的融合和分裂是以一种激进的方式确定。层次聚类的结果通常表示成树状图(dendrogram)形式。
      • k-均值聚类(k-meansclustering)的目标是将n组观测值分为k个聚类,其中每个观测值都属于其接近的那个均值的聚类,这些均值被用作这些聚类的原型。这会将数据空间分割成Voronoidan单元。
    • 异常检测(Anomaly detection):

      • K最近邻(k-nearestneighbors/k-NN)是用于分类和回归的非参数方法。在这两种情况下,输入都是由特征空间中与k最接近的训练样本组成的。在k-NN分类中,输出是一个类成员。对象通过其k最近邻的多数投票来分类,其中对象被分配给k最近邻并且最常见的类(k是一个正整数,通常较小)。在k-NN回归中,输出为对象的属性值。该值为其k最近邻值的平均值。
      • 单类支持向量机(One-classSVM):使用了非线性支持向量机的一个巧妙的扩展,单类支持向量机可以描绘一个严格概述整个数据集的边界。远在边界之外的任何新数据点都是足够非正常的,也是值得特别关注的。

    3.4尝试所有可用算法

    对于给定的问题,通常会有一些候选算法可以适用。所以我们如何知道哪一个可以挑选?通常,这个问题的答案不是那么直截了当的,所以我们必须反复试验。

    原型开发最好分两步完成。第一步,我们希望通过最小化特征工程快速而简单地完成几种算法的实现。在这个阶段,我们主要兴趣在粗略来看那个算法表现更好。这个步骤有点类似招聘:我们会尽可能地寻找可以缩短我们候选算法列表的理由。

    一旦我们将列表缩减为几个候选算法,真正的原型开发开始了。理想地,我们想建立一个机器学习流程,使用一组经过精心挑选的评估标准比较每个算法在数据集上的表现。在这个阶段,我们只处理一小部分的算法,所以我们可以把注意力转到真正神奇的地方:特征工程

    3.5 特征工程

    或许比选择算法更重要的是正确选择表示数据的特征。从上面的列表中选择合适的算法是相对简单直接的,然而特征工程却更像是一门艺术。

    主要问题在于我们试图分类的数据在特征空间的描述极少。利如,用像素的灰度值来预测图片通常是不佳的选择;相反,我们需要找到能提高信噪比的数据变换。如果没有这些数据转换,我们的任务可能无法解决。利如,在方向梯度直方图(HOG)出现之前,复杂的视觉任务(像行人检测或面部检测)都是很难做到的。

    虽然大多数特征的有效性需要靠实验来评估,但是了解常见的选取数据特征的方法是很有帮助的。这里有几个较好的方法:

    • 主成分分析(Principal componentanalysis,PCA):一种线性降维方法,可以找出包含信息量较高的特征主成分,可以解释数据中的大多数方差。
    • 尺度不变特征变换(Scale-invariant featuretransform,SIFT):计算机视觉领域中的算法,用以检测和描述图片的局部特征。它有一个开源的替代方法ORB(Oriented FAST and rotated BRIEF)。
      加速稳健特征(Speeded up robust features,SURF):SIFT 的更稳健版本。
    • 方向梯度直方图(Histogram of orientedgradients,HOG):一种特征描述方法,在计算机视觉中用于计数一张图像中局部部分的梯度方向的发生。
      更多算法请参考:[url=]https://en.wikipedia.org/wiki/Visual_deor[/url]

    当然,你也可以想出你自己的特征描述方法。如果你有几个候选方法,你可以使用封装好的方法进行智能的特征选择。

    前向搜索:

    • 最开始不选取任何特征。
    • 然后选择最相关的特征,将这个特征加入到已有特征;计算模型的交叉验证误差,重复选取其它所有候选特征;最后,选取能使你交叉验证误差最小特征,并放入已选择的特征之中。
    • 重复,直到达到期望数量的特征为止!

    反向搜索:

    • 从所有特征开始。
    • 先移除最不相关的特征,然后计算模型的交叉验证误差;对其它所有候选特征,重复这一过程;最后,移除使交叉验证误差最大的候选特征。
      重复,直到达到期望数量的特征为止!

    使用交叉验证的准则来移除和增加特征!



    4.寻找最佳超参数

    最后,你可能想优化算法的超参数。例如,主成分分析中的主成分个数,k 近邻算法的参数 k,或者是神经网络中的层数和学习速率。最好的方法是使用交叉验证来选择。

    一旦你运用了上述所有方法,你将有很好的机会创造出强大的机器学习系统。但是,你可能也猜到了,成败在于细节,你可能不得不反复实验,最后才能走向成功。

    相关知识

    二项式分类(binomial classification):

    适用环境: 

    • 各观察单位只能具有相互对立的一种结果,如阳性或阴性,生存或死亡等,属于两分类资料。
    • 已知发生某一结果(阳性)的概率为p,其对立结果的概率为1−p,实际工作中要求p是从大量观察中获得比较稳定的数值。
    • n次试验在相同条件下进行,且各个观察单位的观察结果相互独立,即每个观察单位的观察结果不会影响到其他观察单位的结果。如要求疾病无传染性、无家族性等。

    符号:b(x,n,p)概率函数*:Cxnpxqn−x,其中x=0,1,⋯,n为正整数即发生的次数,Cxn=n!x!(n−x)!

    例题:掷硬币试验。有10个硬币掷一次,或1个硬币掷十次。问五次正面向上的概率是多少?

    解:根据题意n=10,p=q=12,x=5  b(5,l0,12)=C510p5q10=10!(5!(10−5)!)×(12)5×(12)5=252×(132)×(132)=0.2469所以五次正面向上的概率为0.24609

    Support vector machines

    是一种监督式学习的方法,可广泛地应用于统计分类以及回归分析。支持向量机属于一般化线性分类器,也可以被认为是提克洛夫规范化(Tikhonov Regularization)方法的一个特例。这族分类器的特点是他们能够同时最小化经验误差与最大化几何边缘区,因此支持向量机也被称为最大边缘区分类器。



    5.模型分析和模型融合

    展开全文
  • 机器学习过程概述

    2020-03-24 15:31:08
    此文档为思维导图导入md文档。主要从机器学习工作流程、算法分类和模型评估三个方面简要阐述机器学习

    机器学习概述

    1.机器学习工作流程

    1.1机器学习工作流程

    • 1.获取数据
      2.数据基本处理
      3.特征工程
      4.机器学习(模型训练)
      5.模型评估
      结果达到要求,上线服务
      没有达到要求,重新上面步骤

    1.2数据集介绍

    • 数据集中一行数据一般称为一个样本,一列数据一般称为一个特征。
      数据集的构成:
      由特征值+目标值(部分数据集没有)构成
      为了模型的训练和测试,把数据集分为:训练数据(70%-80%)和测试数据(20%-30%)

    1.3数据基本处理

    • ​ 即对数据进行缺失值、去除异常值等处理

    1.4特征工程

    • 特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。

    • 意义:会直接影响机器学习的效果

    • 特征工程包含内容
      1.特征提取
      2.特征预处理
      3.特征降维

      • 特征提取
        将任意数据(如文本或图像)转换为可用于机器学习的数字特征
      • 特征预处理
        通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程
      • 特征降维
        指在某些限定条件下,降低随机变量(特征)个数,得到一组“不相关”主变量的过程

    1.5机器学习

    • 选择合适的算法对模型进行训练

    1.6模型评估

    • 对训练好的模型进行评估

    2.机器学习算法分类

    2.1监督学习

    • 定义:
      输入数据是由输入特征值和目标值所组成。
      函数的输出可以是一个连续的值(称为回归),
      或是输出是有限个离散值(称作分类)。

    2.2无监督学习

    • 定义:

    输入数据是由输入特征值组成,没有目标值

    输入数据没有被标记,也没有确定的结果。样本数据类别未知;
    需要根据样本间的相似性对样本集进行类别划分。

    2.3半监督学习

    • 定义:
      训练集同时包含有标记样本数据和未标记样本数据。

    2.4强化学习

    • 定义:
      实质是make decisions 问题,即自动进行决策,并且可以做连续决策。
      举例:

    小孩想要走路,但在这之前,他需要先站起来,站起来之后还要保持平衡,接下来还要先迈出一条腿,是左腿还是右腿,迈出一步后还要迈出下一步。

    小孩就是 agent,他试图通过采取行动(即行走)来操纵环境(行走的表面),并且从一个状态转变到另一个状态(即他走的每一步),当他完成任务的子任务(即走了几步)时,孩子得到奖励(给巧克力吃),并且当他不能走路时,就不会给巧克力。

    主要包含五个元素:agent, action, reward, environment, observation;

    • 强化学习的目标就是获得最多的累计奖励。
      在这里插入图片描述

    3.模型评估

    3.1分类模型评估

    • 准确率:预测正确的数占样本总数的比例。
      其他评价指标:精确率、召回率、F1-score、AUC指标等

    3.2回归模型评估

    • 均方根误差(Root Mean Squared Error,RMSE)
      均方根误差(Root Mean Squared Error,RMSE)
      RMSE是一个衡量回归模型误差率的常用公式。 不过,它仅能比较误差是相同单位的模型。
      其他评价指标:相对平方误差(Relative Squared Error,RSE)、平均绝对误差(Mean Absolute Error,MAE)、相对绝对误差(Relative Absolute Error,RAE)

    3.3拟合

    • 过拟合

      • 学习到的东西太多
        学习到的特征多,不好泛化
    • 欠拟合

      • 习到的东西太少
        模型学习的太过粗糙

    XMind: ZEN - Trial Version

    展开全文
  • sklearn机器学习常用过程总结

    千次阅读 2017-11-07 21:23:15
    由于前面对sklearn或多或少接触了一下,但是不深入,随着最近学习,我下面介绍一下机器学习常用过程。 1. 加载数据集 scikit-learn中自带了一些数据集,比如说最著名Iris数据集。 数据集中第3列和第4列数据表示...

    由于前面对sklearn或多或少接触了一下,但是不深入,随着最近学习,我下面介绍一下机器学习常用过程。

    1. 加载数据集

    scikit-learn中自带了一些数据集,比如说最著名的Iris数据集。 
    数据集中第3列和第4列数据表示花瓣的长度和宽度。而类别已经转成了数字,比如
    0=Iris-Setosa, 1=Iris-Versicolor, 2=Iris-Virginica.
    from distutils.version import LooseVersion as Version
    from sklearn import __version__ as sklearn_version
    from sklearn import datasets
    import numpy as np
    
    iris = datasets.load_iris()
    iris.data    #查看数据
    X = iris.data[:, [2, 3]]
    y = iris.target
    
    print('Class labels:', np.unique(y))
    2.通常我们会把数据集切分成训练集和测试集,这里70%的训练集,30%的测试集。

    if Version(sklearn_version) < '0.18':
        from sklearn.cross_validation import train_test_split
    else:
        from sklearn.model_selection import train_test_split
    
    X_train, X_test, y_train, y_test = train_test_split(
        X, y, test_size=0.3, random_state=0)
    3.对特征做标准化

    from sklearn.preprocessing import StandardScaler
    
    sc = StandardScaler()
    sc.fit(X_train)
    
    sc.scale_
    
    X_train_std = sc.transform(X_train)
    X_test_std = sc.transform(X_test)
    
    4.用scikit-learn中的感知器做分类

    from sklearn.linear_model import Perceptron
    
    #ppn = Perceptron(n_iter=40, eta0=0.1, random_state=0)
    ppn = Perceptron()
    
    ppn.fit(X_train_std, y_train)
    
    ppn.coef_
    
    ppn.intercept_
    
    y_pred = ppn.predict(X_test_std)
    y_pred 
    
    y_test
    
    y_pred == y_test
    
    print('Misclassified samples: %d' % (y_test != y_pred).sum())
    
    from sklearn.metrics import accuracy_score
    
    print('Accuracy: %.2f' % accuracy_score(y_test, y_pred))
    
    5.使用scikit-learn训练LR

    from sklearn.linear_model import LogisticRegression
    
    lr = LogisticRegression(C=1000.0, random_state=0)
    lr.fit(X_train_std, y_train)
    
    plot_decision_regions(X_combined_std, y_combined,
                          classifier=lr, test_idx=range(105, 150))
    plt.xlabel('petal length [standardized]')
    plt.ylabel('petal width [standardized]')
    plt.legend(loc='upper left')
    plt.tight_layout()
    # plt.savefig('./figures/logistic_regression.png', dpi=300)
    plt.show()
    
    if Version(sklearn_version) < '0.17':
        lr.predict_proba(X_test_std[0, :])
    else:
        lr.predict_proba(X_test_std[0, :].reshape(1, -1))
    
    lr.predict_proba(X_test_std[0, :])
    
    6.来谈谈过拟合/overfitting 与 正则化/regularization
    正则化L1 和L2    L1截断,会产生很多0,使矩阵稀疏;L2是缩放,把权重缩放到很小。


    7.最大间隔分类与支持向量机

    from sklearn.svm import SVC
    
    svm = SVC(kernel='linear', C=1.0, random_state=0)
    svm.fit(X_train_std, y_train)
    
    plot_decision_regions(X_combined_std, y_combined,
                          classifier=svm, test_idx=range(105, 150))
    plt.xlabel('petal length [standardized]')
    plt.ylabel('petal width [standardized]')
    plt.legend(loc='upper left')
    plt.tight_layout()
    # plt.savefig('./figures/support_vector_machine_linear.png', dpi=300)
    plt.show()
    

    8.神奇的SVM核函数完成非线性切分

    import matplotlib.pyplot as plt
    import numpy as np
    
    np.random.seed(0)
    X_xor = np.random.randn(200, 2)
    y_xor = np.logical_xor(X_xor[:, 0] > 0,
                           X_xor[:, 1] > 0)
    y_xor = np.where(y_xor, 1, -1)
    
    plt.scatter(X_xor[y_xor == 1, 0],
                X_xor[y_xor == 1, 1],
                c='b', marker='x',
                label='1')
    plt.scatter(X_xor[y_xor == -1, 0],
                X_xor[y_xor == -1, 1],
                c='r',
                marker='s',
                label='-1')
    
    plt.xlim([-3, 3])
    plt.ylim([-3, 3])
    plt.legend(loc='best')
    plt.tight_layout()
    # plt.savefig('./figures/xor.png', dpi=300)
    plt.show()

    9.使用kernel trick在高维空间内找到一个可切分的超平面

    svm = SVC(kernel='rbf', random_state=0, gamma=0.10, C=10.0)
    svm.fit(X_xor, y_xor)
    plot_decision_regions(X_xor, y_xor,
                          classifier=svm)
    
    plt.legend(loc='upper left')
    plt.tight_layout()
    # plt.savefig('./figures/support_vector_machine_rbf_xor.png', dpi=300)
    plt.show()

    from sklearn.svm import SVC
    
    svm = SVC(kernel='rbf', random_state=0, gamma=0.2, C=1.0)
    svm.fit(X_train_std, y_train)
    
    plot_decision_regions(X_combined_std, y_combined,
                          classifier=svm, test_idx=range(105, 150))
    plt.xlabel('petal length [standardized]')
    plt.ylabel('petal width [standardized]')
    plt.legend(loc='upper left')
    plt.tight_layout()
    # plt.savefig('./figures/support_vector_machine_rbf_iris_1.png', dpi=300)
    plt.show()

    svm = SVC(kernel='rbf', random_state=0, gamma=100.0, C=1.0)
    svm.fit(X_train_std, y_train)
    
    plot_decision_regions(X_combined_std, y_combined, 
                          classifier=svm, test_idx=range(105, 150))
    plt.xlabel('petal length [standardized]')
    plt.ylabel('petal width [standardized]')
    plt.legend(loc='upper left')
    plt.tight_layout()
    # plt.savefig('./figures/support_vector_machine_rbf_iris_2.png', dpi=300)
    plt.show()
    10.决策树学习

    import matplotlib.pyplot as plt
    import numpy as np
    
    
    def gini(p):
        return p * (1 - p) + (1 - p) * (1 - (1 - p))
    
    
    def entropy(p):
        return - p * np.log2(p) - (1 - p) * np.log2((1 - p))
    
    
    def error(p):
        return 1 - np.max([p, 1 - p])
    
    x = np.arange(0.0, 1.0, 0.01)
    
    ent = [entropy(p) if p != 0 else None for p in x]
    sc_ent = [e * 0.5 if e else None for e in ent]
    err = [error(i) for i in x]
    
    fig = plt.figure()
    ax = plt.subplot(111)
    for i, lab, ls, c, in zip([ent, sc_ent, gini(x), err], 
                              ['Entropy', 'Entropy (scaled)', 
                               'Gini Impurity', 'Misclassification Error'],
                              ['-', '-', '--', '-.'],
                              ['black', 'lightgray', 'red', 'green', 'cyan']):
        line = ax.plot(x, i, label=lab, linestyle=ls, lw=2, color=c)
    
    ax.legend(loc='upper center', bbox_to_anchor=(0.5, 1.15),
              ncol=3, fancybox=True, shadow=False)
    
    ax.axhline(y=0.5, linewidth=1, color='k', linestyle='--')
    ax.axhline(y=1.0, linewidth=1, color='k', linestyle='--')
    plt.ylim([0, 1.1])
    plt.xlabel('p(i=1)')
    plt.ylabel('Impurity Index')
    plt.tight_layout()
    #plt.savefig('./figures/impurity.png', dpi=300, bbox_inches='tight')
    plt.show()

    from sklearn.tree import DecisionTreeClassifier
    
    tree = DecisionTreeClassifier(criterion='entropy', max_depth=3, random_state=0)
    tree.fit(X_train, y_train)
    
    X_combined = np.vstack((X_train, X_test))
    y_combined = np.hstack((y_train, y_test))
    plot_decision_regions(X_combined, y_combined, 
                          classifier=tree, test_idx=range(105, 150))
    
    plt.xlabel('petal length [cm]')
    plt.ylabel('petal width [cm]')
    plt.legend(loc='upper left')
    plt.tight_layout()
    # plt.savefig('./figures/decision_tree_decision.png', dpi=300)
    plt.show()

    from sklearn.tree import export_graphviz
    
    export_graphviz(tree, 
                    out_file='tree.dot', 
                    feature_names=['petal length', 'petal width'])
    Image(filename='./images/03_18.png', width=600)
    


    11.使用随机森林对树做叠加,变成增强分类器

    from sklearn.ensemble import RandomForestClassifier
    
    forest = RandomForestClassifier(criterion='entropy',
                                    n_estimators=10, 
                                    random_state=1,
                                    n_jobs=2)
    forest.fit(X_train, y_train)
    
    plot_decision_regions(X_combined, y_combined, 
                          classifier=forest, test_idx=range(105, 150))
    
    plt.xlabel('petal length [cm]')
    plt.ylabel('petal width [cm]')
    plt.legend(loc='upper left')
    plt.tight_layout()
    # plt.savefig('./figures/random_forest.png', dpi=300)
    plt.show()

    12.K最近邻,朴素的分类器

    from sklearn.neighbors import KNeighborsClassifier
    
    knn = KNeighborsClassifier(n_neighbors=5, p=2, metric='minkowski')
    knn.fit(X_train_std, y_train)
    
    plot_decision_regions(X_combined_std, y_combined, 
                          classifier=knn, test_idx=range(105, 150))
    
    plt.xlabel('petal length [standardized]')
    plt.ylabel('petal width [standardized]')
    plt.legend(loc='upper left')
    plt.tight_layout()
    # plt.savefig('./figures/k_nearest_neighbors.png', dpi=300)
    plt.show()

    展开全文
  • 与传统的编程不同,开发人员需要预测每一个潜在的条件进行编程,一个机器学习的解决方案可以有效地基于数据来适应输出的结果。  一个机器学习的算法并没有真正地编写代码,但它建立了一个关于真实世界的计算机模型...
  • 机器学习的定义

    万次阅读 2018-05-10 21:43:00
    让我们把机器学习的过程与人类对历史经验归纳的过程做个比对。机器学习与人类思考的类比 人类在成长、生活过程中积累了很多的历史与经验。人类定期地对这些经验进行“归纳”,获得了生活的“规律...
  • python机器学习简易过程

    千次阅读 2017-12-12 00:31:03
    python机器学习简易过程 明确目标(Ideation):明确想要去证明问题,定义hypothesis 数据预处理(preprocess):处理错误数据;处理missing数据;处理量纲问题;处理数据组织格式;the level of the details 与...
  • 机器学习高斯过程

    千次阅读 多人点赞 2018-12-16 17:08:58
    写这篇文章的目的就是为了总结一下最近在学习的高斯过程的一些内容,但是由于我是初学者可能有些地方理解不到位,请大家多多谅解~文末附上了一些数学方面的推导。 1. 高斯过程定义 高斯过程是在连续域上定义的一种...
  • 机器学习建模基本过程

    千次阅读 2018-09-12 22:15:13
    机器学习建模基本过程 机器学习建模基本过程: 1. 实际问题抽象成数学问题 这里抽象成数学问题,指我们明确我们可以获得什么样数据,目标是一个分类还是回归或者是聚类问题,如果都不是话,如果划归...
  • 理解XGBoost机器学习模型决策过程

    千次阅读 2017-12-21 06:42:26
    使用 XGBoost 的算法在 Kaggle 和其它数据科学竞赛中经常可以获得好成绩,因此受到了人们的欢迎(可参阅:为什么 XGBoost 在机器学习竞赛中表现如此卓越?)。本文用一个具体的数据集分析了 ... 随着机器学习的产业应
  • 机器学习简介

    千次阅读 多人点赞 2019-04-08 20:23:31
    主要内容 •机器学习的概念 •机器学习主要分类 ...•机器学习的过程 •机器学习示例 机器学习是什么 •什么是学习 –从人的学习说起 –学习理论;从实践经验中总结 –在理论上推导;在实践中...
  • 应用机器学习的过程中,可能遇到的一些问题以及对应的一些建议,花较少的时间得到不错的效果,挖掘问题,对症下药。
  • 机器学习的理解

    2017-05-31 19:29:53
    机器学习的宗旨就是让机器学会“人识别事物的方法”,我们希望人从事物中了解到的东西和机器从事物中了解到的东西一样,这就是机器学习的过程。在机器学习中有一个很经典的问题: “假设有一张色彩丰富的油画,画中...
  • 机器学习 -- 决策树根节点选择过程
  • 机器学习高斯过程简介

    千次阅读 2018-11-05 09:56:07
    前面博客有说到高斯混合模型,本质是用n(簇个数)个高斯函数线性组合拟合数据,然后用训练数据集学习各个高斯函数参数以及线性组合系数,最后反过来更具学习模型P(y∣X)P(y|X)P(y∣X)对原数据集进行聚类...
  • Spark机器学习过程梳理

    千次阅读 2016-12-10 09:52:40
    最近半个月开始研究Spark的机器学习算法,由于工作原因,其实现在还没有真正开始机器学习算法的研究,只是做了前期大量的准备,现在把早年学习的,正在学习的和将要学习的一起做个梳理,整理一个Spark机器学习完整...
  • 你走过最长路,就是机器学习过程弯路

    万次阅读 多人点赞 2018-01-08 00:00:00
    营长一位转型AI朋友,最近对营长抱怨,“走过最远路,就是机器学习过程弯路”,然后开始各种blablabla,从论文坑,到模型坑,再到培训坑...一路吐槽。尤其是论文,他骂道:“最讨厌就是那种,...
  • 一次完整的机器学习过程(scikit learn library学习笔记)   作者 hzyido 关注 2015.07.26 15:35* 字数 3675 阅读 2777评论 0喜欢 8 Query意图分析:记一次完整的机器学习过程(scikit ...
  • Shark 机器学习库配置过程 Shark 机器学习库配置过程 1 环境&amp;库 2 Boost 库配置 3 Shark 配置 致谢链接 记录下配置Shark过程,便于学习。 1 环境&amp;库 Windows 10 VS 2017 ...
  • 机器学习机器学习概念简述

    千次阅读 2017-12-14 14:57:09
    机器学习追求合理的假设空间的选取和模型的泛化能力   常见的机器学习应用场景: ...机器学习的过程:获取数据à处理数据à选择模型à训练模型à评估模型à可视化结果   常见机器学习算法:  线性回归  ...
  • 机器学习训练过程中常见问题

    千次阅读 2019-08-20 10:28:51
    机器学习模型在训练数据集和测试数据集上表现。如果你改变过实验中模型结构或者超参数,你也许发现了:当模型在训练数据集上更准确时,它在测试数据集上却不⼀定更准确。这是为什么呢? 因为存在着训练误差和...
  • 机器学习线性代数之矩阵求导

    万次阅读 多人点赞 2017-01-12 19:57:57
    接下来针对机器学习公式推导过程中经常用到矩阵求导,我们做一个详细介绍。矩阵求导(Matrix Derivative)也称作矩阵微分(Matrix Differential),在机器学习、图像处理、最优化等领域公式推导中经常用到。
  • 本文我们将对高斯过程回归模型给出基本介绍,研究...以回归(对于连续输出)和分类(对于离散输出)形式的机器学习是统计学和机器学习非常重要组成部分,无论是对于大量数据分析,或是对于一个更加复杂问题中...
  • 感觉机器学习是一个很好的模型,我们可以根据机器学习的过程来审视自己的学习方法,不断调整自己的学习方法,最终找的达到自己期望的那个较好的学习模型。   下面来介绍机器学习的基本流程。 1.获取数据 2.特征...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,910
精华内容 9,964
关键字:

机器学习的过程