小嘿嘿之常见分类算法之SVM/k-近邻/BP神经网络/朴素贝叶斯

本文主要是介绍小嘿嘿之常见分类算法之SVM/k-近邻/BP神经网络/朴素贝叶斯,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

SVM

是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机;SVM还包括核技巧,这使它成为实质上的非线性分类器。SVM的的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。SVM的的学习算法就是求解凸二次规划的最优化算法。
在这里插入图片描述
**支持向量:**距离超平面最近的且满足一定条件的几个训练样本点被称为支持向量。
图中有红色和蓝色两类样本点。黑色的实线就是最大间隔超平面。在这个例子中,A,B,C 三个点到该超平面的距离相等。
注意,这些点非常特别,这是因为超平面的参数完全由这三个点确定。该超平面和任何其他的点无关。如果改变其他点的位置,只要其他点不落入虚线上或者虚线内,那么超平面的参数都不会改变。A,B,C 这三个点被称为支持向量(support vectors)。
在这里插入图片描述
目标:求解能够正确划分训练数据集并且几何间隔最大的分离超平面( w ⋅ x + b = 0 w\cdot x+b=0 wx+b=0)。对于线性可分的数据集来说,这样的超平面有无穷多个(即感知机),但是几何间隔最大的分离超平面却是唯一的。
推导
几何间隔:对于给定的数据集T和超平面 w ⋅ x + b = 0 w\cdot x+b=0 wx+b=0 ,定义超平面关于样本点 ( x i , y i ) (x_i,y_i) (xi,yi) 的几何间隔为 γ i = y i ( w ∣ ∣ w ∣ ∣ ⋅ x + b ∣ ∣ w ∣ ∣ ) \gamma_i=y_i(\frac{w}{||w||}\cdot x+\frac{b}{||w||}) γi=yi(wwx+wb)
SVM模型的求解最大分割超平面问题又可以表示为以下约束最优化问题:
min ⁡ w , b 1 2 ∣ ∣ w ∣ ∣ 2 \min_{w,b}\frac{1}{2}||w||^2 minw,b21w2
s . t . y i ( w ) ⋅ x i + b ≧ 1 , i = 1 , 2 , . . . , N s.t. y_i(w)\cdot x_i+b\geqq1,i=1,2,...,N s.t.yi(w)xi+b1,i=1,2,...,N

SVM的优缺点

优点:
它工作的效果很明显,有很好的分类作用
它在高维空间中同样是有效的。
它在尺寸数量大于样本数量的情况下,也是有效的。
它在决策函数(称为支持向量)中使用训练点的子集,因此它的内存也是有效的
缺点:
当我们拥有大量的数据集时,它表现并不好,因为它所需要的训练时间更长
当数据集具有很多噪声,也就是目标类重叠时,它的表现性能也不是很好
SVM不直接提供概率估计,这些是使用昂贵的五重交叉验证来计算的。它是Python scikit-learn库的相关SVC方法。

SVM的核技术

