机器学习算法快速入门

文章目录

  • 0.简介
  • 1.常用术语
    • 1) 模型
    • 2) 数据集
    • 3) 样本&特征
    • 4) 向量
    • 5) 矩阵
    • 6)假设函数&损失函数
    • 7)拟合&过拟合&欠拟合
  • 2.线性回归
  • 3.梯度下降求极值
  • 4.Logistic回归算法(分类问题)
  • 5.KNN最邻近分类算法
  • 6.朴素贝叶斯分类算法
  • 7.决策树分类算法
  • 8.信息熵
  • 9.支持向量机SVM分类算法

0.简介

  机器学习(Machine Learning,简称 ML)是人工智能领域的一个分支,也是人工智能的核心,其涉及知识非常广泛,比如概率论、统计学、近似理论、高等数学等多门学科。
  就当下而言,Python 无疑是机器学习领域最火的编程语言,这得益于 Python 对科学计算的强大支持。因此,本套教程中关于机器学习算法的代码均采用 Python 机器学习库 sklearn 编写。
  机器学习的最主要的一项工作就是“训练模型”,训练模型的过程就是机器学习算法实现的过程,这里的算法和我们经常提及的算法有些区别,比如插入排序、归并排序等,它们的结果都是“计算出来的”,只要确定输入,就可以给定一个值,而机器学习的算法是“猜”出来的,既然是猜,那么就会有对有错,机器学习会根据猜的“结果”,不断的优化模型,从而得出正确率最高的“结果”。
  机器学习的学习形式可以分为两大类:

  • 有监督学习
  • 无监督学习

  每一类学习形式都对应着相应的算法,比如线性回归算法、KNN 分类算法、朴素贝叶斯分类算法、支持向量机算法等等,并且这些算法都有与其相适用的场景,本套教程将对上述算法的原理和应用做详细的介绍。

1.常用术语

1) 模型

  模型这一词语将会贯穿整个教程的始末,它是机器学习中的核心概念。你可以把它看做一个“魔法盒”,你向它许愿(输入数据),它就会帮你实现愿望(输出预测结果)。整个机器学习的过程都将围绕模型展开,训练出一个最优质的“魔法盒”,它可以尽量精准的实现你许的“愿望”,这就是机器学习的目标。

2) 数据集

  数据集,从字面意思很容易理解,它表示一个承载数据的集合,如果说“模型”是“魔法盒”的话,那么数据集就是负责给它充能的“能量电池”,简单地说,如果缺少了数据集,那么模型就没有存在的意义了。数据集可划分为“训练集”和“测试集”,它们分别在机器学习的“训练阶段”和“预测输出阶段”起着重要的作用。

3) 样本&特征

  样本指的是数据集中的数据,一条数据被称为“一个样本”,通常情况下,样本会包含多个特征值用来描述数据,比如现在有一组描述人形态的数据“180 70 25”如果单看数据你会非常茫然,但是用“特征”描述后就会变得容易理解,如下所示:


在这里插入图片描述
图1:样本&特征

  由上图可知数据集的构成是“一行一样本,一列一特征”。特征值也可以理解为数据的相关性,每一列的数据都与这一列的特征值相关。

4) 向量

  任何一门算法都会涉及到许多数学上的术语或者公式。在本教程写作的过程中也会涉及到很多数学公式,以及专业的术语,在这里我们先对常用的基本术语做一下简单讲解。
  第一个常用术语就是“向量”,向量是机器学习的关键术语。向量在线性代数中有着严格的定义。向量也称欧几里得向量、几何向量、矢量,指具有大小和方向的量。您可以形象地把它的理解为带箭头的线段。箭头所指:代表向量的方向;线段长度:代表向量的大小。与向量对应的量叫做数量(物理学中称标量),数量只有大小,没有方向。
  在机器学习中,模型算法的运算均基于线性代数运算法则,比如行列式、矩阵运算、线性方程等等。其实对于这些运算法则学习起来并不难,它们都有着一定运算规则,只需套用即可,因此你也不必彷徨,可参考向量运算法则。向量的计算可采用 NmuPy 来实现,如下所示:

import numpy as np
#构建向量数组
a=np.array([-1,2])
b=np.array([3,-1])

#加法
a_b=a+b
#数乘
a2=a*2
b3=b*(-3)
#减法
b_a=a-b
print(a_b,a2,b3,b_a)

  输出结果:

