朴素贝叶斯

朴素:给定目标值时属性之间相互条件独立。

P(Dj∣x)P(x)=P(x∣Dj)P(Dj)P\left(D_{j} | x\right) P(x)=P\left(x | D_{j}\right) P\left(D_{j}\right) P(Dj​∣x)P(x)=P(x∣Dj​)P(Dj​)
一般简写为

P(A∣B)P(B)=P(B∣A)P(A)P(A | B) P(B)=P(B | A) P(A) P(A∣B)P(B)=P(B∣A)P(A)

  • P(A)叫做A时间的先验概率,就是一般情况下A发生的概率
  • P(B|A)叫做似然度,是A假设条件成立的情况下B发生的概率
  • P(A|B)叫做后验概率,在B发生的情况下发生A的概率,也就是要计算的概率
  • P(B)叫做标准化常量,和A的先验概率定义相似,也就是要计算的概率

Scikit-learn有以下几种贝叶斯分类的变种模型封装:

  1. 高斯朴素贝叶斯 - 利用高斯概率密度公式进行分类拟合的
  2. 多项式朴素贝叶斯 - 多用于高维度向量分类,最常用的场景是文章分类
  3. 伯努利朴素贝叶斯 - 一般是针对布尔型特征值的向量做分类的过程
from sklearn. naive_bayes import GaussianNB
clf = GaussianNB().fit(X, y)
clf.predict(p)

贝叶斯理论体系其实揭示的是一种非常典型的人类自身的推测逻辑行为。
例如走在小区里,前面光线很昏暗,前面突然闪过一个影子,从路的一边窜到另一边,速度较快体型较大,这时候大概会猜测这是一只较大的家犬。如果在非洲大草原上,可能就会猜测是一头狮子,或者猎豹。因为环境不同导致两种事件的概率不同,带有明确的倾向性,这种推断的思路或者方式本身就是贝叶斯理论体系的核心内容。

决策树

  • 如何选择树根?
    信息增益最大,也就是熵最小的,希望使得消除信息混杂的能力最强

    • 枚举型直接求即可
    • 连续型需要找适合切割的位置
构造树的思路
  • 找到信息增益最大的字段A和信息增益最大的切分点v(无论是连续类型还是枚举型)
  • 决定根节点的字段A和切分点v
  • 把字段A从所有待选的字段列表拿走,再从第一步开始找

缺点是归纳出来的树可能会非常复杂,分支和层级极多,这样在可视化上也有问题

  • 所以使用剪枝法进行树的修剪,有

    1. 前剪枝
    2. 后剪枝

两种方法,前剪枝就是提前终止树的构造,如只用了两个字段,两层树就构造完整个树了,保持了树的精简性,后剪枝就是等树完全构造完,如建模一共用了7个字段,全部用上,这样就形成了一个7层的树,如果一个分支下分类已经比较‘纯粹’了,就没必要再通过其他条件分支来进行细化,那么整个枝可以直接剪掉变成一个叶。
剪枝这个动作其实是在分类精度上和算法繁琐程度上做了一个妥协,这种思路几乎贯穿所有分类算法的始终。

随机森林

  • 强调在数据挖掘中很多算法实际是一种问题处理方式或者原则,而不是针对某一个具体的问题所书写的代码。这也是个哲学上的矛盾,针对性越强,深度越大,适应度越窄;而反过来,针对性越弱,深度越小,适应度越宽。在学习数据挖掘算法时还是更多注重这些适应度较宽的算法思路。
  • 在决策树的构造中会遇到过拟和欠拟的问题,在随机森林算法中,通常在一棵树上时不会追求及其精确的拟合的,而相反,希望的是决策树的简洁和计算的快速。
    步骤和原则:

    1. 随机挑选一个字段构造树的第一层
    2. 随机挑选一个字段构造树的第二层
    3. 。。。随机挑选一个字段构造树的第n层
    4. 本棵树构造完毕后,还需要这种方式构造m棵决策树
      补充原则:
      1.树的层级通常比较浅
      2.每棵树的分类都不能保证精度很高
      3.一个样本进行分类时同时对这m棵决策树做分类概率判断

