经典监督学习方法

生成算法尝试去找这个数据到底是怎么生成的(产生的),然后再对一个信号进行分类。基于你的生成假设,哪个类别最有可能产生这个信号,这个信号就属于那个类别。

判别模型不关心数据是怎么生成的,它只关心信号之间的差别,然后模型学习到差别之后简单地对给定的一个信号进行分类。

 

在机器学习中,无监督学习(Unsupervised learning)最典型的就是聚类,事先不知道样本的类别,通过某种办法,把相似的样本放在一起归位一类;而监督学习(Supervised learning)就是有训练样本,带有属性标签,也可以理解成样本有输入有输出,意味着输入和输出之间有一个关系,监督学习算法就是要发现和总结这种“关系”。

以下是一些常用的监督型学习方法:

一. K-近邻算法(k-Nearest Neighbors,KNN)

算法的步骤为:

(1)计算测试数据与各个训练数据之间的距离;

(2)按照距离的递增关系进行排序;

(3)选取距离最小的K个点;

(4)确定前K个点所在类别的出现频率;

(5)返回前K个点中出现频率最高的类别作为测试数据的预测分类。

二. 决策树(Decision Trees)

决策树是一个树结构(可以是二叉树或非二叉树)。其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。

相比贝叶斯算法,决策树的优势在于构造过程不需要任何领域知识或参数设置。

构造决策树的关键步骤是分裂属性。所谓分裂属性就是在某个节点处按照某一特征属性的不同划分构造不同的分支,其目标是让各个分裂子集尽可能地“纯”。尽可能“纯”就是尽量让一个分裂子集中待分类项属于同一类别。分裂属性分为三种不同的情况:
1、属性是离散值且不要求生成二叉决策树。此时用属性的每一个划分作为一个分支。
2、属性是离散值且要求生成二叉决策树。此时使用属性划分的一个子集进行测试,按照“属于此子集”和“不属于此子集”分成两个分支。
3、属性是连续值。此时确定一个值作为分裂点split_point,按照 >split_point 和 <=split_point 生成两个分支。

构造决策树的关键性内容是进行属性选择度量,属性选择度量算法有很多,这里介绍ID3和C4.5两种常用算法。

(1) ID3算法

从信息论知识中我们直到,期望信息越小,信息增益越大,从而纯度越高。所以ID3算法的核心思想就是以信息增益度量属性选择,选择分裂后信息增益最大的属性进行分裂。

熵(entropy)是描述信息不确定性(杂乱程度)的一个值。设S是用类别对训练元组进行的划分,那么S的信息熵的定义如下:

其中,n是类别的数目,p(xi)表示选择xi类别的概率(可用类别数量除以总数量估计)。

现在我们假设将S按属性A进行划分,则S的条件信息熵(也就是A对S划分的期望信息)为:

 

其中,属性A拥有m个类别(例如,属性A是体重,有轻、中、重三个选项,那么m=3),p(tj)表示类别tj(属性A中所有具有第j个特性的所有数据)的数量与S总数量的比值,H(tj)表示子类别tj的熵,即S中拥有属性tj的子元组划分的熵。

而信息增益(Information gain)即为两者的差值:

ID3算法就是在每次需要分裂时,计算每个属性的增益率,然后选择增益率最大的属性进行分裂。如此迭代,直至结束。这里有一个ID3算法的实例过程。

对于特征属性为离散值,可以直接使用ID3算法进行划分。对于特征属性为连续值,可以如此使用ID3算法:
先将D中元素按照特征属性排序,则每两个相邻元素的中间点可以看做潜在分裂点,从第一个潜在分裂点开始,分裂D并计算两个集合的期望信息,具有最小期望信息的点称为这个属性的最佳分裂点,其信息期望作为此属性的信息期望。

(2) C4.5算法

ID3算法存在一个问题,就是偏向于多值属性,例如,如果存在唯一标识属性ID,则ID3会选择它作为分裂属性,这样虽然使得划分充分纯净,但这种划分对分类几乎毫无用处。ID3的后继算法C4.5使用增益率(gain ratio)的信息增益扩充,试图克服这个偏倚。严格上说C4.5是ID3的一个改进算法。

C4.5首先定义了分裂信息(Split Information):

  

其中各符号意义与ID3算法相同,然后,增益率(Gain Ratio)被定义为:

  

C4.5选择具有最大增益率的属性作为分裂属性(连续属性要用增益率离散化)。C4.5算法有如下优点:产生的分类规则易于理解,准确率较高。其缺点是:在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效。此外,C4.5只适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时程序无法运行。

 

在决策树构造过程中,如果所有属性都作为分裂属性用光了,但有的子集还不是纯净集,即集合内的元素不属于同一类别。在这种情况下,由于没有更多信息可以使用了,一般对这些子集进行“多数表决”,即使用此子集中出现次数最多的类别作为此节点类别,然后将此节点作为叶子节点。