[2 1] [-2 4] [-9 3] [-4 3]

  简而言之,数据集中的每一个样本都是一条具有向量形式的数据。

5) 矩阵

  矩阵也是一个常用的数学术语,你可以把矩阵看成由向量组成的二维数组,数据集就是以二维矩阵的形式存储数据的,你可以把它形象的理解为电子表格“一行一样本,一列一特征”表现形式如下:


在这里插入图片描述
图2:矩阵表格

如果用二维矩阵的表示的话,其格式如下所示:

在这里插入图片描述

6)假设函数&损失函数

  假设函数和损失函数是机器学习中的两个概念,它并非某个模块下的函数方法,而是我们根据实际应用场景确定的一种函数形式,就像你解决数学的应用题目一样,根据题意写出解决问题的方程组。下面分别来看一下它们的含义。
①假设函数
  假设函数(Hypothesis Function)可表述为y=f(x)其中 x 表示输入数据,而 y 表示输出的预测结果,而这个结果需要不断的优化才会达到预期的结果,否则会与实际值偏差较大。
②损失函数
  损失函数(Loss Function)又叫目标函数,简写为 L(x),这里的 x 是假设函数得出的预测结果“y”,如果 L(x) 的返回值越大就表示预测结果与实际偏差越大,越小则证明预测值越来越“逼近”真实值,这才是机器学习最终的目的。因此损失函数就像一个度量尺,让你知道“假设函数”预测结果的优劣,从而做出相应的优化策略。
③优化方法
  “优化方法”可以理解为假设函数和损失函数之间的沟通桥梁。通过 L(x) 可以得知假设函数输出的预测结果与实际值的偏差值,当该值较大时就需要对其做出相应的调整,这个调整的过程叫做“参数优化”,而如何实现优化呢?这也是机器学习过程中的难点。其实为了解决这一问题,数学家们早就给出了相应的解决方案,比如梯度下降、牛顿方与拟牛顿法、共轭梯度法等等。因此我们要做的就是理解并掌握“科学巨人”留下的理论、方法。


在这里插入图片描述

7)拟合&过拟合&欠拟合

①拟合
  形象地说,“拟合”就是把平面坐标系中一系列散落的点,用一条光滑的曲线连接起来,因此拟合也被称为“曲线拟合”。拟合的曲线一般用函数进行表示,但是由于拟合曲线会存在许多种连接方式,因此就会出现多种拟合函数。通过研究、比较确定一条最佳的“曲线”也是机器学习中一个重要的任务。如下图所示,展示一条拟合曲线(蓝色曲线):


在这里插入图片描述
图4:曲线拟合

②过拟合
  过拟合(overfitting)与是机器学习模型训练过程中经常遇到的问题,所谓过拟合,通俗来讲就是模型的泛化能力较差,也就是过拟合的模型在训练样本中表现优越,但是在验证数据以及测试数据集中表现不佳。
  举一个简单的例子,比如你训练一个识别狗狗照片的模型,如果你只用金毛犬的照片训练,那么该模型就只吸纳了金毛狗的相关特征,此时让训练好的模型识别一只“泰迪犬”,那么结果可想而知,该模型会认为“泰迪”不是一条狗。如下图所示:

在这里插入图片描述图5:过拟合

过拟合问题在机器学习中经常遇到,主要是因为训练时样本过少,特征值过多导致的,后续还会详细介绍。

③欠拟合
  欠拟合(underfitting)恰好与过拟合相反,它指的是“曲线”不能很好的“拟合”数据。在训练和测试阶段,欠拟合模型表现均较差,无法输出理想的预测结果。如下图所示:


在这里插入图片描述
图6:欠拟合

  造成欠拟合的主要原因是由于没有选择好合适的特征值,比如使用一次函数(y=kx+b)去拟合具有对数特征的散落点(y=log2x),示例图如下所示:


在这里插入图片描述
图7:欠拟合示例图

  欠拟合和过拟合是机器学习中会遇到的问题,这两种情况都不是我期望看到的,因此要避免。

2.线性回归

线性回归主要用来解决回归问题,也就是预测连续值的问题。而能满足这样要求的数学模型被称为“回归模型”。最简单的线性回归模型是我们所熟知的一次函数(即 y=kx+b),这种线性函数描述了两个变量之间的关系,其函数图像是一条连续的直线。如下图蓝色直线:


在这里插入图片描述
图1:线性连续函数

  还有另外一种回归模型,也就是非线性模型(nonlinear model),它指因变量与自变量之间的关系不能表示为线性对应关系(即不是一条直线),比如我们所熟知的对数函数、指数函数、二次函数等。

在这里插入图片描述
图2:非线性连续函数

下面通过一个具体实例讲解线性回归预测的具体流程。

  1. 数据采集
      任何模型的训练都离不开数据,因此收集数据构建数据集是必不可少的环节。比如现在要预测一套房子的售价,那么你必须先要收集周围房屋的售价,这样才能确保你预测的价格不会过高,或过低。如下表所示:
    在这里插入图片描述
      当然上述样本数量远远不足,如果想要更加准确的预测就要收集更多的数据,至少保证 100 条样本。表格中的最后一栏是“房屋售价”,这是“有监督学习”的典型特点,被称为“标签”也就是我们所说的“参考答案”。表格中的面积、数量、距离市中心距离(km),以及是否是学区房,这些都是影响最终预测结果的相关因素,我们称之为“特征”,也叫“属性”。

你可能会认为影响房屋售价的不止这些因素,没错,不过采集数据是一个很繁琐的过程,因此一般情况下,我们只选择与预测结果密切相关的重要“特征”。

  1. 构建线性回归模型
      有了数据以后,下一步要做的就是构建线性回归模型,这也是最为重要的一步,这个过程会涉及到一些数学知识,至于如何构建模型,下一节会做详细介绍。
      构建完模型,我们需要对其进行训练,训练的过程就是将表格中的数据以矩阵的形式输入到模型中,模型则通过数学统计方法计算房屋价格与各个特征之间关联关系,也就是“权值参数”。训练完成之后,您就可以对自己的房屋价格进行预测了。首先将数据按照“特征值”依次填好,并输入到模型中,最后模型会输出一个合理的预测结果。示意图如下所示:

    在这里插入图片描述
  一次函数就是最简单的“线性模型”,其直线方程表达式为y = kx + b,其中 k 表示斜率,b 表示截距,x 为自变量,y 表示因变量。函数中斜率 k 与 截距 b 控制着“直线”的“旋转”与“平移”。如果斜率 k 逐渐减小,则“直线”会向着“顺时针”方向旋转,为 k= 0 的时候与 x 轴平行。截距 b 控制“直接”的上下平移,b 为正数则向上平移,b 为负数则表示向下平移。在机器学习中斜率 k 通常用 w 表示,也就是权重系数,因此“线性方程”通过控制 w 与 b 来实现“直线”与数据点最大程度的“拟合”。

线性方程不能完全等同于“直线方程”,因为前者可以描述多维空间内直接,而后者只能描述二维平面内的 x 与 y 的关系。

  在线性回归问题中数据样本会呈现“线性”分布的态势,因此我们使用“线性方程”来最大程度的“拟合数据”。线性方程预测的结果具有连续性,下面通过示例简单说明:小亮今年 8 岁,去年 7 岁,前年 6 岁,那么他明年几岁呢?估计你闭着眼都能想到答案,但是我们要从机器学习的角度去看待这个问题。
  首先年龄、时间是一组连续性的数据,也就是因变量随着自变量规律性地连续增长,显然它是一个“回归问题”。下面把上述数据以二维数组的形式表示出来,构建一个数据集,如下所示:

[[2021,8], [2020,7], [2019,6]]

  我们知道两个点就可以确定一条“直线”,因此将两组数据带入 y = kx + b,最终求得“线程方程”:

y = x - 2013

  上述函数就是所谓的“假设函数”,通过它即可实现对结果的预测。从上述函数图像可以看出,直线对数据样本恰好“拟合”。这是最标准的拟合直线,通过它就可以“预测”出小亮明年的年龄了。上述示例就构建了一个简单的的“线性模型”。读到这里你会惊叹“怎么如此简单”,其实线性模型就是这么简单。对于机器学习而言,最关键的就是“学习”,在大量的数据中,通过不断优化参数,找到一条最佳的拟合“直线”,最终预测出一个理想的结果。
在这里插入图片描述

提示:上述示例是一个理想化的“线性模型”,在实际应用中要复杂的多,不过“万变不离其宗”

  机器学习是一门数学、统计学、计算机科学的结合技术,因此它有着独特的知识体系,比如会将数据集分为“训练集”与“测试集”,而且还会通过“损失函数”来不断优化预测结果,
  通过前面知识的学习,我们知道假设函数是用来预测结果的。前面讲述时为了让大家更容易理解“线性回归”,我们以“直线方程”进行了类比讲解,然而线性方程并不等同于“直线方程”,线性方程描绘的是多维空间内的一条“直线”,并且每一个样本都会以向量数组的形式输入到函数中,因此假设函数也会发生一些许变化,函数表达式如下所示:
Y 1 = w T X 1 + b Y_{1}=w^{T}X_{1}+b Y1=wTX1+b  这个标量公式换成了向量的形式。 Y 1 Y_{1} Y1仍然代表预测结果, X 1 X_{1} X1表示数据样本, b b b表示用来调整预测结果的“偏差度量值”,而 Y w T Yw^{T} YwT表示权值系数的转置。
  损失函数就像一个衡量尺,这个函数的返回值越大就表示预测结果与真实值偏差越大。其实计算单个样本的误差值非常简单,只需用预测值减去真实值即可: l o s s = ∑ ( w T X 1 + b − Y ) 2 n loss=\frac{\sum(w^{T}X_{1}+b-Y)^{2}}{n} loss=n(wTX1+bY)2  但是上述方法只适用于二维平面的直线方程。在线性方程中,要更加复杂、严谨一些,因此我们采用数学中的“均方误差”公式来计算单样本误差:在机器学习中使用损失函数的目的,是为了使用“优化方法”来求得最小的损失值,这样才能使预测值最逼近真实值。

3.梯度下降求极值

  我们最终的目的要得到一个最佳的“拟合”直线,因此就需要将损失函数的偏差值减到最小,我们把寻找极小值的过程称为“优化方法”,常用的优化方法有很多,比如共轭梯度法、梯度下降法、牛顿法和拟牛顿法。
  导数也叫导函数,或者微商,它是微积分中的重要基础概念,从物理学角度来看,导数是研究物体某一时刻的瞬时速度,比如你开车从家 8:00 出发到公司上班,9:00 到到达公司,这一个小时内的平均车速是 80km/h,而途中8:15:30这一时刻的速度,就被称为瞬时速度,此刻的速度可能是 100km/h,也可能是 20km/h。而从几何意义上来讲,你可以把它理解为该函数曲线在一点上的切线斜率。
  导数有其严格的数学定义,它巧妙的利用了极限的思想,也就是无限趋近于 0 的思想。设函数 y=f(x) 在点 x0 的某个邻域内有定义,当自变量 x 在 x0 处有增量 Δx,(x0+Δx)也在该邻域内时,相应地函数取得增量 Δy=f(x0+Δx)-f(x0);如果 Δy 与 Δx 之比当 Δx→0 时极限存在,则称函数 y=f(x) 在点 x0 处可导,并称这个极限为函数 y=f(x) 在点 x0 处的导数记做 :


在这里插入图片描述

  那么什么样的函数具有导数呢?是不是所有的函数都有导数?当然不是,而且函数也不一定在其所有点上都有导数。如果某函数在某一点导数存在,则称其在这一点可导,否则称为不可导。可导的函数一定连续;不连续的函数一定不可导。导数的发明者是伟大的科学家牛顿与布莱尼茨,它是微积分的一个重要的支柱。在机器学习中,我们只需会用前辈科学家们留下来的知识就行了,比如熟悉常见的导函数公式,以下列举了常用的导数公式: ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/414e88119b9b4c36b71100a023897551.png)   偏导数虽然和导数只有一字之差,但是却相差甚多,从它们的定义来看,偏导数是指对含有两个自变量的函数中的一个自变量求导,也就是说偏导数要求函数必须具备两个自变量。比如拿 z=f(x,y) 举例,如果只有自变量x变化,而自变量y固定(即看作常量),这时它就是x的一元函数,这函数对x的导数,就称为二元函数z对于x的偏导数,记做 fx(x,y) 。   梯度下降是机器学习中常用的一种优化方法,主要用来解决求极小值的问题,某个函数在某点的梯度指向该函数取得最大值的方向,那么它的反反向自然就是取得最小值的方向。在解决线性回归和 Logistic(逻辑) 回归问题时,梯度下降方法有着广泛的应用。梯度是微积分学的术语,它本质上是一个向量,表示函数在某一点处的方向导数上沿着特定的方向取得最大值,即函数在该点处沿着该方向变化最快,变化率最大。梯度下降法的计算过程就是沿梯度方向求解极小值,当然你也可以沿梯度上升的方向求解极大值。那么如何能够更好的理解“梯度下降”呢?如果不考虑其他外在因素,其实你可以把它想象成“下山”的场景,如何从一个高山上以最快的时间走到山脚下呢?其实很简单,以你所在的当前位置为基准,寻找该位置最陡峭的地方,然后沿着此方向向下走,并且每走一段距离,都要寻找当前位置“最陡峭的地方”,反复采用上述方法,最终就能以最快的时间抵达山脚下。从上述描述中,你可能感觉到平淡无奇,其实每一个词语都蕴含着数学知识,比如“以当前所在位置为基准,找到最陡峭的地方”从数学角度来讲就是找到所在点的“切线”方向,也就是对这点“求导”,然后循着切线轨迹点反复使用此方法,就可以到达极小值点。