没有kernel的SVM也就是一个线性分类器,与LR(logistic regression)没有本质的差别,就连目标函数都很相似,但训练数据并不一定能被线性区分开。SVM kernel描述:一种隐含特征空间映射、以更低计算复杂度实现向量内积运算的特殊函数。
在这里插入图片描述
在这里插入图片描述
考虑上文提到的2维空间图,要把每个数据点映射到3维空间,才有可能线性可分。而映射到了3维空间后,计算寻找最优SVM decision boundary的过程里需要计算任意两个向量的内积。
对于一个2维空间数据点v = (x, y),要把它映射到3维空间,其中一种映射关系是: p ( x , y ) = ( x 2 , 2 x y , y 2 ) p(x,y)=(x^2,\sqrt{2}xy,y^2) p(x,y)=(x2,2 xy,y2)。假如有任意两个数据点: v 1 = ( x 1 , y 1 ) , v 2 = ( x 2 , y 2 ) v_1=(x_1,y_1),v_2=(x_2,y_2) v1=(x1,y1),v2=(x2,y2),我们可以直接计算它们对应向量的内积为:
< p ( v 1 ) , p ( v 2 ) > = < ( x 1 2 , 2 x 1 y 1 , y 1 2 ) , ( ( x 2 2 , 2 x 2 y 2 , y 2 2 ) > <p(v_1),p(v_2)>=<(x^2_1,\sqrt{2}x_1y_1,y^2_1),((x^2_2,\sqrt{2}x_2y_2,y^2_2)> <p(v1),p(v2)>=<(x12,2 x1y1,y12),((x22,2 x2y2,y22)>
很明显,这是一个3维运算。假如3维还是无法线性区分,要映射到N维去,那这里就是N维运算,N越大计算量越大。有没有办法能够降低这个计算量呢?我们来展开推导一下:
( x 1 2 , 2 x 1 y 1 , y 1 2 ) , ( ( x 2 2 , 2 x 2 y 2 , y 2 2 ) = x 1 2 x 2 2 + 2 x 1 x 2 y 1 y 2 + y 1 2 y 2 2 = ( x 1 x 2 + y 1 y 2 ) 2 = ( < v 1 , v 2 > ) 2 (x^2_1,\sqrt{2}x_1y_1,y^2_1),((x^2_2,\sqrt{2}x_2y_2,y^2_2)=x^2_1x^2_2+2x_1x_2y_1y_2+y^2_1y^2_2=(x_1x_2+y_1y_2)^2=(<v_1,v_2>)^2 (x12,2 x1y1,y12),((x22,2 x2y2,y22)=x12x22+2x1x2y1y2+y12y22=(x1x2+y1y2)2=(<v1,v2>)2
经过推导可以看到,两个数据点在映射后的向量内积等于映射前向量内积的平方。如果我们引入核函数: K ( v 1 , v 2 ) = ( < v 1 , v 2 > ) 2 K(v_1,v_2)=(<v_1,v_2>)^2 K(v1,v2)=(<v1,v2>)2,那么就可以通过核函数的计算来等价于映射后的向量内积,实现了高维向量运算转换为低维向量计算(本例中是2维向量运算代替了3维向量运算)。

由此看出,即使没有kernel,只要找到映射关系,我们仍然可以实现低维空间映射到高维空间,进而通过高维向量内积运算来寻找最佳分割超平面。但是,kernel的引入,降低了向量内积运算的计算复杂度。无论我们映射到几维空间,我们只要把原有维度代入核函数,就能等价于高维上的内积运算。极端的情况下,特征空间映射到了无穷维度空间,如果没有核函数,根本无法计算出映射后的向量内积。

现在,问题关键变成了,怎么去找合适的核函数,并不是任意的函数都能隐含低维到高维的映射关系吧?
线性核 K ( x , y ) = x y T + c K(x,y)=xy^T+c K(xy)=xyT+c
多项式核 K ( x , y ) = ( α x T y + c ) d K(x,y)=(\alpha x^Ty+c)^d K(xy)=(αxTy+c)d
径向基核函数 K ( x , y ) = e x p ( − γ ∣ ∣ x − y ∣ ∣ 2 ) K(x,y)=exp(-\gamma||x-y||^2) K(xy)=exp(γxy2)
也叫高斯核 K ( x , y ) = e x p ( − ∣ ∣ x − y ∣ ∣ 2 2 σ 2 ) K(x,y)=exp(-\frac{||x-y||^2}{2\sigma^2}) K(xy)=exp(2σ2xy2)

K-近邻算法

文本分类算法、简单的机器学习算法、基本要素、距离度量、类别判定、k取值、改进策略
kNN算法是著名的模式识别统计学方法,是最好的文本分类算法之一,在机器学习分类算法中占有相当大的地位,是最简单的机器学习算法之一。
思 想 : {\color{Red}思想:}
就 是 计 算 一 个 点 与 样 本 空 间 所 有 点 之 间 的 距 离 , 取 出 与 该 点 最 近 的 k 个 点 , 然 后 统 计 这 k 个 点 里 面 所 属 分 类 比 例 最 大 的 ( “ 回 归 ” 里 面 使 用 平 均 法 ) , 则 点 A 属 于 该 分 类 。 {\color{Green}就是计算一个点与样本空间所有点之间的距离,取出与该点最近的k个点,然后统计这k个点里面所属分类比例最大的(“回归”里面使用平均法),则点A属于该分类。} kk使A
三 个 基 本 要 素 : {\color{Red}三个基本要素:}
k 值 的 选 择 、 距 离 度 量 、 分 类 决 策 规 则 {\color{Green}k值的选择、距离度量、分类决策规则} k
在这里插入图片描述
上图中,绿色圆要被决定赋予哪个类,是红色三角形还是蓝色四方形?如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那个类,如果K=5,由于蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四方形类。

算 法 步 骤 : {\color{Red}算法步骤:}
1、 算 距 离 : {\color{Blue}算距离:} 给定测试对象,计算它与训练集中的每个对象的距离;
2、 找 邻 居 : {\color{Blue}找邻居:} 圈定距离最近的k个训练对象,作为测试对象的近邻;
3、 做 分 类 : {\color{Blue}做分类:} 根据这k个近邻归属的主要类别,来对测试对象分类;

距 离 的 计 算 方 式 ( 相 似 性 度 量 ) : {\color{Red}距离的计算方式(相似性度量):}
欧 式 距 离 : d ( x , y ) = [ ∑ j = 1 d ( x j − y j ) 2 ] 1 2 = [ ( x − y ) ( x − y ) T ] 1 2 {\color{Blue}欧式距离:}d(x,y)=[\sum^d_{j=1}(x_j-y_j)^2]^{\frac{1}{2}}=[(x-y)(x-y)^T]^{\frac{1}{2}} d(x,y)=[j=1d(xjyj)2]21=[(xy)(xy)T]21
曼 哈 顿 距 离 : d ( x , y ) = ∑ j = 1 d ∣ x j − y j ∣ {\color{Blue}曼哈顿距离:}d(x,y)=\sum^d_{j=1}|x_j-y_j| d(x,y)=j=1dxjyj

类 别 的 判 定 : {\color{Red}类别的判定:}
投 票 法 : {\color{Blue}投票法:} 少数服从多数,近邻中哪个类别的点最多就分为该类。
加 权 投 票 法 : {\color{Blue}加权投票法:} 根据距离的远近,对邻近的投票进行加权,距离越近则权重越大(权重为距离平方的倒数)。

K − 近 邻 算 法 优 缺 点 : {\color{Red}K-近邻算法优缺点:} K
优 点 : {\color{Blue}优点:}
1、简单,易于理解,易于实现,无需估计参数,无需训练;
2、适合对稀有事件进行分类;
3、特别适合于多分类问题(multi-modal,对象具有多个类别标签), kNN比SVM的表现要好。 
缺 点 : {\color{Blue}缺点:}
1、样本容量较小的类域采用这种算法比较容易产生误分。该算法在分类时有个主要的不足是,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。 该算法只计算“最近的”邻居样本,某一类的样本数量很大,那么或者这类样本并不接近目标样本,或者这类样本很靠近目标样本。无论怎样,数量并不能影响运行结果。
2、该方法的另一个不足之处是计算量较大,因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点。3、可理解性差,无法给出像决策树那样的规则。

BP神经网络

转载https://www.jianshu.com/p/6ab6f53874f7
在这里插入图片描述
在这里插入图片描述
BP神经网络是一种多层的前馈神经网络,其主要的特点是:信号是前向传播的,而误差是反向传播的。具体来说,对于如下的只含一个隐层的神经网络模型:

BP神经网络的过程主要分为两个阶段,第一阶段是信号的前向传播,从输入层经过隐含层,最后到达输出层;第二阶段是误差的反向传播,从输出层到隐含层,最后到输入层,依次调节隐含层到输出层的权重和偏置,输入层到隐含层的权重和偏置。
在这里插入图片描述
神经网络的基本组成单元是神经元。神经元的通用模型如图所示
在这里插入图片描述
神经元的输出为: y = f ( ∑ i = 1 m w i x i ) y=f(\sum_{i=1}^mw_ix_i) y=f(i=1mwixi)
其中常用的激活函数有阈值函数、sigmoid函数和双曲正切函数。
在这里插入图片描述
主要介绍2种激活函数,分别是sigmoid和relu函数,函数公式如下:
s i g m o i d ( z ) = 1 1 + e − z sigmoid(z)=\frac{1}{1+e^{-z}} sigmoid(z)=1+ez1
在这里插入图片描述
r e l u ( z ) = { z , z > 0 0 , z ≦ 0 relu(z)=\begin{cases} z,z>0 \\ 0,z\leqq0 \end{cases} relu(z)={z,z>00,z0
在这里插入图片描述
注 意 : {\color{Red}注意:}
引入激活函数的目的是在模型中引入非线性。如果没有激活函数,那么无论你的神经网络有多少层,最终都是一个线性映射,单纯的线性映射无法解决线性不可分问题。引入非线性可以让模型解决线性不可分问题。
一般来说,在神经网络的中间层更加建议使用relu relurelu函数,两个原因:
relu relurelu函数计算简单,可以加快模型速度;
由于反向传播过程中需要计算偏导数,通过求导可以得到sigmoid sigmoidsigmoid函数导数的最大值为0.25,如果使用sigmoid sigmoidsigmoid函数的话,每一层的反向传播都会使梯度最少变为原来的四分之一,当层数比较多的时候可能会造成梯度消失,从而模型无法收敛。

神经网络是将多个神经元按一定规则联结在一起而形成的网络,如图 所示。
在这里插入图片描述
从图 可以看出,一个神经网络包括输入层、隐含层(中间层)和输出层。输入层神经元个数与输入数据的维数相同,输出层神经元个数与需要拟合的数据个数相同,隐含层神经元个数与层数就需要设计者自己根据一些规则和目标来设定。在深度学习出现之前,隐含层的层数通常为一层,即通常使用的神经网络是3层网络。
在这里插入图片描述

朴素贝叶斯

贝叶斯原理与其他统计学推断方法截然不同,它是建立在主观判断的基础上:在我们不了解所有客观事实的情况下,同样可以先估计一个值,然后根据实际结果不断进行修正。

贝叶斯定理
1.2 贝叶斯定理

条件概率 是指在事件 B 发生的情况下,事件 A 发生的概率。通常记为 P(A | B)。
P ( A ∣ B ) = P ( A ∩ B ) P ( B ) P(A | B)=\frac{P(A \cap B)}{P(B)} P(AB)=P(B)P(AB)
因此
P ( A ∩ B ) = P ( A ∣ B ) P ( B ) P(A \cap B)=P(A | B)P(B) P(AB)=P(AB)P(B)
P ( A ∩ B ) = P ( B ∣ A ) P ( A ) P(A \cap B)=P(B | A)P(A) P(AB)=P(BA)P(A)
可得
P ( A ∣ B ) P ( B ) = P ( B ∣ A ) P ( A ) P(A | B)P(B)=P(B | A)P(A) P(AB)P(B)=P(BA)P(A)
由此可以推出贝叶斯公式
P ( A ∣ B ) = P ( B ∣ A ) P ( A ) P ( B ) P(A | B)=\frac{P(B | A)P(A)}{P(B)} P(AB)=P(B)P(BA)P(A)

贝叶斯推断

贝叶斯公式中,P(A)称为"先验概率"
P(A|B)称为"后验概率"
P(B|A)/P(B)称为"可能性函数",这是一个调整因子,使得预估概率更接近真实概率。
后验概率=先验概率 x 调整因子
贝 叶 斯 推 断 : {\color{Red}贝叶斯推断:} 我们先预估一个"先验概率",然后加入实验结果,看这个实验到底是增强还是削弱了"先验概率",由此得到更接近事实的"后验概率"。因为在分类中,只需要找出可能性最大的那个选项,而不需要知道具体那个类别的概率是多少,所以为了减少计算量,全概率公式在实际编程中可以不使用。
朴 素 贝 叶 斯 推 断 : {\color{Red}朴素贝叶斯推断:} 是在贝叶斯推断的基础上,对条件概率分布做了条件独立性的假设。因此可得朴素贝叶斯分类器的表达式。因为以自变量之间的独立(条件特征独立)性和连续变量的正态性假设为前提,就会导致算法精度在某种程度上受影响。
y ^ = a r g m a x c ∈ Y P ( c ) ∏ i = 1 d P ( x i ∣ c ) \widehat{y}=argmax_{c\in Y}P(c)\begin{matrix} \prod_{i=1}^d P(x_i|c) \end{matrix} y =argmaxcYP(c)i=1dP(xic)

似然函数
你可以把概率模型的训练过程理解为求参数估计的过程。似然在这里就是可能性的意思,它是关于统计参数的函数。
朴素贝叶斯模型由两种类型的概率组成:
1、每个类别的概率P(C_j);
2、每个属性的条件概率P(A_i|C_j)。
贝 叶 斯 原 理 、 贝 叶 斯 分 类 和 朴 素 贝 叶 斯 {\color{Red}贝叶斯原理、贝叶斯分类和朴素贝叶斯} 这三者之间是有区别的:
贝叶斯原理是最大的概念,它解决了概率论中“逆向概率”的问题,在这个理论基础上,人们设计出了贝叶斯分类器,朴素贝叶斯分类是贝叶斯分类器中的一种,也是最简单,最常用的分类器。朴素贝叶斯之所以朴素是因为它假设属性是相互独立的,因此对实际情况有所约束,如果属性之间存在关联,分类准确率会降低。不过好在对于大部分情况下,朴素贝叶斯的分类效果都不错。
在这里插入图片描述

离散数据案例

我以下面的数据为例,这些是根据你之前的经验所获得的数据。然后给你一个新的数据:身高“高”、体重“中”,鞋码“中”,请问这个人是男还是女?
在这里插入图片描述
男女就是类型,男C1,女C2;
属性条件:身高A1,体重A2,鞋码A3
那么我们想求在 A1、A2、A3 属性下,Cj 的概率,用条件概率表示就是 P(Cj|A1A2A3)。根据上面讲的贝叶斯的公式,我们可以得出:
P ( C j ∣ A 1 A 2 A 3 ) = P ( A 1 A 2 A 3 ∣ C j ) P ( C j ) P ( A 1 A 2 A 3 ) P(C_j|A_1A_2A_3)=\frac{P(A_1A_2A_3|C_j)P(C_j)}{P(A_1A_2A_3)} P(CjA1A2A3)=P(A1A2A3)P(A1A2A3Cj)P(Cj)
因为一共有 2 个类别,所以我们只需要求得 P ( C 1 ∣ A 1 A 2 A 3 ) P(C_1|A_1A_2A_3) P(C1A1A2A3) P ( C 2 ∣ A 1 A 2 A 3 ) P(C_2|A_1A_2A_3) P(C2A1A2A3) 的概率即可,然后比较下哪个分类的可能性大,就是哪个分类结果。
等价于求 P ( A 1 A 2 A 3 ∣ C j ) P ( C j ) P(A_1A_2A_3|C_j)P(C_j) P(A1A2A3Cj)P(Cj) 最大值。
我们假定 A i A_i Ai之间是相互独立的,那么:
P ( A 1 A 2 A 3 ∣ C j ) = P ( A 1 ∣ C j ) P ( A 2 ∣ C j ) P ( A 3 ∣ C j ) P(A_1A_2A_3|C_j)=P(A_1|C_j)P(A_2|C_j)P(A_3|C_j) P(A1A2A3Cj)=P(A1Cj)P(A2Cj)P(A3Cj)
在这里插入图片描述

连续数据案例

在这里插入图片描述
那么如果给你一个新的数据,身高 180、体重 120,鞋码 41,请问该人是男是女呢?
公式还是上面的公式,这里的困难在于,由于身高、体重、鞋码都是连续变量,不能采用离散变量的方法计算概率。而且由于样本太少,所以也无法分成区间计算。怎么办呢?
这时,可以假设男性和女性的身高、体重、鞋码都是正态分布,通过样本计算出均值和方差,也就是得到正态分布的密度函数。
有了密度函数,就可以把值代入,算出某一点的密度函数的值。
比如,男性的身高是均值 179.5、标准差为 3.697 的正态分布。(我们选择不同条件下的样本,得出的均值,标准差就是条件下的概率分布了。这点稍后计算中体现)
所以男性的身高为 180 的概率为 0.1069。怎么计算得出的呢?
NORMDIST(x,mean,standard_dev,cumulative) 函数,一共有 4 个参数:
在这里插入图片描述
这里我们使用的是NORMDIST(180,179.5,3.697,0)=0.1069。
同理我们可以计算得出男性体重为 120 的概率为0.000382324,男性鞋码为 41 号的概率为 0.120304111。
在这里插入图片描述
很明显这组数据分类为男的概率大于分类为女的概率。

总结:

朴 素 贝 叶 斯 分 类 常 用 于 文 本 分 类 , 尤 其 是 对 于 英 文 等 语 言 来 说 , 分 类 效 果 很 好 。 它 常 用 于 垃 圾 文 本 过 滤 、 情 感 预 测 、 推 荐 系 统 等 。 {\color{Red}朴素贝叶斯分类常用于文本分类,尤其是对于英文等语言来说,分类效果很好。它常用于垃圾文本过滤、情感预测、推荐系统等。}
第一阶段:准备阶段
在这个阶段我们需要确定特征属性,比如上面案例中的“身高”、“体重”、“鞋码”等,同时明确预测值是什么。并对每个特征属性进行适当划分,然后由人工对一部分数据进行分类,形成训练样本。
第二阶段:训练阶段
这个阶段就是生成分类器,主要工作是计算每个类别在训练样本中的出现频率及每个特征属性划分对每个类别的条件概率。
第三阶段:应用阶段
这个阶段是使用分类器对新数据进行分类。

贝叶斯算法的优缺点

优点:
(1)朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。
(2)对小规模的数据表现很好,能个处理多分类任务,适合增量式训练,尤其是数据量超出内存时,我们可以一批批的去增量训练。
(3)对缺失数据不太敏感,算法也比较简单,常用于文本分类。
缺点:
(1)理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型给定输出类别的情况下,假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。而在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。
    (2)需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。
    (3)由于我们是通过先验和数据来决定后验的概率从而决定分类,所以分类决策存在一定的错误率。
    (4)对输入数据的表达形式很敏感。

这篇关于小嘿嘿之常见分类算法之SVM/k-近邻/BP神经网络/朴素贝叶斯的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/679810

相关文章

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

C语言线程池的常见实现方式详解

《C语言线程池的常见实现方式详解》本文介绍了如何使用C语言实现一个基本的线程池,线程池的实现包括工作线程、任务队列、任务调度、线程池的初始化、任务添加、销毁等步骤,感兴趣的朋友跟随小编一起看看吧... 目录1. 线程池的基本结构2. 线程池的实现步骤3. 线程池的核心数据结构4. 线程池的详细实现4.1 初

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig