IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 机器学习中监督学习的分类模型(入门) -> 正文阅读

[人工智能]机器学习中监督学习的分类模型(入门)

?

?

? ? ? ? 不是概要:在机器学习的入门中,作者觉得最重要的是掌握各个模型的特点。但在这之前,得先了解一下一些比较基础的概念,不想看的大家可以跳到后边,如果有发现问题希望大家能在评论区指正 (*`?′*)ノ 一起学习。


目录

1 泛化

2 模型复杂度

2.1 过拟合

2.2 欠拟合

3 分类模型与参数

3.1 最近邻算法

3.2 线性模型

3.3 朴素贝叶斯

3.4 决策树

3.5 随机森林

3.6 梯度提升决策树

3.7 支持向量机

3.8 神经网络

4 写在结尾?


1 泛化

? ? ? ? 了解泛化之前大家应该先了解一下训练集测试集,训练集和测试集指的是从同一个数据集中分割出来的两块数据。显而易见的,这俩加起来等于一整个数据集。一般来说训练集和测试集的比例是7:3。?在我们现在讨论的分类模型中,训练集和数据集都包含“数据”和“目标”这两个东西。简单来说,“数据”就是“有喉结、声音粗、头发短”,“目标”就是“男”。

? ? ? ? 而在机器学习中,用于让模型学习的那一块儿数据,就是训练集。个人感觉它的名字来源于它的功能,用来训练模型的数据集嘛。测试集,就是测试模型能力的数据集了,在模型训练完之后,一般都会被拉到测试集里面试试它的深浅。

? ? ? ? 泛化,就是用来描述“模型在训练集训练得很棒了之后,推到测试集上时它还能不能打”的东西。接上之前的例子,假如训练集里有条数据是“没喉结,声音细,头发短”,结果这个模型把人家短发姑娘判断成了男的,那么这个模型的泛化能力显而易见的,非常失败 o( ̄▽ ̄)d 。在机器学习中,泛化能力越强越好。

2 模型复杂度

? ? ? ? 关于这个点要理解的就是过拟合(Overfitting)和欠拟合(Underfitting),先来看一看我从书里直接扣出来的图片吧:

图2.1? 过拟合与欠拟合

? ? ? ? Y轴表示的是(预测)准确率,X轴表示的是模型复杂度,绿色的虚线表示的是泛化(也可以想成是测试集的准确率),蓝色虚线表示的是训练集(的准确率)。

? ? ? ? 很明显就能看出来,在Underfitting和Overfitting时,模型泛化的准确率非常地不让人满意,而中间的sweet point就肥肠不错了。?

2.1 过拟合

????????有条数据的“数据”是“有喉结、声音细、头发短”,结果模型扣得太死,觉得“这人声音怎么是细的?男生就应该声音粗!”,然后把这个可怜的孩子判断成了女生。这就是过拟合了,模型过度地关注了训练数据,对新数据的泛化性能不好。

2.2 欠拟合

? ? ? ? 有条数据的“数据”是“无喉结、声音粗、头发短”,结果模型放得太宽,觉得没喉结的都是女生,就把这个未发育的小男孩判断成了女生。这就是欠拟合,指的是模型无法获取训练集数据中的所有变化(过于简单导致模型表现差)。

题外话:记得16年玩守望先锋,就遇到一个声音特别细的队友,大家都觉得这是个妹子,于是拼命保护“她”,结果是个声带没发育的蓝孩子 ε=(′ο`*))) 。

3 分类模型与参数

? ? ? ? 不多说了,直接上正片 ヾ(?°?°?)ノ゙ 。

3.1 最近邻算法

? ? ? ? 我喜欢它的缩写knn(k nearest neighbor)。

????????适用于小型数据集,是很好的基础模型,非常容易解释。对于新手来说非常实用(因为只需调节个k参数——邻居数量)。一般来说面对新数据集,最好从像这样的简单模型开始,在对数据有进一步了解之后,再考虑构建更复杂的模型。

? ? ? ? 工作原理就是根据最近的几个数据点的类型,来判断自己属于哪个类。判断距离的公式这里不展开讲了。

图3.1? 最近邻算法

3.2 线性模型

????????非常经典且可靠的首选算法,适用于非常大的数据集,也适用于高维稀疏数据(但在低维时别的模型泛化性能会更好)。线性模型的训练/预测速度肥肠快。它的公式长这样:

? = w [0] * x [0] + w [1] * x [1] + ... + w [ p ] * x [ p ] + b
????????线性分类模型展开来说,它的子女其实没多少:逻辑回归(它是分类模型哈哈)、还有Linear SVC。对于它们来说,决定模型复杂程度的参数叫 C。C越大,模型越复杂。
图3.2? 线性模型

3.3 朴素贝叶斯

????????只适用于分类问题。比线性模型速度还快,适用于非常大的数据集和高维稀疏数据,鲁棒性(robust的音译)也不错。精度通常低于线性模型(也就是说泛化能力差了)。

? ? ? ? 在scikit-learn中有三种朴素贝叶斯分类器:高斯朴素贝叶斯GaussianNB、伯努利朴素贝叶斯BernoulliNB和多项朴素贝叶斯MultinomialNB。高斯朴素贝叶斯适用于任意连续数据,伯努利朴素贝叶斯假定输入数据为二分类数据,多项朴素贝叶斯适用于计数数据。后面俩朴素贝叶斯主要用于文本数据的分类,并且它们的预测公式的形式和线性模型完全相同:

? = w [0] * x [0] + w [1] * x [1] + ... + w [ p ] * x [ p ] + b > 0
? ? ? ??嗯,仔细一看后面多了个大于零。

3.4 决策树

????????速度很快,不需要数据缩放,可以可视化,很容易解释(这个是主要优势)。决策树的本质是一层层的if/else,嗯,相当于问数据一连串问题:吃饭没?几点回家?啥时候谈对象(bushi)?然后得出一个结论,也就是我们要的target:这人是个作息不规律且没对象的可怜娃。

? ? ? ? 完整的一套决策树并不是像上面举的例子一样简单,它非常大(可以看看下面截的图qwq)。

? ? ? ? 如果不修改参数让树直接长成,就特别特别容易过拟合,所以我们有两个方法:预剪枝pre-pruning与后剪枝post-pruning。这里讨论预剪枝,预剪枝的限制条件可能包括:限制树的最大深度max_depth、限制叶结点的最大数目max_leaf_nodes或者规定一个节点中数据点的最小数目min_samples_leaf等等巴拉巴拉。后剪枝,简单提一下吧,就是先构造树,然后删除或者折叠信息量很少的结点。

图3.3? 部分决策树

3.5 随机森林

? ? ? ? 随机森林是决策树的集成方法之一,它几乎总是比单棵决策树的表现要好,鲁棒性很好,非常强大。不需要数据缩放。不适用于高维稀疏数据。它是许多决策树的集合,每棵树都和其他树略有不同。想象一下,如果每棵树都略微不同地过拟合一下,那么平均一下很多树的结果是不是就可以降低过拟合了呢?

? ? ? ? 那么如何随机化?主要由下面几个方法,具体就不展开讲了:

? ? ? ? 一. 通过选择用于构造树的数据点(n_sample)

? ? ? ? 二. 通过选择每次划分测试的特征(max_features)

? ? ? ? 随机森林有个特别重要的参数:n_estimators。它确定了树的个数,所以非常重要。

图3.4? 随机森林

? ? ? ? 值得一提的是,当数据集很大时,随机森林会有点慢吞吞,这时候可以设置随机森林的n_jobs参数,当n_jobs等于-1时,模型就会用到计算机的所有内核。嗯,cpu和内存条,你们死得好香哇。?

3.6 梯度提升决策树

? ? ? ? 嗯,这娃就是另一种决策树的集成方法了。它精度通常比随机森林略高。与随机森林相比,训练的速度更慢,但是预测的速度更快,需要的内存也更少。比随机森林需要更多的参数调节。

? ? ? ? 与随机森林不一样,梯度提升决策树采用连续的方式构造树,每棵树都会尝试去纠正前一棵树的错误。梯度提升决策树通常使用深度很小(1到5之间)的树,这样模型占用的内存就更少了,运行速度也更快(说的就是你,大型数据集下的随机森林 _(:з」∠)_ )。

? ? ? ? 那这玩意儿是咋运作的?核心思想是合并许多简单的模型,俗称弱学习器weak learner。而这模型里面的每棵树只能对部分数据做出好的预测,因此,添加的树越多,可以不断地迭代提高性能,也许这就是这名字的由来吧。有个事情得提一下,它是监督学习里最强大也是最常用的模型之一,缺点就是需要仔细调参(它实力的上下限就很离谱)、训练时间长,同时,在高维稀疏数据集的表现也很拉胯。

3.7 支持向量机

? ? ? ? 它对于特征含义相似的中等大小的数据集很强大。需要数据缩放,对参数十分十分敏感。

? ? ? ??支持向量Support Vector大概就是这个支持向量机名字的由来了,支持向量是位于类别(Class)之间边界上的那些点,这一部分数据点对于定义决策边界来说非常重要。

? ? ? ? 核技巧这里不展开说。

? ? ? ? 支持向量机控制模型复杂度的参数是C,C越大,模型越复杂(下图中的gamma是高斯核的参数,控制模型复杂度,这里不展开讲,大家把它当空气8)。

图3.5? 支持向量机

3.8 神经网络

? ? ? ? 神经网络可以构建非常复杂的模型,特别是对于大型数据及而言。对数据缩放敏感,对参数选取敏感。大型网络需要很长的训练时间。

? ? ? ??这里只说明一下相对简单的方法,即用于分类和回归的多层感知机multilayer perceptron,简称MLP。在应用时,为了让模型更将强大,需要对数据进行类似线性模型的计算后,对结果再应用一个非线性函数——通常是校正非线性(relu)或正切双曲线(tanh),然后将结果用于加权求和,计算得到输出。

图3.6? tanh与relu

? ? ? ? 神经网络对于初学者来说太复杂了,?稍微讲讲就带过吧。

图3.7? 神经网络MLP???

4 写在结尾?

? ? ? ? 以上就是这篇博文的全部内容啦,主要介绍了过拟合、欠拟合、泛化以及本文的主体——各个分类模型的特点与应用情况。

? ? ? ? 本文是学习过程中自己做的笔记,还望大家不吝评价与纠正~ ?(・ω・)ノ?

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-07-15 16:10:46  更:2021-07-15 16:11:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/28 11:43:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码