在这里插入图片描述
  因此“梯度下降”就需要控制损失函数的w和b参数来找到最小值。比如控制 w 就会得到如下方法:

w新=w旧 - 学习率 * 损失值

  通过梯度下降计算极小值时,需要对损失函数的w求偏导求得,这个偏导也就是“梯度”,通过损失值来调节w,不断缩小损失值直到最小,这也正是梯度下降的得名来由。“学习率”是一个由外部输入的参数,被称为“超参数”,可以形象地把它理解为下山时走的“步长”大小,想要 w 多调整一点,就把学习率调高一点。不过学习率也不是越高越好,过高的学习率可能导致调整幅度过大,导致无法求得真正的最小值。当损失函数取得极小值时,此时的参数值被称为“最优参数”。因此,在机器学习中最重要的一点就是寻找“最优参数”。梯度下降是个大家族,它有很多成员,比如批量梯度下降(BGD)、随机梯度下降(SGD)、小批量梯度下降(MBGD),其中批量梯度下降是最常用的。

4.Logistic回归算法(分类问题)

  其实想要理解“分类”问题非常的简单,我们不妨拿最简单的“垃圾分类处理”的过程来认识一下这个词。现在考虑以下场景:
  小明拎着两个垃圾袋出门倒垃圾,等走到垃圾回收站的时候,小明发现摆放着两个垃圾桶,上面分别贴着“可回收”与“不可回收”。小明经过自己的判断后,把自己右手的垃圾放进了贴有“不可回收”的垃圾桶内,而左手的垃圾袋放进了“可回收”的垃圾桶内,最终完成了这次倒垃圾的过程。
  其实上述“倒垃圾”的案例就说明了“分类问题”的过程。“可回收”与“不可回收”是两种预测分类,而小明是主观判断的个体,他通过自己日常接触的知识对“垃圾种类”做出判断,我们把这个程称作“模型训练”,只有通过“训练”才可以更加准确地判断“垃圾”的种类。小明进行了两次投放动作,每一次投放都要对“垃圾”种类做出预先判断,最终决定投放到哪个垃圾桶内。这就是根据模型训练的结果进行预测的整个过程。
  下面对上述过程做简单总结:
类别标签:“可回收”与“不可回收”。
模型训练:以小明为主体,把他所接受的知识、经验做为模型训练的参照。
预测:投放垃圾的结果,预测分类是否正确。并输出预测结果。
  分类问题是当前机器学习的研究热点,它被广泛应用到各个领域,比图像识别、垃圾邮件处理、预测天气、疾病诊断等等。“分类问题”的预测结果是离散的,它比线性回归要更加复杂,那么我们应该从何处着手处理“分类问题”呢,这就引出了本节要讲的 Logistic 回归分类算法。
  Logistic 回归算法,又叫做逻辑回归算法,或者 LR 算法(Logistic Regression)。分类问题同样也可以基于“线性模型”构建。“线性模型”最大的特点就是“直来直去”不会打弯,而我们知道,分类问题的预测结果是“离散的”,即对输出数据的类别做判断。比如将类别预设条件分为“0”类和“1”类(或者“是”或者“否”)那么图像只会在 “0”和“1”之间上下起伏,如下图所示:
在这里插入图片描述
  此时你就可能会有很多疑问,线性回归函数不可能“拟合”上述图像。没错,所以接下来我们要学习另一个线性函数 Logistic 函数。