会为一个训练集构造若干颗决策树,具体数量根据样本属性的数量和杂乱程度决定。当有新样本需要进行分类时,同时把这个样本给这几颗树,然后用类似民主投票表决的方式来决定新样本应该归属于哪类,哪类票多就归为哪类

隐马尔可夫模型

马尔可夫链的核心是,在给定当前知识或信息的情况下,观察对象过去的历史状态对预测将来是无关的。也就是在观察一个系统变化的时候,它下一个状态(第n+1个状态)如何的概率只需要观察和统计当前状态(第n个状态)即可正确得出

  • 隐马尔可夫链和贝叶斯信念网络的模型思维方式接近,区别在于,隐马尔科夫链的模型更为简化,或者可以认为隐马尔科夫链就是贝叶斯信念网络的一种特例。
  • 隐马尔科夫链是一个双重的随机过程,不仅状态转移之间是一个随机事件,状态和输出之间也是一个随机过程
  • 和HMM模型相关的算法主要分为三类,分别解决三种问题
    1. 知道骰子有几种(隐含状态数量)、每种骰子是什么(转换概率)、根据掷骰子掷出的结果(可见状态链),想知道每次掷出来的都是哪种骰子(隐含状态链)

      • 这个问题在语音识别领域叫做解码问题。有 两种解法

        1. 最大似然路径,求一串骰子序列,这串骰子序列产生观测结果的概率最大
        2. 第二种解法不是求一组骰子序列,而是求每次掷出的骰子分别是某种骰子的概率
    2. 知道骰子有几种(隐含状态数量),每种骰子是什么(转换概率),根据掷骰子掷出的结果(可见状态链),想知道掷出这个结果的概率
      • 其实目的是检测观察到的结果与已知的模型是否吻合,因为掷出来的结果很多时候都对应了一个比较大的概率。如果很多次结果都对应比较小的概率,那么已知的模型很可能是错的,有人偷偷换了骰子
    3. 知道骰子有几种(隐含状态数量),不知道每种骰子是什么(转换概率),观测到很多次掷骰子的结果(可见状态链),想反推出每种骰子是什么(转换概率)。这个问题很重要,因为是常见的情况,很多时候只有可见结果,不知道HMM中的参数,需要从可见结果中估计出。
维特比算法

解最大似然路径问题
对于问题一:关心概率最大值

  • 首先不管序列多长,要从序列长度为1算起,算序列长度为1时取到的每个骰子的最大概率。然后,逐渐增加长度,每增加一次长度,重新算一遍在这个长度下最后一个位置取到每个骰子的最大概率,当计算到最后一位时就知道最后一位是哪个骰子的概率最大了。
  • 然后,要把对应这个最大概率的序列从后往前推出来
前向算法

对于问题二:关心概率和

支持向量机SVM

关键点1:切下去点在SVM算法体系里叫“超平面”,这个“超平面”是一个抽象的概念,在一维空间里是一个点,二维是一条线。。

关键点2:过拟问题,一般来说设计分类器都要避免过拟,只要精度达到标准就足够了。
关键点3:不纯度问题。不纯度和精确度是一对矛盾,只能说在实际操作成本一样的情况下,不纯度越低越好。

  • 简洁 - 不过拟
  • 精确 - 不纯度极低

让类别X中与该直线最近的样本点的距离和非类别X中的样本点与该直线的距离最大,这里画出的这条直线是希望让被分开的两个类别尽可能远

在平面直角坐标系中,如果有一条支线方程是

Ax+By+C=0A x+B y+C=0 Ax+By+C=0
那么点
(x0,y0)\left(x_{0}, y_{0}\right) (x0​,y0​)
到该直线的距离如下:

d=∣Ax0+By0+C∣A2+B2d=\frac{\left|A x_{0}+B y_{0}+C\right|}{\sqrt{A^{2}+B^{2}}} d=A2+B2​∣Ax0​+By0​+C∣​

