当前位置: 首页 > news >正文

模式识别与机器学习-判别式分类器

模式识别与机器学习-判别式分类器

  • 生成式模型和判别式模型的区别
  • 线性判别函数
    • 多分类情况
      • 多分类情况1
      • 多分类情况2
      • 多分类情况3
    • 例题
  • 广义线性判别函数
    • 实例
  • 分段线性判别函数
  • Fisher线性判别
  • 感知机算法
    • 例:
    • 感知机多类别分类

谨以此博客作为学习期间的记录

生成式模型和判别式模型的区别

生成式模型关注如何生成整个数据的分布,而判别式模型则专注于学习如何根据给定输入预测输出标签或数值。在实践中多数判别式模型要优于生成式模型。

在这里插入图片描述

线性判别函数

对于一个两类问题来说,就是如何找到一条线(高维空间中是超平面)去将两类不同的样本分割开来。

若x是二维模式样本 x = [ x 1 x 2 ] T x = \begin{bmatrix} x_1 \\ x_2 \end{bmatrix}^T x=[x1x2]T,其中 x 1 x_1 x1 x 2 x_2 x2是其坐标分量。
在这里插入图片描述
d ( x ) = w 1 x 1 + w 2 x 2 + w 3 = 0 d(x) = w_1x_1 + w_2x_2 + w_3 = 0 d(x)=w1x1+w2x2+w3=0
其中, x 1 x_1 x1 x 2 x_2 x2为坐标变量, w 1 w_1 w1 w 2 w_2 w2 w 3 w_3 w3为参数方程。当一个未知类别的模式代入 d ( x ) d(x) d(x) 时:

  • d ( x ) > 0 d(x) > 0 d(x)>0,则 样本属于 w 1 w_1 w1
  • d ( x ) < 0 d(x) < 0 d(x)<0,则 样本属于 w 2 w_2 w2
    此时, d ( x ) = 0 d(x) = 0 d(x)=0 称为判别函数。

n维线性判别函数的一般形式可以表示为: d ( x ) = w T x + w 0 = 0 d(\mathbf{x}) = \mathbf{w}^T \mathbf{x} + w_0 = 0 d(x)=wTx+w0=0
其中, x = [ x 1 , x 2 , … , x n ] T \mathbf{x} = [x_1, x_2, \dots, x_n]^T x=[x1,x2,,xn]T 表示 n 维模式样本, w = [ w 1 , w 2 , … , w n ] T \mathbf{w} = [w_1, w_2, \dots, w_n]^T w=[w1,w2,,wn]T 是权重向量, w 0 w_0 w0 是偏置项或阈值。通过这个判别函数,可以将样本空间分割成不同的类别区域。

多分类情况

在二分类问题中,只需要根据判别函数 d ( x ) d(x) d(x)的正负即可将样本划分为不同的类别。但是在多分类问题中,情况较为复杂,有以下三种处理方式:

多分类情况1

用线性判别函数将属于 ω i ω_i ωi类的模式与不属于 ω i ω_i ωi类的模式分开,用多个判别函数来完成分类任务,每一个判别函数 d i ( x ) d_i(x) di(x)只有一个任务,那就是这个样本是否属于 w i w_i wi类。
判别情况通常可以表示为:

  • d i ( x ) > 0 d_i(x) > 0 di(x)>0,则样本 x x x 被判定为属于 ω i ω_i ωi 类。
  • d i ( x ) < 0 d_i(x) < 0 di(x)<0,则样本 x x x 被判定为不属于 ω i ω_i ωi 类。
    在这里插入图片描述

多分类情况2

用多个判别函数来完成分类任务,判别函数 d i j ( x ) d_{ij}(x) dij(x)会判断样本x属于 w i w_i wi还是 w j w_j wj.
对一个三类情况, d 12 ( x ) = 0 对一个三类情况,d_{12}(x)=0 对一个三类情况,d12(x)=0仅能分开 ω 1 ω_1 ω1 ω 2 ω_2 ω2类,不能分开 ω 1 ω_1 ω1 ω 3 ω_3 ω3类。

要分开 M M M类模式,共需 M ( M − 1 ) 2 \frac{M(M-1)}{2} 2M(M1)个判别函数。

不确定区域:若所有 d i j ( x ) d_{ij}(x) dij(x),找不到 d i j ( x ) > 0 d_{ij}(x)>0 dij(x)>0的情况。
在这里插入图片描述

多分类情况3

在这种情况下,判别函数可以分解 d i j ( x ) = d i ( x ) − d j ( x ) d_{ij}(x) = d_i(x) - d_j(x) dij(x)=di(x)dj(x),其实 d i ( x ) d_i(x) di(x)可以理解为样本x距离类别 w i w_i wi的相似度,哪个 d i ( x ) d_i(x) di(x)大,x就离哪个类别近。
在这里插入图片描述
在这里插入图片描述

例题

Q1:
一个 10 类的模式识别问题中,有 3 类单独满足多类情况 1,其余的类别满足多类情况 2。问该模式识别问题所需判别函数的最少数目是多少?

A1:
将其余的类别满足多类情况 2的暂时先看为一类,这样的话需要4个判别函数就可以将 w 1 , w 2 , w 3 , { w 4 , w 5 , w 6 , w 7 , w 8 , w 9 , w 10 } w1,w2,w3,\{w4,w5,w6,w7,w8,w9,w10\} w1,w2,w3,{w4,w5,w6,w7,w8,w9,w10}划分开来,而要想将 w 4 , w 5 , w 6 , w 7 , w 8 , w 9 , w 10 w4,w5,w6,w7,w8,w9,w10 w4,w5,w6,w7,w8,w9,w10划分开,需要 7 ∗ ( 7 − 1 ) 2 = 21 \frac{7*(7-1)}{2} = 21 27(71)=21,因此一共需要21+4 = 25个判别函数。