注意:在机器学习中,Logistic 函数通常用来解决二元分类问题,也就是涉及两个预设类别的问题,而当类别数量超过两个时就需要使用
Softmax 函数来解决。

  19 世纪统计学家皮埃尔·弗朗索瓦·韦吕勒发明了 Logistic 函数,该函数的叫法有很多,比如在神经网络算法中被称为 Sigmoid 函数,也有人称它为 Logistic 曲线。其函数图像如下所示:
在这里插入图片描述
  该函数图像的数学表达式如下: l o g i s t i c ( z ) = 1 1 + e − z logistic(z)=\frac{1}{1+e^{-z}} logistic(z)=1+ez1  e 称为自然常数,也就是一个固定值的“常量”,e-z 是以 e 为底、z 为变量的指数函数,还可以写为 e-x ,在编写程序代码时,通常将其写为 exp(-x)。至于这个表达式是如何推断出来的,我们没有必要深究,学会站在“巨人”的肩膀上学习也是一种难得的品质。Logistic 函数也称为 S 型生长曲线,取值范围为 (0,1),它可以将一个实数映射到 (0,1) 的区间,非常适合做二元分类。当 z=0 时,该函数的取值为 0.5,随着 z 的增大,对应的函数值将逼近于 1;而随着 z 的减小,其函数值将逼近于 0。对于 Logistic 函数而言,坐标轴 0 是一个有着特殊意义坐标,越靠近 0 和越远离 0 会出现两种截然不同的情况:任何大于 0.5 的数据都会被划分到 “1”类中;而小于 0.5 会被归如到 “0”类。因此你可以把 Logistic 看做解决二分类问题的分类器。如果想要 Logistic 分类器预测准确,那么 x 的取值距离 0 越远越好,这样结果值才能无限逼近于 0 或者 1。
  Logistic 函数能够很好的拟合“离散数据”,因此可以把它看做“假设函数”,但是还需要稍稍的改变一下形式,如下所示: l o g i s t i c ( z ) = 1 1 + e − w T x i + b logistic(z)=\frac{1}{1+e^{-w{T}x_{i}+b}} logistic(z)=1+ewTxi+b1上述公式和 Logistic 函数基本一致,只不过我们它换成了关于x的表达式,并将幂指数x换成了 “线性函数”表达式。H(x) 的函数图像呈现 S 形分布,从而能够预测出离散的输出结果。
   LogIstic 回归算法的损失函数有点复杂,也许你会感动莫名其妙,损失函数的表达式如下: L ( x ) = − y l o g H ( x ) − ( 1 − y ) l o g ( 1 − H ( x ) ) L(x)=-ylogH(x)-(1-y)log(1-H(x)) L(x)=ylogH(x)(1y)log(1H(x))

5.KNN最邻近分类算法

  为了判断未知样本的类别,以所有已知类别的样本作为参照来计算未知样本与所有已知样本的距离,然后从中选取与未知样本距离最近的 K 个已知样本,并根据少数服从多数的投票法则(majority-voting),将未知样本与 K 个最邻近样本中所属类别占比较多的归为一类。这就是 KNN 算法基本原理。
  KNN 算法原理:如果一个样本在特征空间中存在 K 个与其相邻的的样本,其中某一类别的样本数目较多,则待预测样本就属于这一类,并具有这个类别相关特性。该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。
   KNN 算法简单易于理解,无须估计参数,与训练模型,适合于解决多分类问题。但它的不足是,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有很能导致当输入一个新样本时,该样本的 K 个邻居中大容量类的样本占多数,而此时只依照数量的多少去预测未知样本的类型,就会可能增加预测错误概率。此时,我们就可以采用对样本取“权值”的方法来改进。
  下面对 KNN 算法的流程做简单介绍。KNN 分类算法主要包括以下 4 个步骤:

  • 准备数据,对数据进行预处理 。
  • 计算测试样本点(也就是待分类点)到其他每个样本点的距离(选定度量距离的方法)
  • 对每个距离进行排序,然后选择出距离最小的 K 个点。
  • 对K 个点所属的类别进行比较,按照少数服从多数的原则(多数表决思想),将测试样本点归入到 K 个点中占比最高的一类中。

6.朴素贝叶斯分类算法

  贝叶斯定理的发明者 托马斯·贝叶斯 提出了一个很有意思的假设:“如果一个袋子中共有 10 个球,分别是黑球和白球,但是我们不知道它们之间的比例是怎么样的,现在,仅通过摸出的球的颜色,是否能判断出袋子里面黑白球的比例?”
   上述问题可能与我们高中时期所接受的的概率有所冲突,因为你所接触的概率问题可能是这样的:“一个袋子里面有 10 个球,其中 4 个黑球,6 个白球,如果你随机抓取一个球,那么是黑球的概率是多少?”毫无疑问,答案是 0.4。这个问题非常简单,因为我们事先知道了袋子里面黑球和白球的比例,所以很容易算出摸一个球的概率,但是在某些复杂情况下,我们无法得知“比例”,此时就引出了贝叶斯提出的问题。
   在统计学中有两个较大的分支:一个是“频率”,另一个便是“贝叶斯”,它们都有各自庞大的知识体系,而“贝叶斯”主要利用了“相关性”一词。下面以通俗易懂的方式描述一下“贝叶斯定理”:通常,事件 A 在事件 B 发生的条件下与事件 B 在事件 A 发生的条件下,它们两者的概率并不相同,但是它们两者之间存在一定的相关性,并具有以下公式(称之为“贝叶斯公式”):

7.决策树分类算法

8.信息熵

9.支持向量机SVM分类算法

    支持向量机,英文全称“Support Vector Machines”(简称 SVM),它是机器学习中最常用的一种“分类算法”。SVM 是一种非常优雅的算法,有着非常完善的数学理论基础,其预测效果,在众多机器学习模型中可谓“出类拔萃”。在深度学习没有普及之前,“支持向量机”可以称的上是传统机器学习中的“霸主”,下面我们将介绍本节的主人公——支持向量机(SVM)。
          支持向量机是有监督学习中最有影响力的机器学习算法之一,该算法的诞生可追溯至上世纪 60 年代, 前苏联学者 Vapnik 在解决模式识别问题时提出这种算法模型,此后经过几十年的发展直至 1995 年, SVM 算法才真正的完善起来,其典型应用是解决手写字符识别问题。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python调用微信OCR识别文字和坐标

原理 在看雪看到一篇文章:逆向调用QQ截图NT与WeChatOCR-软件逆向。里面说了怎么调用微信和QQ本地的OCR模型,还有很详细的分析过程。 我稍微看了下文章,多的也看不懂。大概流程是使用mmmojo.dll这个dll来与WeChatOCR.exe做通信的&#xff0c…

1688拍立淘接口:图像识别技术引领电商搜索新革命,打造智能购物新体验!

1688拍立淘接口:技术解析与应用实践 一、引言 在电子商务蓬勃发展的今天,图像识别技术正逐渐成为各大电商平台提升用户体验、优化搜索效率的关键技术之一。作为阿里巴巴旗下的B2B采购批发平台,1688也紧跟技术潮流,推出了拍立淘接…

Dos命令的基础

雷迪斯and the乡亲们 欢迎你们来到 奇幻的编程世界 一、DOS命令基础 提示符 根目录:进入大到分区后,最外层的目录就是跟目录 工作目录:当前的所在位置/所在文件夹 二、cd命令 切换工作目录: cd 格式: cd 目标 …

巧避海森堡不确定性原理!量子比特读出技术重磅突破

内容来源:量子前哨(ID:Qforepost) 文丨浪味仙 排版丨沛贤 深度好文:1200字丨7分钟阅读 摘要:阿尔托大学研究人员用微测辐射热计替代传统参数放大器,以更少的附加噪声实现非侵入式量子比特测量…

排序链表 - LeetCode 热题 33

大家好!我是曾续缘😹 今天是《LeetCode 热题 100》系列 发车第 33 天 链表第 12 题 ❤️点赞 👍 收藏 ⭐再看,养成习惯 排序链表 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a…

带你追踪 ICASSP 2024会议现场 韩国夜景令人陶醉

会议之眼 快讯 昨天,2024年的ICASSP(International Conference on Acoustics, Speech, and Signal Processing)即国际声学、语音和信号处理会议已经在韩国首尔拉开帷幕!吸引了众多热情的与会者!本届ICASSP会议举办日期…

实验笔记之——RGBD GS-ICP SLAM配置与测试

《RGBD GS-ICP SLAM》是最新开源的一个3DGS-SLAM工作,通过利用GICP来实现当前帧gaussian与已mapping的gaussian进行匹配进行位姿的估算,并通过关键帧的选择策略来进一步提升performance~ Use G-ICP to align the current frame with the 3D GS map whic…

Redis消息队列-基于PubSub的消息队列