这种方式做分割,有了Ax+By+c=0这样一个方程,可以发现所有X类别中的样本点都满足
Ax+By+C>0A x+B y+C>0 Ax+By+C>0
反之所有非X类别的样本点都满足小于0
可以把这个超平面的公式简写为

g(v)=wv+bg(v)=w v+b g(v)=wv+b
v是样本向量,b是常数

  • 其他形式意思一样,例如

g(x)=wTx+bg(x)=w^{T} x+b g(x)=wTx+b
g(x)=w⋅x−bg(x)=w \cdot x-b g(x)=w⋅x−b

  • 二维空间中,点到直线距离

d=∣Ax0+By0+C∣A2+B2d=\frac{\left|A x_{0}+B y_{0}+C\right|}{\sqrt{A^{2}+B^{2}}} d=A2+B2​∣Ax0​+By0​+C∣​

  • 三维空间中,点到平面距离

d=∣Ax0+By0+Cz0+D∣A2+B2+C2d=\frac{\left|A x_{0}+B y_{0}+C z_{0}+D\right|}{\sqrt{A^{2}+B^{2}+C^{2}}} d=A2+B2+C2​∣Ax0​+By0​+Cz0​+D∣​

  • 范数:
    A2,A2+B2,A2+B2+C2\sqrt{A^{2}}, \quad \sqrt{A^{2}+B^{2}}, \quad \sqrt{A^{2}+B^{2}+C^{2}} A2​,A2+B2​,A2+B2+C2​
    分别是一维、二维、三维空间中的范数,写作||w||
    这样一来,距离公式就可以简写成

d=1∥w∥⋅∣g(v)∣d=\frac{1}{\|w\|} \cdot|g(v)| d=∥w∥1​⋅∣g(v)∣

SVM升维
  • 所有的n维空间上线性不可分的问题都可以考虑映射到n+1维上去构造分类函数,使得他在n维空间上的投影能够将两个类别分开。
  • 这个构造过程SVM是有通用的方法可以解决的,就是使用核函数(Kernel)进行构造。而且,有几个常用的核函数是可以拿来直接使用的,如线性核函数、多项式核函数、径向基核函数(RBF核函数)、高斯核函数等
  • 而在更高维度上的超平面方程其实没有增加更多的维度变量,例如二维空间上的向量分类问题,那么经过核函数映射,最后得到的超平面变成了二维空间上的曲线(但同时也是三维空间上的一次方程)。函数表示只是一个变量代换关系

Scikit-learn库中,用到的是一个叫做SVC的类,支持向量分类机,所支持的核函数包括linear(线性核函数)、poly(多项式核函数)、rbf(径向基核函数)、sigmoid(神经元激活函数)、precomputed(自定义核函数),默认使用rbf核函数,也是最适合做非线性关系分类标准的首选核函数。

from sklearn import svm
clf = svm.SVC(kernel='rbf').fit(X, y)
clf.predict(p)

遗传算法

遗传算法整个体系都是在说对于一种问题处理的思路和原则,而不是一个具体的代码编写过程

  • 遗传算法在解决很多领域问题都能体现很好的特性,如TSP问题(Traveling Salesman Probl,即旅行商问题,也叫货郎担问题)、九宫问题(八数码问题)、生产调度问题(Job Shop Scheduling)、背包问题(Knapsack Problem,即NP问题)等

背包问题是一种组合优化的NP(多项式复杂程度的非确定性问题)完全问题,这类NP问题的特点很明显,即生成一个解通常比验证一个给定的解需要花费更多的时间

  • 比如和数分解质因数问题

背包问题大意:有N件物品和一个容量为V的背包,第i件物品的重量是w[i],价值是v[i],求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和最大

  • 可以用穷举法,6件物品,那么可能方案是26=64个,但是如果是128件物品呢?
基因编码
物品1 物品2 物品3 物品4 物品5 物品6 染色体
1 1 1 1 1 1 111111
  • 设计初始群体,为了计算方便设置4个初始生物个体,随机产生
    100100,对应物品1、物品4存在
    101010,对应物品1、3、5存在
    010101,对应物品2、4、6存在
    101011,对应物品1、3、5、6存在
  • 适应度计算
    设计适应度的函数为物品的总价值
    基因100100 = 15+45 = 60
    基因101010 = 15+35+55 = 105
    基因010101 = 25+45+70 = 140
    基因101011 = 15+35+55+70 = 175
    物品本身有重量,所以重量也要作为判断标准之一,各自的重量分别如下
    基因100100 = 10+25 = 35
    基因101010 = 10+20+30 = 60
    基因010101 = 15+25+35 = 75
    基因101011 = 10+20+30+35 = 95
    95大于80公斤直接淘汰

然后剩下的适应度求和60+105+140=305 选择到基因100100的概率为60/305,基因101010概率为105/305,基因010101概率为140/305
类似于转盘游戏。

  • 每被被选中一次,将允许繁殖一次,结果为101010和基因010101各繁殖两次
    基因在成功被遴选后,需要进行基因重组来产生下一代,计算过程如下

染色体 101 010,010 101,交叉点位置3

  • 交叉结果 101101, 010010
    染色体 1010 10,0101 01,交叉点位置4
  • 交叉结果 101001, 010110

在基因重组之后是可以有一个基因突变的过程的,就是随机把一定比例的基因里的某一位或者几位做变化,1编程0或者0变成1,一般基因变异率低一些比较好,这里没有做变异

注意事项

使用遗传算法的时候注意几个地方,可以做调整

  • 初始群体:可以考虑初始群体的数量设置为N个,N为当前计算机最大可并行计算的数量,当然也要视并行对算法效率的改善程度而定。此外可以定性考虑,初始数量太少可能会导致在向量空间中覆盖面积过小而导致收敛到了非最优解就终止了算法
  • 适应度函数:适应度函数中的轮盘赌算法只是其中一种算法,也可以考虑使用其他算法进行遴选。注意遴选的原则是从生物多样化中进行遴选。所以淘汰比较弱的基因是可以的,但是不建议淘汰的比例太大
  • 基因重组。基因重组这个环节是变数比较大的,比如断开位置随意。其实在一次产生后代的过程中是可以允许以不同的方案产生多个后代的,这样会带来更大的基因丰富性,但是同时也要注意计算量如果发生增长,在若干代以后恐怕会严重影响计算性能。不要用一个基因自身和自身去做重组,没有意义,因为怎么重组还是自己,没有任何变化
  • 迭代结束:结束算法标准因人而异,但是总体的原则是,如果连续几代都没有明显的适应函数的增长,那就说明进化到这几代基本到头了。

遗传算法-最大值问题

  • 基因编码:这里基因编码问题就和背包问题不一样,背包问题属于离散型,但是这里是连续型,所以用离散解决连续,所以需要一个精度限制,也就是有效数字,对于有效数字应该是尽可能取,但是如果多出的有效数字对提高收益没有明显的好处,那显然取太多有效数字反而不划算。
  • 构造染色体
  • 设计初始群体
  • 适应度计算
  • 产生下一代
  • 两点注意
    1. 断开点的位置,理论上断开点任意,但是断开点靠左对数值影响变化较大,自变量跳跃也大,例如01111100101011,靠右对数值影响变化小
    2. 基因变异的位置,和断开点位置的影响完全一样
  • 迭代计算
    可能会找到局部最优

    • 解决方法:

      1. 初始种群扩大化,一开始就使得第一代有足够的机会爬到全局最高点
      2. 每一代遴选增加名额,每一代留下更多的种群个体,同让会让更多爬到全局最高点的对象存活下来

      这两种方法都是可以让找到最优解的概率大大增加的。