Q2:
一个三类问题,其判别函数如下: d 1 ( x ) = − x 1 , d 2 ( x ) = x 1 + x 2 − 1 , d 3 ( x ) = x 1 − x 2 − 1 d_1(x) = -x_1,d_2(x) = x_1+x_2-1,d_3(x) = x_1-x_2-1 d1(x)=x1,d2(x)=x1+x21,d3(x)=x1x21

  1. 设这些函数是在多类情况 1 条件下确定的,绘出其判别界面和每一个模式类别的区域
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  2. 设为多类情况 2,并使: d 12 ( x ) = d 1 ( x ) , d 13 ( x ) = d 2 ( x ) , d 23 ( x ) = d 3 ( x ) d_{12}(x)= d_1(x), d_{13}(x)= d_2(x), d_{23}(x)= d_3(x) d12(x)=d1(x),d13(x)=d2(x),d23(x)=d3(x)。绘出其判别界面和多类情况 2 的区域
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  3. d 1 ( x ) , d 2 ( x ) 和 d 3 ( x ) d_1(x), d_2(x)和 d_3(x) d1(x),d2(x)d3(x)是在多类情况 3 的条件下确定的,绘出其判别界面和每类的区域。

如果属于类别 w 1 w_1 w1,那么 d 1 ( x ) d_1(x) d1(x)是三个判别函数中最大的,有 − x 1 > x 1 + x 2 − 1 − x 1 > x 1 − x 2 − 1 -x_1 > x_1+x_2 - 1\\ -x_1>x_1-x_2-1 x1>x1+x21x1>x1x21
化简之后有:
2 x 1 + x 2 − 1 < 0 2 x 1 − x 2 − 1 < 0 2x_1+x_2 - 1<0\\ 2x_1-x_2 - 1<0\\ 2x1+x21<02x1x21<0
同理:
如果属于类别 w 2 w_2 w2,那么 d 2 ( x ) d_2(x) d2(x)是三个判别函数中最大的,有 x 1 + x 2 − 1 > − x 1 x 1 + x 2 − 1 > x 1 − x 2 − 1 x_1+x_2 - 1>-x_1\\ x_1+x_2 - 1>x_1-x_2-1 x1+x21>x1x1+x21>x1x21
化简之后有:
2 x 1 + x 2 − 1 > 0 x 2 > 0 2x_1+x_2 - 1>0\\ x_2>0\\ 2x1+x21>0x2>0
同理:
如果属于类别 w 3 w_3 w3,那么 d 3 ( x ) d_3(x) d3(x)是三个判别函数中最大的,有 x 1 − x 2 − 1 > − x 1 x 1 − x 2 − 1 > x 1 + x 2 − 1 x_1-x_2 - 1>-x_1\\ x_1-x_2 - 1>x_1+x_2-1 x1x21>x1x1x21>x1+x21
化简之后有:
2 x 1 − x 2 − 1 > 0 x 2 < 0 2x_1-x_2 - 1>0\\ x_2<0\\ 2x1x21>0x2<0
在这里插入图片描述

广义线性判别函数

基本思想:可以在线性判别函数的基础上添加一些非线性特征,从而具有更好的表达能力。
若有一个训练用的模式集 { x } \{x\} {x},在模式空间 x x x 中线性不可分,但在模式空间 x ∗ x^* x 中线性可分。其中 x ∗ x^* x 的各个分量是 x x x 的单值实函数, x ∗ x^* x 的维数 k k k 高于 x x x 的维数 n n n,即若取
x ∗ = ( f 1 ( x ) , f 2 ( x ) , … , f k ( x ) ) , k > n x^* = (f_1(x), f_2(x), \dots, f_k(x)), \quad k > n x=(f1(x),f2(x),,fk(x)),k>n
则分类界面在 x ∗ x^* x 中是线性的,在 x x x 中是非线性的。此时只要将模式 x x x 进行非线性变换,使之变换后得到维数更高的模式 x ∗ x^* x,就可以用线性判别函数来进行分类。
此时广义线性判别函数可以表达为:
d ( x ) = w 1 f 1 ( x ) + w 2 f 2 ( x ) + . . . + w k f k ( x ) + w k + 1 d(x) = w_1f_1(x)+w_2f_2(x)+...+w_kf_k(x)+w_{k+1} d(x)=w1f1(x)+w2f2(x)+...+wkfk(x)+wk+1

实例

f i ( x ) f_i(x) fi(x) r r r次多项式, x x x是n维的情况。
在这里插入图片描述
Q3:
两类模式,每类包括 5 个 3 维不同的模式向量,且良好分布。如果它们是线性可分的,问权向量至少需要几个系数分量?假如要建立二次的多项式判别函数,又至少需要几个系数分量?(设模式的良好分布不因模式变化而改变。)

系数分量的个数为: C n + r r C_{n+r}^{r} Cn+rr

如果线性可分: C 4 1 = 4 C_{4}^{1} = 4 C41=4

如果建立二次判别函数: C 3 + 2 2 = 10 C_{3+2}^{2} = 10 C3+22=10

分段线性判别函数

在有些非线性可分场景下,可以使用二次判别函数,另一种处理方式是使用分段线性函数去逼近这个二次函数。
在这里插入图片描述

Fisher线性判别

在低维空间里解析上或计算上行得通的方法,在高维空间里往往行不通。因此,降低维数有时就会成为处理实际问题的关键。
思想:根据实际情况找到一条最好的、最易于分类的投影线。将点投影到这条线上实现降维。
在这里插入图片描述
y n = W T x n y_n = W^Tx_n yn=WTxn这样就实现了从n维样本到一维的变换。关键在于如何确定W,从而使类内样本间隔尽可能小,类间样本间隔尽可能大。
在这里插入图片描述
最终求解得到的最优参数 w ∗ = S w − 1 ( m 1 − m 2 ) w*=S_w^{-1} (m_1-m_2) w=Sw1(m1m2)

感知机算法