在实际构造决策树时,通常要进行剪枝,这是为了处理由于数据中的噪声和离群点导致的过分拟合问题。剪枝有两种:先剪枝——在构造过程中,当某个节点满足剪枝条件,则直接停止此分支的构造;后剪枝——先构造完成完整的决策树,再通过某些条件遍历树进行剪枝。悲观错误剪枝PEP算法是一种常见的事后剪枝策略。

三. 朴素贝叶斯(Naive Bayesian)

贝叶斯分类是一系列分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。朴素贝叶斯算法(Naive Bayesian) 是其中应用最为广泛的分类算法之一。朴素贝叶斯分类器基于一个简单的假定:给定目标值时属性之间相互条件独立。朴素贝叶斯的基本思想是对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。

首先给出条件概率的定义,P(A | B)表示事件A在B发生下的条件概率,其公式为:

  

贝叶斯定理用来描述两个条件概率之间的关系,贝叶斯定理公式为:

  

朴素贝叶斯分类算法的具体步骤如下:

(1)设x = {a1,a2,...,am}为一个待分类项,a1,a2,...,am为x的m个特征属性;

(2)设有类别集合C = {y1,y2,...,yn},即共有n个类别;

(3)依次计算x属于各项分类的条件概率,即计算P(y1 | x),P(y2 | x),… ,P(yn | x):

注意,算法的下一步骤是对比这些结果的大小,由于各项分母都是P(x),所以分母不用计算。分子部分中P(yn)和P(ai | yn)都是通过样本集统计而得,其中P(yn)的值为样本集中属于yn类的数量与样本总数量之比,P(ai∥yn)的值为yn类中满足属性ai的数量与yn类下样本总数量之比。

这样的计算方式符合特征属性是离散值的情况,如果特征属性是连续值时,通常假定其值服从高斯分布(也称正态分布),高斯分布即:

   

那么P(ai | yn)的值为:

  

其中,ηyn 和 σyn 分别为训练样本yn类别中ai属性项对应的高斯分布的均值和标准差。

对于P(a | y)=0的情况,当某个类别下某个属性项划分没有出现时,就是产生这种现象,这会令分类器质量大大降低。因此引入Laplace校准,对每个类别下所有属性划分的计数加1,这样如果训练样本集数量充分大时,并不会对结果产生影响,也避免了乘积为0的情况。

(4)比较(3)中所有条件概率的大小,最大的即为预测分类结果,即:

四. 逻辑回归(Logistic Regression)

我们知道,线性回归就是根据已知数据集求一线性函数,使其尽可能拟合数据,让损失函数最小,常用的线性回归最优法有最小二乘法和梯度下降法。而逻辑回归是一种非线性回归模型,相比于线性回归,它多了一个sigmoid函数(或称为Logistic函数)。逻辑回归是一种分类算法,主要用于二分类问题。

对于线性回归,损失函数是欧式距离指标,但这样的Cost Function对于逻辑回归是不可行的,因为在逻辑回归中平方差损失函数是非凸,我们需要其他形式的Cost Function来保证逻辑回归的成本函数是凸函数。我们选择交叉熵损失函数。

与线性回归相似,可以采用梯度下降法寻优,也可以采用其他方法。

 

题外话,对数似然函数与交叉熵损失函数的联系:

对数似然函数:

交叉熵损失函数:

x 表示原始信号,z 表示重构信号。(损失函数的目标是最小化,似然函数的目标则是最大化,二者仅相差一个负号)。

 

https://blog.csdn.net/zxrttcsdn/article/details/79641054

https://www.leiphone.com/news/201704/w6SbD8XGrvQ9IQTB.html

https://www.cnblogs.com/leoo2sk/archive/2010/09/19/decision-tree.html

https://blog.csdn.net/lanchunhui/article/details/75433608

转载于:https://www.cnblogs.com/boceng/p/11321534.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/447982.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu版本更新一路走来:朕就是这样的汉子

今日&#xff0c;Ubuntu发布了最新的14.04版本。当然&#xff0c;业界对新版Ubuntu褒贬不一&#xff0c;为此我们回顾了Ubuntu版本更新历史上几个比较有代表性的版本&#xff0c;看看Ubuntu这一路走来究竟有什么变化。Ubuntu刚刚发布了最新的14.04版本&#xff0c;围绕这一版本…

安装Ubuntu 14.04后要做的5件事情

Ubuntu最新版本Ubuntu 14.04已经发布&#xff0c;它是一个长期支持版本&#xff08;LTS&#xff09;&#xff0c;提供软件包和安全更新的服务周期为5年。本文为大家简单介绍了Ubuntu 14.04版本新特性和安装Ubuntu 14.04后需要做的5件事情&#xff0c;以供参考。Ubuntu目前是世界…

昨天,我的大学学习[2]

昨天&#xff0c;我的大学学习[2] 曾毅 谁能改变我的命运[大学二年级] 如果说大学一年级的时候是一种被动学习状态&#xff0c;对计算机科学不能揽其全貌&#xff0c;那么进入大学二年级以后的学习便是比较有针对性的了&#xff0c;但这种转变并非偶然&#xff0c;同样也是经过…

springboot 项目输出 sql 到控制台、 SpringBoot 中 Mybatis 打印 sql

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 SpringBoot中Mybatis打印sql 如果使用的是 application.properties 文件&#xff0c;加入如下配置&#xff1a; logging.level.com.ex…

VUE.JS 组件化开发实践

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 前言 公司目前制作一个H5活动&#xff0c;特别是有一定统一结构的活动&#xff0c;都要码一个重复的轮子。后来接到一个基于模板的活动…

提升开发效率的十个工具

Git 之前也有过不少版本控制的工具。有好的&#xff0c;也有糟糕的。不过它们都或多或少地误入歧途了。 这时候Git出现了。一旦你用上了这个神奇的工具&#xff0c;很难相像你还会碰到比它更好的了。 还没用过Git&#xff1f;试一下吧。 Stack Overflow 真的&#xff0c;我没…

input 框 去掉下面的提示文字、提示选项

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 我的一个输入框总是有提示文字&#xff1a; 2. 去掉方法&#xff0c;给 input 加一个属性&#xff1a; autocomplete"off"…

解决: VUE 项目中表单提交中文乱码、接口请求参数中文乱码

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 表单提交出现乱码&#xff1a; 接口请求乱码同于上图。 2. 解决&#xff1a; 在出现乱码的内容外面加函数&#xff1a;decodeURI()…

大数据 — Hadoop

HDFS Hadoop 1.0: 3个组件&#xff1a; NamenodeSecondNamenodeDatanodenamenode&#xff08;主节点&#xff0c;master&#xff0c;只有一个&#xff0c;单点故障的风险&#xff09;中间存储信息&#xff08;元数据&#xff09; 2种映射关系&#xff1a; path -> blockid l…

VUE:兄弟组件间传参

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1、定义一个中间 eventBus.js &#xff0c;只有 2 行代码&#xff0c;用于传参&#xff1a; // 此页面是vue 巴士&#xff0c;用于兄…

asp.net ajax的学习第一篇

自己理解的asp.net ajax的核心思想&#xff1a; javascript 调用web service <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />由于工作的原因&#xff0c;要在自己的网页上使用无刷新技术&#xff0c;增加客户体验。开始学习asp…

解决:No goals have been specified for this build. You must specify a valid lifecycle phase or a goal i

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 执行打包命令报错&#xff1a; No goals have been specified for this build. You must specify a valid lifecycle phase or a goa…

生成随机码,保存随机文件.

PrivateFunction GetRandomizeNo()Function GetRandomizeNo() As Integer 功能说明:生成随机验证码 Dim RandomizeNo As Integer Randomize() RandomizeNo 9999 * Rnd() 1000 If (RandomizeNo).ToString.Length > 5 Then R…

解决:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) ...

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题&#xff0c;即在mybatis中dao接口与mapper配置…

Mac 远程命令工具

转载于:https://www.cnblogs.com/BrightMoon/p/4479375.html

OpenCL 第6课:矩阵转置

上一节我们写了个一维向量相加的程序。这节我们来看一个44矩阵转置程序。 4X4矩阵我们采用二维数组进行存储&#xff0c;在程序设计上&#xff0c;我们让转置过程分4次转置完成&#xff0c;就是一次转一行。注意这里的OpenCL的工作维数是二维。&#xff08;当然用一维的方式也…

OpenCL 第7课:旋转变换(1)

旋转是一个常用的处理功能。图片中所有的点以某一个点为轴&#xff0c;顺时或逆时方向旋转N个角度。我们利用OpenCL就可以对图片中所有的点进行并行转换&#xff0c;大大提高效率。 上两节中&#xff0c;我们编写了CL文件来传递数组的地址&#xff0c;这一节中我们会多加入几个…

WinForms多线程编程之摇奖程序

利用多线程模拟一个电脑摇奖程序&#xff0c;如图所示。在点击【滚动号码】&#xff0c;启动线程&#xff0c;对后台的电话号码进行循环显示&#xff1b;点击【开奖】按钮&#xff0c;关闭线程&#xff0c;此时显示在文本框中的电话号码即为中奖号码 using System;using System…

idea 版本控制忽略文件、文件夹设置

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 setting 中&#xff1a; 或者底部的 设置 忽略某个文件 后面选择框可以去选择 忽略某个文件夹 后面选择框可以去选择 忽略某种文件 后面…

Windows Azure HandBook (1) IaaS相关技术

《Windows Azure Platform 系列文章目录》 1.Microsoft Azure底层是否由System Center和Hyper-V构成? Microsoft Azure虽然支持Hyper-V的VHD直接上传至Azure云端进行管理&#xff0c;但是Azure底层技术是微软自己研发的、独有的技术&#xff0c;且不对外提供。如果客户想构建属…