机器学习分类常用算法-笔记相关推荐

  1. AI:人工智能概念之机器学习中常用算法的思维导图集合(非常经典、建议收藏)之详细攻略

    AI:人工智能概念之机器学习中常用算法的思维导图集合(非常经典.建议收藏)之详细攻略 目录 机器学习算法的思维导图集合 1.ML算法思维图 2.ML算法思维导图 相关文章:ML/DL:关于算法模型的选 ...

  2. 文本分类常用算法比较

    本文对文本分类中的常用算法进行了小结,比较它们之间的优劣,为算法的选择提供依据. 一.决策树(Decision Trees) 优点: 1.决策树易于理解和解释.人们在通过解释后都有能力去理解决策树所表 ...

  3. 机器学习深度学习算法及代码实现

    原文地址:https://blog.csdn.net/qq_31456593/article/details/69340697 最近在学机器学习,学习过程中收获颇多,在此留下学习记录,希望与同道中人相 ...

  4. 数学建模比赛题型划分、常用算法及其适用场景

    目录 题型划分.常用算法及其适用场景 常见赛题类型 算法体系分类 常用算法分类 数据预处理模型及应用场景 优化类模型及应用场景 优化类模型: 聚类模型及应用场景 评价模型及应用场景 预测类模型及应用场 ...

  5. 机器学习之道学习笔记

    1. 机器学习简介 机器学习是一门多学科交叉专业,涵盖概率论知识,统计学知识,近似理论知识和复杂算法知识,使用计算机作为工具并致力于真实实时的模拟人类学习方式,并将现有内容进行知识结构划分来有效提高学 ...

  6. 《机器学习实战》学习笔记(七):利用AdaBoost 元算法提高分类性能

    欢迎关注WX公众号:[程序员管小亮] [机器学习]<机器学习实战>读书笔记及代码 总目录 https://blog.csdn.net/TeFuirnever/article/details ...

  7. 机器学习分类算法常用评价指标

    目录 1.准确率,召回率,精确率,F1-score,Fβ,ROC曲线,AUC值 2.宏平均(Macro-averaging)和微平均(Micro-averaging) 3.Python3  sklea ...

  8. 重磅 | 《机器学习综述》算法分类及特征工程手推笔记!

    编辑:Sophia | 王博(Kings)笔记 计算机视觉联盟 报道 | 公众号 CVLianMeng 这是AI博士系列笔记的第一篇(欢迎关注王博的公众号[计算机视觉联盟],我们一起学习进步!) 笔记 ...

  9. 重磅 | 《机器学习综述》算法分类及特征工程手写笔记

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 编辑:Sophia           | 王博(Kings)笔记 计算机视觉联盟  报道  | 公众号 CVLia ...

最新文章

  1. Component Interface Tricky
  2. PHP $_REQUEST获取表单提交的代码
  3. CentOS release 6.2 共享文件夹
  4. 拜托,别再拿毒鸡汤祸害我们了,我们已经很苦很努力了
  5. (2)颜色渐变及原理
  6. 软文标题怎么写吸引人?记住这几个套路
  7. 视音频编解码技术零基础学习方法
  8. C语言程序设计入门——平均值
  9. Matlab-初级教程-系列1:matlab之入门教学视频-3 数组和矩阵分析3
  10. 修改mysql数据库密码
  11. linux将文件 abc 更名为 bca.,Linux命令行操作文本文件
  12. android自定义刻度线,Android自定义控件之刻度尺控件
  13. 哥德尔奖得主Cynthia Dwork:实现算法公平性,长路漫漫
  14. C语言头文件下载迅雷,LLVM汇编|clang llvm(C语言编译器)下载v3.4 免费版 - 欧普软件下载...
  15. 科创学科相关大赛统计2021
  16. R语言trimws函数与gsub函数的区别
  17. ROS之socket通信---TCP/UDP
  18. 华为服务器系统管理,WEB界面轻松搞定服务器管理--iMana华为服务器内置的Web管理系统...
  19. Windows 编程 键盘
  20. 第八篇、正则表达式 re模块

热门文章

  1. 双波长分光光度法的原理
  2. 分享几个省电小技巧 让你的mac电脑使用时间更长
  3. Wifi共享精灵问题之错误代码8000ffff、8000fff傻傻分不清楚
  4. ES(一):ES基本概念和原理简单介绍
  5. 网络舆情监测预警与联动应急机制
  6. 常见的简单的搭建邮件服务器,邮件服务器的简单搭建
  7. 【数据库原理】关系代数
  8. 机器学习基石——VC维浅谈
  9. 【苹果家庭群发推送】软件安装public static
  10. PVA-MVSNet