感知器算法实质上是一种赏罚过程

  • 对正确分类的模式则“赏”,实际上是“不罚”,即权向量不变。
  • 对错误分类的模式则“罚”,使w(k)加上一个正比于 x k x_k xk的分量。
  • 当用全部模式样本训练过一轮以后,只要有一个模式是判别错误的,则需要进行下一轮迭代,即用全部模式样本再训练一次。
  • 如此不断反复直到全部模式样本进行训练都能得到正确的分类结果为止。

在这里插入图片描述

例:

  • 用感知器算法求下列模式分类的解向量 w w w :
    ω 1 : { ( 0 0 0 ) T , ( 1 0 0 ) T , ( 1 0 1 ) T , ( 1 1 0 ) T } ω 2 : { ( 0 0 1 ) T , ( 0 1 1 ) T , ( 0 1 0 ) T , ( 1 1 1 ) T } \begin{aligned} & \omega_1:\left\{\left(\begin{array}{lll} 0 & 0 & 0 \end{array}\right)^{\mathrm{T}},\left(\begin{array}{lll} 1 & 0 & 0 \end{array}\right)^{\mathrm{T}},\left(\begin{array}{lll} 1 & 0 & 1 \end{array}\right)^{\mathrm{T}},\left(\begin{array}{lll} 1 & 1 & 0 \end{array}\right)^{\mathrm{T}}\right\} \\ & \omega_2:\left\{\left(\begin{array}{lll} 0 & 0 & 1 \end{array}\right)^{\mathrm{T}},\left(\begin{array}{lll} 0 & 1 & 1 \end{array}\right)^{\mathrm{T}},\left(\begin{array}{lll} 0 & 1 & 0 \end{array}\right)^{\mathrm{T}},\left(\begin{array}{lll} 1 & 1 & 1 \end{array}\right)^{\mathrm{T}}\right\} \\ & \end{aligned} ω1:{(000)T,(100)T,(101)T,(110)T}ω2:{(001)T,(011)T,(010)T,(111)T}

先将样本点写为增广形式
w 1 : { ( 0 , 0 , 0 , 1 ) , ( 1 , 0 , 0 , 1 ) , ( 1 , 0 , 1 , 1 ) , ( 1 , 1 , 0 , 1 ) } w 2 : { ( 0 , 0 , 1 , 1 ) , ( 0 , 1 , 1 , 1 ) , ( 0 , 1 , 0 , 1 ) , ( 1 , 1 , 1 , 1 ) } w_1:\{(0,0,0,1),(1,0,0,1),(1,0,1,1),(1,1,0,1)\}\\ w_2:\{(0,0,1,1),(0,1,1,1),(0,1,0,1),(1,1,1,1)\} w1:{(0,0,0,1),(1,0,0,1),(1,0,1,1),(1,1,0,1)}w2:{(0,0,1,1),(0,1,1,1),(0,1,0,1),(1,1,1,1)}

将属于 w 2 w_2 w2的样本统一乘上-1,得到 w 2 : { ( 0 , 0 , − 1 , − 1 ) , ( 0 , − 1 , − 1 , − 1 ) , ( 0 , − 1 , 0 , − 1 ) , ( − 1 , − 1 − 1 , − 1 ) } w_2:\{(0,0,-1,-1),(0,-1,-1,-1),(0,-1,0,-1),(-1,-1-1,-1)\} w2:{(0,0,1,1),(0,1,1,1),(0,1,0,1),(1,11,1)}

初始化 w 0 = ( 0 , 0 , 0 , 0 ) , C = 1 w_0 = (0,0,0,0),C = 1 w0=(0,0,0,0),C=1

w 0 ∗ ( 0 , 0 , 0 , 1 ) = 0 , w 1 = w 0 + C ∗ ( 0 , 0 , 0 , 1 ) = ( 0 , 0 , 0 , 1 ) w 1 ∗ ( 1 , 0 , 0 , 1 ) = 1 , w 2 = w 1 = ( 0 , 0 , 0 , 1 ) w 2 ∗ ( 1 , 0 , 1 , 1 ) = 1 , w 3 = w 2 = ( 0 , 0 , 0 , 1 ) w 3 ∗ ( 1 , 1 , 0 , 1 ) = 1 , w 4 = w 3 = ( 0 , 0 , 0 , 1 ) w 4 ∗ ( 0 , 0 , − 1 , − 1 ) = − 1 , w 5 = w 4 + C ∗ ( 0 , 0 , − 1 , − 1 ) = ( 0 , 0 , − 1 , 0 ) w 5 ∗ ( 0 , − 1 , − 1 , − 1 ) = 1 , w 6 = w 5 = ( 0 , 0 , − 1 , 0 ) w 6 ∗ ( 0 , − 1 , 0 , − 1 ) = 0 , w 7 = w 6 + C ∗ ( 0 , − 1 , 0 , − 1 ) = ( 0 , − 1 , − 1 , − 1 ) w 7 ∗ ( − 1 , − 1 , − 1 , − 1 ) = 3 , w 8 = w 7 = ( 0 , − 1 , − 1 , − 1 ) . . . w 39 = ( 2. , − 2. , − 2. , 1 ) d = 2 x 1 − 2 x 2 − 2 x 3 + x 4 w_0 * (0,0,0,1) = 0,\qquad w_1 = w_0 + C*(0,0,0,1) = (0,0,0,1)\\ w_1*(1,0,0,1) = 1,\qquad w_2 = w_1 = (0,0,0,1)\\ w_2*(1,0,1,1) = 1,\qquad w_3 = w_2 = (0,0,0,1)\\ w_3*(1,1,0,1) = 1,\qquad w_4 = w_3 = (0,0,0,1)\\ w_4*(0,0,-1,-1) = -1,\qquad w_5 = w_4 + C*(0,0,-1,-1) = (0,0,-1,0)\\ w_5*(0,-1,-1,-1) = 1,\qquad w_6 = w_5 = (0,0,-1,0)\\ w_6*(0,-1,0,-1) = 0,\qquad w_7 = w_6+C*(0,-1,0,-1) = (0,-1,-1,-1)\\ w_7*(-1,-1,-1,-1) = 3,\qquad w_8 = w_7 = (0,-1,-1,-1)\\ ...\\ w_{39} = (2., -2., -2., 1)\\ d = 2x_1-2x_2-2x_3+x_4 w0(0,0,0,1)=0,w1=w0+C(0,0,0,1)=(0,0,0,1)w1(1,0,0,1)=1,w2=w1=(0,0,0,1)w2(1,0,1,1)=1,w3=w2=(0,0,0,1)w3(1,1,0,1)=1,w4=w3=(0,0,0,1)w4(0,0,1,1)=1,w5=w4+C(0,0,1,1)=(0,0,1,0)w5(0,1,1,1)=1,w6=w5=(0,0,1,0)w6(0,1,0,1)=0,w7=w6+C(0,1,0,1)=(0,1,1,1)w7(1,1,1,1)=3,w8=w7=(0,1,1,1)...w39=(2.,2.,2.,1)d=2x12x22x3+x4

  • 编写求解上述问题的感知器算法程序 (选做)
