监督学习一般使用两种类型的目标变量:标称型和数值型。标称型目标变量的结果只在有限目标集中取值,如真与假、动物分类集合{ 爬行类、鱼类、哺乳类、两栖类} ;数值型目标变量则可以从无限的数值集合中取值,如0.100、42.001、1000.743 等。数值型目标变量主要用于回归分析,
机器学习能让我们自数据集中受到启发,换句话说,我们会利用计算机来彰显数据背后的真实含义,这才是机器学习的真实含义。
机器学习就是把无序的数据转换成有用的信息。
机器学习用到了统计学知识。
将面临着越来越多的数据,如何从海量数据中抽取到有价值的信息将是一个非常重要的课题。
现今的情况具有很大的二义性,类似于“最大化利润”,“最小化风险”、“找到最好的市场策略”……诸如此类的任务要求都已成为常态。虽然可从互联网上获取到海量数据,但这并没有简化知识工人的工作难度。
能够从数据分析中领悟到有价值信息是非常重要的。
大量的经济活动都依赖于信息,我们不能在海量的数据中迷失,机器学习将有助于我们穿越数据雾霭,从中抽取出有用的信息。
机器学习的一项任务就是分类。
通常我们为算法输入大量已分类数据作为算法的训练集。
目标变量是机器学习算法的预测结果,在分类算法中目标变量的类型通常是离散型的,而在回归算法中通常是连续型的。训练样本集必须确定知道目标变量的值,以便机器学习算法可以发现特征和目标变量之间的关系。
为了测试机器学习算法的效果,通常使用两套独立的样本集:训练数据和测试数据。
为了测试机器学习算法的效果,通常使用两套独立的样本集:训练数据和测试数据。当机器学习程序开始运行时,使用训练样本集作为算法的输入,训练完成之后输入测试样本。
目标变量是机器学习算法的预测结果,在分类算法中目标变量的类型通常是离散型的,而在回归算法中通常是连续型的。训练样本集必须确定知道目标变量的值,以便机器学习算法可以发现特征和目标变量之间的关系。
为了测试机器学习算法的效果,通常使用两套独立的样本集:训练数据和测试数据。当机器学习程序开始运行时,使用训练样本集作为算法的输入,训练完成之后输入测试样本。输入测试样
为了测试机器学习算法的效果,通常使用两套独立的样本集:训练数据和测试数据。当机器学习程序开始运行时,使用训练样本集作为算法的输入,训练完成之后输入测试样本。输入测试样本时并不提供测试样本的目标变量,由程序决定样本属于哪个类别。
为了测试机器学习算法的效果,通常使用两套独立的样本集:训练数据和测试数据。当机器学习程序开始运行时,使用训练样本集作为算法的输入,训练完成之后输入测试样本。输入测试样本时并不提供测试样本的目标变量,由程序决定样本属于哪个类别。比较测试样本预测的目标变量值与实际样本类别之间的差别,就可以得出算法的实际精确度
机器学习的另一项任务是回归,它主要用于预测数值型数据。
分类和回归属于监督学习,之所以称之为监督学习,是因为这类算法必须知道预测什么,即目标变量的分类信息。
是非监督学习,此时数据没有类别信息,也不会给定目标值。在非监督学习中,将数据集合分成由类似的对象组成的多个类的过程被称为聚类;将寻找描述数据统计值的过程称之为密度估计。
一、使用机器学习算法的目的,想要算法完成何种任务,比如,是预测明天下雨的概率还是对投票者按照兴趣分组;二、需要分析或收集的数据是什么。
首先考虑使用机器学习算法的目的。如果想要预测目标变量的值,则可以选择监督学习算法,否则可以选择非监督学习算法。
首先考虑使用机器学习算法的目的。如果想要预测目标变量的值,则可以选择监督学习算法,否则可以选择非监督学习算法。确定选择监督学习算法之后,需要进一步确定目标变量类型,如果目标变量是离散型,如是/否、1/2/3、A/B/C或者红/黄/黑等,则可以选择分类算法;如果目标变量是连续型的数值,如0.0~100.00、-999~999或者+∞~-∞等,则需要选择回归算法。
首先考虑使用机器学习算法的目的。如果想要预测目标变量的值,则可以选择监督学习算法,否则可以选择非监督学习算法。确定选择监督学习算法之后,需要进一步确定目标变量类型,如果目标变量是离散型,如是/否、1/2/3、A/B/C或者红/黄/黑等,则可以选择分类算法;如果目标变量是连续型的数值,如0.0~100.00、-999~999或者+∞~-∞等,则需要选择回归算法。 如果不想预测目标变量的值,则可以选择非监督学习算法。进一步分析是否需要将数据划分为离散的组。如果这是唯一的需求,则使用聚类算法;如果还需要估计数据与每个分组的相似程度,则需要使用密度估计算法。
第9章我们就会使用分类算法来处理回归问题,显然这将与上面监督学习中处理回归问题的原则不同。 其次
其次需要考虑的是数据问题。我们应该充分了解数据,对实际数据了解得越充分,越容易创建符合实际需求的应用程序。主要应该了解数据的以下特性:特征值是离散型变量还是连续型变量,特征值中是否存在缺失的值,何种原因造成缺失值,数据中是否存在异常值,某个特征发生的频率如何(是否罕见得如同海底捞针),等等。
一般并不存在最好的算法或者可以给出最好结果的算法,同时还要尝试不同算法的执行效果。对于所选的每种算法,都可以使用其他的机器学习技术来改进其性能。
使得多维数据可以压缩到二维或三维,方便我们图形化展示数据。
然而大多数时候我们得到数据的特征值都不会低于三个,无法一次图形化展示所有特征。本书的后续章节将会介绍提炼数据的方法,使得多维数据可以压缩到二维或三维,方便我们图形化展示数据。
最后,利用实际的例子讲解如何使用k近邻算法改进约会网站和手写数字识别系统。
算法提取样本集中特征最相似数据(最近邻)的分类标签。
算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们只选择样本数据集中前k个最相似的数据,这就是k-近邻算法中k的出处,通常k是不大于20的整数。
k近邻算法的一般流程 收集数据:可以使用任何方法。 准备数据:距离计算所需要的数值,最好是结构化的数据格式。 分析数据:可以使用任何方法。 训练算法:此步骤不适用于k近邻算法。 测试算法:计算错误率。 使用算法:首先需要输入样本数据和结构化的输出结果,然后运行k近邻算法判定输入数据分别属于哪个分类,最后应用对计算出的分类执行后续的处理。
未知类别属性的数据集中的每个点依次执行以下操作: 1. 计算已知类别数据集中的点与当前点之间的距离; 2. 按照距离递增次序排序; 3. 选取与当前点距离最小的k个点; 4. 确定前k个点所在类别的出现频率; 5. 返回前k个点出现频率最高的类别作为当前点的预测分类。
未知类别属性的数据集中的每个点依次执行以下操作: 1. 计算已知类别数据集中的点与当前点之间的距离; 2. 按照距离递增次序排序; 3. 选取与当前点距离最小的k个点; 4. 确定前k个点所在类别的出现频率; 5. 返回前k个点出现频率最高的类别作为当前点的预测分类。
未知类别属性的数据集中的每个点依次执行以下操作: 1. 计算已知类别数据集中的点与当前点之间的距离; 2. 按照距离递增次序排序; 3. 选取与当前点距离最小的k个点; 4. 确定前k个点所在类别的出现频率; 5. 返回前k个点出现频率最高的类别作为当前点的预测分类。
操作: 1. 计算已知类别数据集中的点与当前点之间的距离; 2. 按照距离递增次序排序; 3. 选取与当前点距离最小的k个点; 4. 确定前k个点所在类别的出现频率; 5. 返回前k个点出现频率最高的类别作为当前点的预测分类。
对未知类别属性的数据集中的每个点依次执行以下操作: 1. 计算已知类别数据集中的点与当前点之间的距离; 2. 按照距离递增次序排序; 3. 选取与当前点距离最小的k个点; 4. 确定前k个点所在类别的出现频率; 5. 返回前k个点出现频率最高的类别作为当前点的预测分类。
分类器并不会得到百分百正确的结果,
在处理这种不同取值范围的特征值时,我们通常采用的方法是将数值归一化,
在处理这种不同取值范围的特征值时,我们通常采用的方法是将数值归一化,如将取值范围处理为0到1或者-1到1之间
因为飞行常客里程数远大于其他特征值。但海伦认为这三种特征是同等重要的,因此作为三个等权重的特征之一,飞行常客里程数并不应该如此严重地影响到计算结果。
机器学习算法一个很重要的工作就是评估算法的正确率,通常我们只提供已有数据的90%作为训练样本来训练分类器,而使用其余的10%数据去测试分类器,检测分类器的正确率。
错误率是2.4%,这是一个相当不错的结果。我们可以改变函数datingClassTest内变量hoRatio和变量k的值,检测错误率是否随着变量值的变化而增加。依赖于分类算法、数据集和程序设置,分类器的输出结果可能有很大的不同。
错误率仅仅是2.4%。海伦完全可以输入未知对象的属性信息,由分类软件来帮助她判定某一对象的可交往程度:讨厌、一般喜欢、非常喜欢。
k近邻算法识别手写数字数据集,错误率为1.2%。改变变量k的值、修改函数handwritingClassTest随机选取训练样本、改变训练样本的数目,都会对k近邻算法的错误率产生影响,感兴趣的话可以改变这些变量值,观察错误率的变化。
实际使用这个算法时,算法的执行效率并不高。因为算法需要为每个测试向量做2000次距离计算,每个距离计算包括了1024个维度浮点运算,总计要执行900次,此外,我们还需要为测试向量准备2MB的存储空间。是否存在一种算法减少存储空间和计算时间
实际使用这个算法时,算法的执行效率并不高。因为算法需要为每个测试向量做2000次距离计算,每个距离计算包括了1024个维度浮点运算,总计要执行900次,此外,我们还需要为测试向量准备2MB的存储空间。是否存在一种算法减少存储空间和计算时间的开销呢?k决策树就是k近邻算法的优化版,可以节省大量的计算开销。
k近邻算法是分类数据最简单最有效的算法,
k近邻算法必须保存全部数据集,如果训练数据集的很大,必须使用大量的存储空间。此外,由于必须对数据集中的每个数据计算距离值,实际使用时可能非常耗时。
二十个问题的游戏,游戏的规则很简单:参与游戏的一方在脑海里想某个事物,其他参与者向他提问题,只允许提20个问题,问题的答案也只能用对或错回答。问问题的人通过推断分解,逐步缩小待猜测事物的范围。决策树的工作原理与20个问题类似,用户输入一系列数据,然后给出游戏的答案。
k-近邻算法可以很好地完成分类任务,但是它最大的缺点就是无法给出数据的内在含义,决策树的主要优势就在于数据形式非常
决策树的一个重要任务是为了数据中所蕴含的知识信息,因此决策树可以使用不熟悉的数据集合,并从中提取出一系列规则,在这些机器根据数据创建规则时,就是机器学习的过程。
决策树的一个重要任务是为了数据中所蕴含的知识信息,因此决策树可以使用不熟悉的数据集合,并从中提取出一系列规则,在这些机器根据数据创建规则时,就是机器学习的过程。专家系统中经常使用决策树,而且决策树给出结果往往可以匹敌在当前领域具有几十年工作经验的人类专家。
决策树 优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据。 缺点:可能会产生过度匹配问题。 适用数据类型:数值型和标称型。
在构造决策树时,我们需要解决的第一个问题就是,当前数据集上哪个特征在划分数据分类时起决定性作用。
在构造决策树时,我们需要解决的第一个问题就是,当前数据集上哪个特征在划分数据分类时起决定性作用。为了找到决定性的特征,划分出最好的结果,我们必须评估每个特征。
如果数据子集内的数据不属于同一类型,则需要重复划分数据子集的过程。如何划分数据子集的算法和划分原始数据集的方法相同,直到所有具有相同类型的数据均在一个数据子集内。
决策树的一般流程 收集数据:可以使用任何方法。 准备数据:树构造算法只适用于标称型数据,因此数值型数据必须离散化。 分析数据:可以使用任何方法,构造树完成之后,我们应该检查图形是否符合预期。
决策树的一般流程 收集数据:可以使用任何方法。 准备数据:树构造算法只适用于标称型数据,因此数值型数据必须离散化。 分析数据:可以使用任何方法,构造树完成之后,我们应该检查图形是否符合预期。 训练算法:构造树的数据结构。 测试算法:使用经验树计算错误率。 使用算法:此步骤可以适用于任何监督学习算法,而使用决策树可以更好地理解数据的内在含义。
每次划分数据集时我们只选取一个特征属性,
划分数据集的大原则是:将无序的数据变得更加有序。
组织杂乱无章数据的一种方法就是使用信息论度量信息,信息论是量化处理信息的分支科学。
熵定义为信息的期望值,
熵越高,则混合的数据也越多,
度量数据集的无序程度,
度量数据集的无序程度,分类算法除了需要测量信息熵,还需要划分数据集,度量划分数据集的熵,以便判断当前是否正确地划分了数据集
度量数据集的无序程度,分类算法除了需要测量信息熵,还需要划分数据集,度量划分数据集的熵,以便判断当前是否正确地划分了数据集。我们将对每个特征划分数据集的结果计算一次信息熵,然后判断按照哪个特征划分数据集是最好的划分方式
信息增益是熵的减少或者是数据无序度的减少,大家肯定对于将熵用于度量数据无序度的减少更容易理解。最后,比较所有特征中的信息增益,返回最好特征划分的索引值
工作原理如下:得到原始数据集,然后基于最好的属性值划分数据集,由于特征值可能多于两个,因此可能存在大于两个分支的数据集划分。第一次划分之后,数据将被向下传递到树分支的下一个节点,在这个节点上,我们可以再次划分数据。因此我们可以采用递归的原则处理数据集。 递归结束的条件是:程序遍历完所有划分数据集的属性,或者每个分支下的所有实例都具有相同的分类。如果所有实例具有相同的分类,则得到一个叶子节点或者终止块。任何
工作原理如下:得到原始数据集,然后基于最好的属性值划分数据集,由于特征值可能多于两个,因此可能存在大于两个分支的数据集划分。第一次划分之后,数据将被向下传递到树分支的下一个节点,在这个节点上,我们可以再次划分数据。因此我们可以采用递归的原则处理数据集。 递归结束的条件是:程序遍历完所有划分数据集的属性,或者每个分支下的所有实例都具有相同的分类。如果所有实例具有相同的分类,则得到一个叶子节点或者终止块。任何到达叶子节点的数据必然属于叶子节点的分类
为了节省计算时间,最好能够在每次执行分类时调用已经构造好的决策树。为了解决这个问题,需要使用Python模块pickle序列化对象,
序列化对象可以在磁盘上保存对象,并在需要的时候读取出来。任何
序列化对象可以在磁盘上保存对象,并在需要的时候读取出来。任何对象都可以执行序列化操作,字典对象也不例外。
匹配选项可能太多了。我们将这种问题称之为过度匹配(
匹配选项可能太多了。我们将这种问题称之为过度匹配(overfitting)。为了减少过度匹配问题,我们可以裁剪决策树,去掉一些不必要的叶子节点。如果叶子节点只能增加少许信息,则可以删除该节点,将它并入到其他叶子节点中
使用Matplotlib的注解功能,我们可以将存储的树结构转化为容易理解的图形。Python语言的pickle模块可用于存储决策树的结构。隐形眼镜的例子表明决策树可能会产生过多的数据集划分,从而产生过度匹配数据集的问题。我们可以通过裁剪决策树,合并相邻的无法产生大量信息增益的叶节点,消除过度匹配问题。
朴素贝叶斯分类器。我们称之为“朴素”,是因为整个形式化过程只做最原始、最简单的假设。
朴素贝叶斯 优点:在数据较少的情况下仍然有效,可以处理多类别问题。 缺点:对于输入数据的准备方式较为敏感。 适用数据类型:标称型数据。
我们会选择高概率对应的类别。这就是
我们会选择高概率对应的类别。这就是贝叶斯决策理论的核心思想,即选择具有最高概率的决策。
使用贝叶斯准则,可以通过已知的三个概率值来计算未知的概率值。
朴素贝叶斯是上节介绍的贝叶斯分类器的一个扩展,是用于文档分类的常用算法。
所谓独立(independence)指的是统计意义上的独立,即一个特征或者单词出现的可能性与它和其他单词相邻没有关系。
朴素贝叶斯分类器中的另一个假设是,每个特征同等重要2。
要从文本中获取特征,需要先拆分文本。
然后将每一个文本片段表示为一个词条向量,其中值为1表示词条出现在文档中,0表示词条未出现。
朴素贝叶斯的一个最著名的应用:电子邮件垃圾过滤。
朴素贝叶斯的两个实际应用的例子,第一个例子是过滤网站的恶意留言,第二个是过滤垃圾邮件。
对于分类而言,使用概率有时要比使用硬规则更为有效。
最优化问题,比如如何在最短时间内从A点到达B点?如何投入最少工作量却获得最大的效益?如何设计发动机使得油耗最少而功率最大?
Logistic回归的目的是寻找一个非线性函数Sigmoid的最佳拟合参数,求解过程可以由最优化算法来完成。在最优化算法中,最常用的就是梯度上升算法,而梯度上升算法又可以简化为随机梯度上升算法。 随机梯度上升算法与梯度上升算法的效果相当,但占用更少的计算资源。此外,随机梯度上升是一个在线算法,它可以在新数据到来时就完成参数更新,而不需要重新读取整个数据集来进行批处理运算。
与Logistic回归类似的另一种分类算法:支持向量机,它被认为是目前最好的现成的算法之一。 第6章 支持向量机 本章内容 简单介绍支持向量机 利用SMO进行优化 利用核函数对数据进行空间转换 将SVM和其他分类器进行对比 “由于理解支持向量机(Support Vector Machines,SVM)需要掌握一些理论知识,而这对于读者来说有一定难度,于是建议读者直接下载LIBSVM使用。”
与Logistic回归类似的另一种分类算法:支持向量机,它被认为是目前最好的现成的算法之一。
文档信息
- 本文作者:zhupite
- 本文链接:https://zhupite.com/reads/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E5%AE%9E%E6%88%98.html
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)