7.3 Redis消息队列-基于PubSub的消息队列 PubSub(发布订阅)是Redis2.0版本引入的消息传递模型。顾名思义,消费者可以订阅一个或多个channel,生产者向对应channel发送消息后,所有订阅者都能收到相关消息。 SUBSCRIBE …

OpenHarmony实战开发-图片选择和下载保存案例。

介绍 本示例介绍图片相关场景的使用:包含访问手机相册图片、选择预览图片并显示选择的图片到当前页面,下载并保存网络图片到手机相册或到指定用户目录两个场景。 效果图预览 使用说明 从主页通用场景集里选择图片选择和下载保存进入首页。分两个场景点…

Linux的重要命令(二)+了解Linux目录结构

目录 一.Linux的目录结构 二.查看文件内容命令 1.cat 命令 2.more 命令 3.less 命令 4.head 命令 5.tail 命令 6.拓展 head 和 tail 的其他用法 ​编辑 三.统计文件内容的命令-wc ​编辑 四.检索和过滤文件内容的命令-grep ​编辑 ​编辑 五.压缩命令 gzip 和 bz…

Canvas 画布基本用法详解

Canvas 画布 HTML中的 <canvas> 标签用于动态绘制图形&#xff0c;所有在<canvas>中的画图必须用JavaScript完成。 <canvas>标签是透明的&#xff0c;它是图形的容器&#xff0c;必须使用脚本才能实际绘制图形。 绘制一个简单的矩形 <!-- canvas标签&a…

Python基于卷积神经网络的车牌识别系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

【数据结构与算法】递推

来源&#xff1a;《信息学奥赛一本通》 所谓递推&#xff0c;是指从已知的初始条件出发&#xff0c;依据某种递推关系&#xff0c;逐次推出所要求的各中间结果及最后结果。其中初始条件或是问题本身已经给定&#xff0c;或是通过对问题的分析与化简后确定。 从已知条件出发逐…

jenkins(docker)安装及应用

jenkins Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具&#xff0c;起源于Hudson&#xff08;Hudson是商用的&#xff09;&#xff0c;主要用于持续、自动的构建/测试软件项目、监控外部任务的运行&#xff08;这个比较抽象&#xff0c;暂且写上&#xff0c;不做解…

论坛直击|发展新质生产力,高校怎么做?

新质生产力浪潮涌动 三大议题聚焦高校人才培养 今年全国两会的政府工作报告将“大力推进现代化产业体系建设&#xff0c;加快发展新质生产力”列在2024年政府工作任务首位&#xff0c;发展新质生产力的先导是培养拔尖创新人才&#xff0c;高等教育改革必须以立德树人为根本任…

幽灵漏洞进阶版来了

近日&#xff0c;网络安全研究人员披露了针对英特尔系统上 Linux 内核的首个原生 Spectre v2 漏洞&#xff0c;该漏洞是2018 年曝出的严重处理器「幽灵」&#xff08;Spectre&#xff09;漏洞 v2 衍生版本&#xff0c;利用该漏洞可以从内存中读取敏感数据&#xff0c;主要影响英…

Java怎么获取今天最早的时间

今天在实现项目里的一个功能的时候&#xff0c;需要获取今天最早的时间&#xff0c;比如今天是2024-4-15&#xff0c;则今天的开始时间为2024-4-14日24点之后&#xff08;2024-4-15零点&#xff09;的那个时间点。 这篇文章就分享一下博主获取这个时间的方法&#xff1a; 很简…

Python数据可视化库—Bokeh与Altair指南【第161篇—数据可视化】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在数据科学和数据分析领域&#xff0c;数据可视化是一种强大的工具&#xff0c;可以帮助我们…

代码随想录刷题day53|最长公共子序列不相交的线最大子序和

文章目录 day53学习内容一、最长公共子序列1.1、动态规划五部曲1.1.1、 确定dp数组&#xff08;dp table&#xff09;以及下标的含义1.1.2、确定递推公式1.1.3、 dp数组如何初始化1.1.4、确定遍历顺序1.1.5、输出结果 1.2、代码 二、不相交的线2.1、动态规划五部曲2.1.1、 确定…

【Git】Git的安装与常用命令

Git的安装与常用命令 一、Git的安装 &#xff08;一&#xff09;下载 官网下载&#xff1a;https://git-scm.com/downloads 镜像网站&#xff1a;https://registry.npmmirror.com/binary.html?pathgit-for-windows/ &#xff08;二&#xff09;安装 双击安装&#xff0c…