import numpy as np# 定义样本集
w1_samples = np.array([[0, 0, 0, 1], [1, 0, 0, 1], [1, 0, 1, 1], [1, 1, 0, 1]])
w2_samples = np.array([[0, 0, -1, -1], [0, -1, -1, -1], [0, -1, 0, -1], [-1, -1, -1, -1]])# 合并样本并初始化增广形式
X = np.vstack((w1_samples, w2_samples))# 初始权重向量和参数设置
w = np.zeros(X.shape[1])  # 初始权重向量
C = 1  # 正则化参数
converged = False  # 收敛标志# 迭代更新权重向量
iteration = 0
while not converged:converged = Truefor i in range(X.shape[0]):if np.dot(w, X[i]) <= 0:  # 判断误分类点w = w + C * X[i]  # 更新权重向量converged = False  # 存在误分类点,未收敛print(f"Iteration {iteration + 1}: w = {w}")iteration += 1print(f"\nConverged at iteration {iteration}: Final w = {w}")

输出结果:

Iteration 1: w = [0. 0. 0. 1.]
Iteration 2: w = [0. 0. 0. 1.]
Iteration 3: w = [0. 0. 0. 1.]
Iteration 4: w = [0. 0. 0. 1.]
Iteration 5: w = [ 0.  0. -1.  0.]
Iteration 6: w = [ 0.  0. -1.  0.]
Iteration 7: w = [ 0. -1. -1. -1.]
Iteration 8: w = [ 0. -1. -1. -1.]
Iteration 9: w = [ 0. -1. -1.  0.]
Iteration 10: w = [ 1. -1. -1.  1.]
Iteration 11: w = [ 1. -1. -1.  1.]
Iteration 12: w = [ 1. -1. -1.  1.]
Iteration 13: w = [ 1. -1. -2.  0.]
Iteration 14: w = [ 1. -1. -2.  0.]
Iteration 15: w = [ 1. -1. -2.  0.]
Iteration 16: w = [ 1. -1. -2.  0.]
Iteration 17: w = [ 1. -1. -2.  1.]
Iteration 18: w = [ 1. -1. -2.  1.]
Iteration 19: w = [ 2. -1. -1.  2.]
Iteration 20: w = [ 2. -1. -1.  2.]
Iteration 21: w = [ 2. -1. -2.  1.]
Iteration 22: w = [ 2. -1. -2.  1.]
Iteration 23: w = [ 2. -2. -2.  0.]
Iteration 24: w = [ 2. -2. -2.  0.]
Iteration 25: w = [ 2. -2. -2.  1.]
Iteration 26: w = [ 2. -2. -2.  1.]
Iteration 27: w = [ 2. -2. -2.  1.]
Iteration 28: w = [ 2. -2. -2.  1.]
Iteration 29: w = [ 2. -2. -2.  1.]
Iteration 30: w = [ 2. -2. -2.  1.]
Iteration 31: w = [ 2. -2. -2.  1.]
Iteration 32: w = [ 2. -2. -2.  1.]
Iteration 33: w = [ 2. -2. -2.  1.]
Iteration 34: w = [ 2. -2. -2.  1.]
Iteration 35: w = [ 2. -2. -2.  1.]
Iteration 36: w = [ 2. -2. -2.  1.]
Iteration 37: w = [ 2. -2. -2.  1.]
Iteration 38: w = [ 2. -2. -2.  1.]
Iteration 39: w = [ 2. -2. -2.  1.]
Iteration 40: w = [ 2. -2. -2.  1.]Converged at iteration 40: Final w = [ 2. -2. -2.  1.]

感知机多类别分类

在这里插入图片描述
用多类感知器算法求下列模式的判别函数:
ω 1 : ( − 1 , − 1 ) T , ω 2 : ( 0 , 0 ) T , ω 3 : ( 1 , 1 ) T ω_1: (-1, -1)^T, ω_2: (0, 0)^T, ω_3: (1, 1)^T ω1:(1,1)Tω2:(0,0)Tω3:(1,1)T

将样本写为增广形式 ω 1 : ( − 1 , − 1 , 1 ) T , ω 2 : ( 0 , 0 , 1 ) T , ω 3 : ( 1 , 1 , 1 ) T ω_1: (-1, -1,1)^T, ω_2: (0, 0,1)^T, ω_3: (1, 1,1)^T ω1:(1,1,1)Tω2:(0,0,1)Tω3:(1,1,1)T

初始化 d 1 ( x ) = ( 0 , 0 , 0 ) , d 2 ( x ) = ( 0 , 0 , 0 ) , d 3 ( x ) = ( 0 , 0 , 0 ) d_1(x) = (0,0,0),d_2(x) = (0,0,0),d_3(x) = (0,0,0) d1(x)=(0,0,0),d2(x)=(0,0,0),d3(x)=(0,0,0)

d 1 ∗ w 1 = 0 , d 2 ∗ w 1 = 0 , d 3 ∗ w 1 = 0 , d 1 = d 1 + w 1 = ( − 1 , − 1 , 1 ) , d 2 = d 2 − w 1 = ( 1 , 1 , − 1 ) , d 3 = d 3 − w 1 = ( 1 , 1 , − 1 ) d 1 ∗ w 2 = 1 , d 2 ∗ w 2 = − 1 , d 3 ∗ w 3 = − 1 , d 1 = d 1 − w 2 = ( − 1 , − 1 , 0 ) , d 2 = d 2 + w 2 = ( 1 , 1 , 0 ) , d 3 = d 3 − w 2 = ( 1 , 1 , − 2 ) d 1 ∗ w 3 = − 2 , d 2 ∗ w 3 = 2 , d 3 ∗ w 3 = 0 , d 1 = ( − 1 , − 1 , 0 ) , d 2 = d 2 − w 3 = ( 0 , 0 , − 1 ) , d 3 = d 3 + w 3 = ( 2 , 2 , − 1 ) d 1 ∗ w 1 = 2 , d 2 ∗ w 1 = − 1 , d 3 ∗ w 1 = − 5 , d 1 = ( − 1 , − 1 , 0 ) , d 2 = ( 0 , 0 , − 1 ) , d 3 = ( 2 , 2 , − 1 ) d 1 ∗ w 2 = 0 , d 2 ∗ w 2 = − 1 , d 3 ∗ w 2 = − 1 , d 1 = d 1 − w 2 = ( − 1 , − 1 , − 1 ) , d 2 = d 2 + w 2 = ( 0 , 0 , 0 ) , d 3 = d 3 − w 2 = ( 2 , 2 , − 2 ) d 1 ∗ w 3 = − 3 , d 2 ∗ w 3 = 0 , d 3 ∗ w 3 = 2 , d 1 = ( − 1 , − 1 , − 1 ) , d 2 = ( 0 , 0 , 0 ) , d 3 = ( 2 , 2 , − 2 ) d 1 ∗ w 1 = 1 , d 2 ∗ w 1 = 0 , d 3 ∗ w 1 = − 6 , d 1 = ( − 1 , − 1 , − 1 ) , d 2 = ( 0 , 0 , 0 ) , d 3 = ( 2 , 2 , − 2 ) d 1 ∗ w 2 = − 1 , d 2 ∗ w 2 = 0 , d 3 ∗ w 2 = − 2 , d 1 = ( − 1 , − 1 , − 1 ) , d 2 = ( 0 , 0 , 0 ) , d 3 = ( 2 , 2 , − 2 ) d_1*w_1 = 0,\quad d_2*w_1 = 0,\quad d_3*w_1 = 0,\quad d_1 = d_1 + w_1 = (-1,-1,1),\quad d_2 = d_2 - w_1 = (1,1,-1),\quad d_3 = d_3 - w_1 = (1,1,-1)\\ d_1*w_2 = 1,\quad d_2*w_2 = -1,\quad d_3*w_3 = -1,\quad d_1 = d_1 - w_2 = (-1,-1,0),\quad d_2 = d_2 + w_2 = (1,1,0),\quad d_3 = d_3 - w_2 = (1,1,-2)\\ d_1*w_3 = -2,\quad d_2*w_3 = 2,\quad d_3*w_3 = 0,\quad d_1 = (-1,-1,0),\quad d_2 = d_2 - w_3 = (0,0,-1),\quad d_3 = d_3 + w_3 = (2,2,-1)\\ d_1*w_1 = 2,\quad d_2*w_1 = -1,\quad d_3*w_1 = -5,\quad d_1 = (-1,-1,0),\quad d_2 = (0,0,-1),\quad d_3 = (2,2,-1)\\ d_1*w_2 = 0,\quad d_2*w_2 = -1,\quad d_3*w_2 = -1,\quad d_1 =d_1 - w_2 = (-1,-1,-1),\quad d_2 = d_2 + w_2 = (0,0,0),\quad d_3 =d_3 -w_2 = (2,2,-2)\\ d_1*w_3 = -3,\quad d_2*w_3 = 0,\quad d_3*w_3 = 2,\quad d_1 = (-1,-1,-1),\quad d_2 = (0,0,0),\quad d_3 = (2,2,-2)\\ d_1*w_1= 1,\quad d_2*w_1= 0,\quad d_3*w_1 = -6,\quad d_1 = (-1,-1,-1),\quad d_2 = (0,0,0),\quad d_3 = (2,2,-2)\\ d_1*w_2= -1,\quad d_2*w_2= 0,\quad d_3*w_2 = -2,\quad d_1 = (-1,-1,-1),\quad d_2 = (0,0,0),\quad d_3 = (2,2,-2)\\ d1w1=0,d2w1=0,d3w1=0,d1=d1+w1=(1,1,1),d2=d2w1=(1,1,1),d3=d3w1=(1,1,1)d1w2=1,d2w2=1,d3w3=1,d1=d1w2=(1,1,0),d2=d2+w2=(1,1,0),d3=d3w2=(1,1,2)d1w3=2,d2w3=2,d3w3=0,d1=(1,1,0),d2=d2w3=(0,0,1),d3=d3+w3=(2,2,1)d1w1=2,d2w1=1,d3w1=5,d1=(1,1,0),d2=(0,0,1),d3=(2,2,1)d1w2=0,d2w2=1,d3w2=1,d1=d1w2=(1,1,1),d2=d2+w2=(0,0,0),d3=d3w2=(2,2,2)d1w3=3,d2w3=0,d3w3=2,d1=(1,1,1),d2=(0,0,0),d3=(2,2,2)d1w1=1,d2w1=0,d3w1=6,d1=(1,1,1),d2=(0,0,0),d3=(2,2,2)d1w2=1,d2w2=0,d3w2=2,d1=(1,1,1),d2=(0,0,0),d3=(2,2,2)
因此最终
d 1 = − x 1 − x 2 − 1 d 2 = 0 d 3 = 2 x 1 + 2 x 2 − 2 d_1 = -x_1 - x_2 - 1\\ d_2 = 0\\ d_3 = 2x_1+2x_2-2 d1=x1x21d2=0d3=2x1+2x22

相关文章:

模式识别与机器学习-判别式分类器

模式识别与机器学习-判别式分类器 生成式模型和判别式模型的区别线性判别函数多分类情况多分类情况1多分类情况2多分类情况3 例题 广义线性判别函数实例 分段线性判别函数Fisher线性判别感知机算法例&#xff1a;感知机多类别分类 谨以此博客作为学习期间的记录 生成式模型和判…...

c++11 标准模板(STL)(std::pair)(七)访问 pair 的一个元素

定义于头文件 <utility> std::pair 是一个结构体模板&#xff0c;其可于一个单元存储两个相异对象。 pair 是 std::tuple 的拥有两个元素的特殊情况。 访问 pair 的一个元素 std::get(std::pair) template< size_t I, class T1, class T2 > typename std::tuple…...

IP 地址归属地查询

IP 地址归属地查询 1. IP 地址归属地查询2. IP 地址归属地查询References 1. IP 地址归属地查询 https://tool.lu/ip/index.html 2. IP 地址归属地查询 https://www.ip.cn/ip/.html References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/...

实战经验分享:在Java中灵活应用Excel注释和批注

本文由葡萄城技术团队原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 前言 注释及批注是 Excel 中比较常用的功能&#xff0c;注释往往针对单元格&#xff0c;起到解释说明的作用&a…...

AUTOSAR从入门到精通-车载以太网(三)

目录 前言 原理 车载以太网总体架构 物理层 数据链路层 以太网帧格式<...

【自然语言处理】用Python从文本中删除个人信息-第二部分

自我介绍 做一个简单介绍&#xff0c;酒架年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【…...

设计模式之-中介者模式,快速掌握中介者模式,通俗易懂的讲解中介者模式以及它的使用场景

系列文章目录 设计模式之-6大设计原则简单易懂的理解以及它们的适用场景和代码示列 设计模式之-单列设计模式&#xff0c;5种单例设计模式使用场景以及它们的优缺点 设计模式之-3种常见的工厂模式简单工厂模式、工厂方法模式和抽象工厂模式&#xff0c;每一种模式的概念、使用…...

12.25

led.c #include "led.h" void all_led_init() {RCC_GPIO | (0X3<<4);//时钟使能GPIOE_MODER &(~(0X3<<20));//设置PE10输出GPIOE_MODER | (0X1<<20);//设置PE10为推挽输出GPIOE_OTYPER &(~(0x1<<10));//PE10为低速输出GPIOE_OSPEED…...

MySQL5.7的几种安装方式总结(排错踩坑呕心沥血的经历)

包安装 添加国内源&#xff1a;mysql | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 注意&#xff1a;5.7安装之后有一个临时密码&#xff0c;进行登录并修改新密码后才可以对mysql进行操作。 可以yun list看看各个系统光盘自带的都是什么版本&…...

zookeeper基本使用

目录 环境搭建 单机版搭建 集群版搭建 基本语法使用 可视化客户端 数据结构 节点分类 1. 持久节点 2. 临时节点 3. 有序节点 4. 容器节点 5. TTL节点 节点状态 监听机制 watch监听 永久性watch 应用场景 1. 实现分布式锁 2. 乐观锁更新数据 应用场景总结 选…...

【华为机试】2023年真题B卷(python)-分月饼

一、题目 题目描述&#xff1a; 中秋节公司分月饼&#xff0c;m个员工&#xff0c;买了n个月饼&#xff0c;m<n&#xff0c;每个员工至少分1个月饼&#xff0c;但可以分多个&#xff0c;单人份到最多月饼的个数为Max1&#xff0c;单人分到第二多月饼的个数是Max2&#xff0c…...

EtherCAT主站SOEM -- 11 -- EtherCAT从站 XML 文件解析

EtherCAT主站SOEM -- 11 -- EtherCAT从站 XML 文件解析 1 EtherCAT 从站信息规范1.1 XML 文件说明1.1.1 XML 数据类型1.1.2 EtherCATInfo1.1.3 Groups1.1.4 Devices1.1.5 Modules1.1.6 Types1.1.6.1 AccessType 的组成1.1.6.2 ArraylnfoType 的组成1.1.6.3 DeviceType 的组成1.…...

YOLOv5算法改进(23)— 更换主干网络GhostNet + 添加CA注意力机制 + 引入GhostConv

前言:Hello大家好,我是小哥谈。本节课就让我们结合论文来对YOLOv5进行组合改进(更换主干网络GhostNet + 添加CA注意力机制 + 引入GhostConv),希望同学们学完本节课可以有所启迪,并且后期可以自行进行YOLOv5算法的改进!🌈 前期回顾: YOLOv5算法改进(1)— 如何去…...

centos系统部署rancher1.6版本并部署服务

1. centos上部署docker. 请参考 博客 2. 用docker安装rancher1.6 sudo docker run -d -v /mnt/rancher/db:/var/lib/mysql --restartunless-stopped -p 8080:8080 rancher/server3.浏览器登录做设置 3.1 浏览器打开 1.117.92.32:8080 #直接就登录了 3.2 第一次进入&am…...

Matlab实时读取串口数据并实时画图方法

** Matlab实时读取串口数据并实时画图方法 ** 按照数据串口协议如&#xff1a;$KT2,1.80,88.18,39.54,42.86,LO[0.72,-1.04,0.35]&#xff0c;举例。 s serialport("COM12",115200,"Timeout",5); poszeros(100000,3); j1; data1 read(s,1,"uint8&…...

智能优化算法应用:基于向量加权平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于向量加权平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于向量加权平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.向量加权平均算法4.实验参数设定…...

SpringBoot - Maven 打包合并一个胖 JAR 以及主项目 JAR 依赖 JAR 分离打包解决方案

问题描述 <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.1.18.RELEASE</version><configuration><!--<classifier>exec</classifier>--…...

react 18 Hooks扩展函数式组件的状态管理

React函数式组件 特点 React函数式组件具有以下特点&#xff1a; 简洁&#xff1a;使用函数的方式定义组件&#xff0c;语法简单直观。无状态&#xff1a;函数式组件没有内部状态&#xff08;state&#xff09;&#xff0c;只依赖于传入的props。可复用&#xff1a;函数式组…...

智能优化算法应用:基于浣熊算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于浣熊算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于浣熊算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.浣熊算法4.实验参数设定5.算法结果6.参考文献7.MA…...

c++ qt QtWidgetsApplication 项目 使用外部ui

1 包含生成的UI头文件&#xff1a; 例如&#xff0c;如果你的Qt Designer的.ui文件名为test.ui&#xff0c;那么生成的头文件通常为ui_test.h。 #include "ui_test.h"2 实例化UI类&#xff1a;.h文件中实例化ui 在你的主要类的头文件中&#xff0c;你通常会声明一个U…...

使用React 18、Echarts和MUI实现温度计

关键词 React 18 Echarts和MUI 前言 在本文中&#xff0c;我们将结合使用React 18、Echarts和MUI&#xff08;Material-UI&#xff09;库&#xff0c;展示如何实现一个交互性的温度计。我们将使用Echarts绘制温度计的外观&#xff0c;并使用MUI创建一个漂亮的用户界面。 本文…...

使用代码生成工具快速开发应用-结合后端Web API提供接口和前端页面快速生成,实现通用的业务编码规则管理

1、通用的业务编码规则的管理功能 在前面随笔我们介绍了一个通用的业务编码规则的管理功能&#xff0c;通过代码生成工具Database2Sharp一步步的生成相关的后端和Winform、WPF的界面&#xff0c;进行了整合&#xff0c;通过利用代码生成工具Database2sharp生成节省了常规功能的…...

Android 13 - Media框架(26)- OMXNodeInstance(三)

上一节我们了解了OMXNodeInstance中的端口定义&#xff0c;这一节我们一起来学习ACodec、OMXNode、OMX 组件使用的 buffer 到底是怎么分配出来的&#xff0c;以及如何关联起来的。&#xff08;我们只会去了解 graphic buffer的创建、input bytebuffer的创建、secure buffer的创…...

力扣题目学习笔记(OC + Swift)21. 合并两个有序链表

21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 链表解题经典三把斧&#xff1a; 哑巴节点栈快慢指针 此题比较容易想到的解法是迭代法&#xff0c;生成哑巴节点&#xff0c;然后迭代生成后续节点。…...

C# WPF上位机开发(windows pad上的应用)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 大部分同学可能都认为c# wpf只能用在pc端。其实这是一种误解。c# wpf固然暂时只能运行在windows平台上面&#xff0c;但是windows平台不仅仅是电脑…...

Word使用技巧【开题报告】

1、修改目录&#xff1a;选中目录&#xff0c;点击更新域。 2、更改或删除单个页面上的页眉或页脚 3、借助其他软件在Word导入参考文献 利用zetero导入文献&#xff1a;安装zetero 解决参考文献插入问题 在Word中插入文献操作步骤 英文文献出现“等”&#xff0c;如何解决 Zote…...

电子学会C/C++编程等级考试2022年06月(七级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:有多少种二叉树 输入n(1<n<13),求n个结点的二叉树有多少种形态 时间限制:1000 内存限制:65536输入 整数n输出 答案 样例输入 3样例输出 5 答案: //参考答案 #include<bits/stdc++.h> using namespace std; …...

git中的smart checkout和force checkout

切换分支时出现了这个问题&#xff1a; 这是因为shiyan01分支修改了代码,但是没有commit, 所以在切换到test分支的时候弹出这个窗口 一、smart checkout(智能签出) 会把shiyan01分支的改动内容带到test分支。合并处理后的内容就变成了test分支的内容,而shiyan01分支的改动会被…...

vue3整合Element-Plus,极速上手。

条件分页查询&#xff1a; 需求分析&#xff1a; form表单 Button按钮 Table表格 Pagination分页 页面布局&#xff1a; 搜索表单&#xff1a; 如果表单封装的数据较多&#xff0c;建议绑定到一个对象中。 …...

学习Vue2.x

文章目录 一、使用Vue脚手架1.ref和props属性2.mixin混入3.组件化编码流程4.webStorage5.组件自定义事件6.全局事件总线7.消息订阅与发布 二、使用步骤1.引入库 一、使用Vue脚手架 1.ref和props属性 ref属性&#xff1a; &#xff08;1&#xff09;被用来给元素或子组件注册应…...

新手如何快速熟悉代码,写出东西(持续更新)

目录 第一章、最小编程任务的设想1.1&#xff09;程序员入门会遇到的问题1.2&#xff09;最小编程任务的设想1.3&#xff09;编程逻辑1.4&#xff09;具体需求 第二章、最小编程单元的练习2.1&#xff09;代码/需求方面2.1.1&#xff09;初级练习2.1.2&#xff09;中级练习2.1.…...

11-网络安全框架及模型-软件安全能力成熟度模型(SSCMM)

目录 软件安全能力成熟度模型 1 背景概述 2 主要内容 3 成熟度等级定义 4 关键过程和实践 5 评估方法 6 改进建议 7 持续改进 8 主要价值 9 应用场景 10 优势和局限性 备注 软件安全能力成熟度模型 1 背景概述 SSCMM模型是软件安全能力成熟度模型&#xff0c;它描…...

Linux操作系统基础知识点

Linux是一种计算机操作系统&#xff0c;其内核由林纳斯本纳第克特托瓦兹&#xff08;Linus Benedict Torvalds&#xff09;于1991年首次发布。Linux操作系统通常与GNU套件一起使用&#xff0c;因此也被称为GNU/Linux。它是一种类UNIX的操作系统&#xff0c;设计为多用户、多任务…...

python 通过opencv及face_recognition识别人脸

效果&#xff1a; 使用Python的cv2库和face_recognition库来进行人脸检测和比对的 0是代表一样 认为是同一人。 代码&#xff1a; pip install opencv-python pip install face_recognition# 导入cv2库&#xff0c;用于图像处理 import cv2 # 导入face_recognition库&#…...

Android开发中常见的Hook技术有哪些?

Hook技术介绍 Hook技术是一种在软件开发中常见的技术&#xff0c;它允许开发者在特定的事件发生时插入自定义的代码逻辑。常见的应用场景包括在函数调用前后执行特定的操作&#xff0c;或者在特定的事件发生时触发自定义的处理逻辑。 在Android开发中&#xff0c;Hook通常是通…...

【linux c多线程】线程的创建,线程信息的获取,获取线程返回值

线程创建 ​专栏内容&#xff1a; 参天引擎内核架构 本专栏一起来聊聊参天引擎内核架构&#xff0c;以及如何实现多机的数据库节点的多读多写&#xff0c;与传统主备&#xff0c;MPP的区别&#xff0c;技术难点的分析&#xff0c;数据元数据同步&#xff0c;多主节点的情况下对…...

MFC或QT中,自绘控件的目的和实现步骤

MFC自绘控件的步骤 自绘控件的目的是为了能够自定义控件的外观、行为和交互方式&#xff0c;以满足特定的需求&#xff0c;同时增强应用程序的用户体验。 实现步骤如下&#xff1a; 1、创建一个继承自MFC控件基类&#xff08;如CButton、CStatic等&#xff09;的自定义控件类…...

ceph集群搭建详细教程(ceph-deploy)

ceph-deploy比较适合生产环境&#xff0c;不是用cephadm搭建。相对麻烦一些&#xff0c;但是并不难&#xff0c;细节把握好就行&#xff0c;只是命令多一些而已。 实验环境 服务器主机public网段IP&#xff08;对外服务&#xff09;cluster网段IP&#xff08;集群通信&#x…...

机器视觉系统选型-避免畸变

在定位及高精度测量的系统中&#xff0c;镜头畸变的影响尤其重要 • 使用远心镜头 • 进行系统标定...

机器学习笔记 - 线性判别分析(LDA)的原理和应用

一、LDA简述 线性判别分析(LDA)是监督机器学习中用于解决多类分类问题的一种方法。LDA通过数据降维来分离具有多个特征的多个类。这项技术在数据科学中很重要,因为它有助于优化机器学习模型。 线性判别分析,也称为正态判别分析 (NDA) 或判别函数分析 (DFA),遵循生成模型框…...

基于5G智能网关的智慧塔吊监测方案

塔吊是建筑施工中必不可少的设施&#xff0c;由于塔吊工作重心高、起重载荷大、人工视距/视角受限等因素&#xff0c;也使得塔吊在工作过程中着较多的危险因素。对此&#xff0c;可以部署基于工业5G智能网关搭建智慧塔吊安全监测系统&#xff0c;实现对塔吊运行的全局精细监测感…...

CountDownLatch详解以及用法示例

一、什么是CountDownLatch CountDownLatch中count down是倒数的意思&#xff0c;latch则是门闩的含义。整体含义可以理解为倒数的门栓。 CountDownLatch的作用也是如此&#xff0c;在构造CountDownLatch(int count)&#xff1a;的时候需要传入一个整数count&#xff0c;在这个…...

【http】缓存协议

✨ 专栏介绍 在当今互联网时代&#xff0c;计算机网络已经成为了人们生活和工作中不可或缺的一部分。而要实现计算机之间的通信和数据传输&#xff0c;就需要依靠各种网络协议来进行规范和约束。无论是浏览网页、发送电子邮件还是进行在线交流&#xff0c;都离不开各种各样的网…...

vscode中使用GitHub Copilot Chat

文章目录 一、什么是Github Copilot Chat二、安装使用三、如何使用1. 聊天功能2. 内联功能 一、什么是Github Copilot Chat GitHub Copilot Chat 由 OpenAI 的 GPT-4 大型多模态模型提供支持&#xff0c;能带来更准确的代码建议、解释和指导。GitHub Copilot Chat 的内联功能可…...

lvgl 双物理显示器的驱动实现

目录 一、背景 1. 要实现的功能2. lvgl 版本 二、简单粗暴的方式 理论上可以这样实现缺陷&#xff1a; 三、lvgl 自身机制支持 3.1 实现思路3.2 初始化缓冲区和注册显示驱动 3.2.1 复制lv_port_disp → lv_port_disp_23.2.2 修改 lv_port_disp_2 文件3.2.3 在应用层调用显示器…...

论文阅读——X-Decoder

Generalized Decoding for Pixel, Image, and Language Towards a Generalized Multi-Modal Foundation Model 1、概述 X-Decoder没有为视觉和VL任务开发统一的接口&#xff0c;而是建立了一个通用的解码范式&#xff0c;该范式可以通过采用共同的&#xff08;例如语义&#…...

【Kubernetes】控制器Statefulset

Statefulset控制器 一、概念二、Statefulset资源清单文件编写技巧2.1、查看定义Statefulset资源需要的字段2.2、查看statefulset.spec字段如何定义2.3、查看statefulset的spec.template字段如何定义 三、Statefulset使用案例&#xff1a;部署web站点3.1、编写一个Statefulset资…...

智能优化算法应用:基于鱼鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于鱼鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于鱼鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.鱼鹰算法4.实验参数设定5.算法结果6.参考文献7.MA…...

探索 Vue3 (五) 骨架屏

骨架屏是页面的一个空白版本&#xff0c;通常会在页面完全渲染之前&#xff0c;通过一些灰色的区块大致勾勒出轮廓&#xff0c;待数据加载完成后&#xff0c;再替换成真实的内容。 目前主流 UI库 都有骨架屏&#xff0c;如 Element-UI、Antd 可以看到使用起来非常简单&#x…...

java取出list中的某几个属性组成一个新的集合的几种方式

我用了三种方式,1:forEach循环;2:for循环;3:stream方法 package org.springblade.test;import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors;public class Test {org.junit.jupiter.api…...