【国科大模式识别】第三次作业

文章详细介绍了二维空间中四个样本的线性判别函数求解过程,采用规范化增广样本和梯度更新方法更新权向量,确保样本被正确分类。同时,讨论了多类分类中的one-vs-all策略,通过构建多个线性判别函数确定决策边界,并通过编程实现批量感知算法和Ho-Kashyap算法,分析了不同训练数据集的分类效果。
摘要由CSDN通过智能技术生成

【题目一】现有四个来自于两个类别的二维空间中的样本, 其中第一类的两个样本为 ( 1 , 4 ) T (1,4)^T (1,4)T ( 2 , 3 ) T (2,3)^T (2,3)T, 第二类的两个样本为 ( 4 , 1 ) T (4,1)^T (4,1)T ( 3 , 2 ) T (3,2)^T (3,2)T 。这里, 上标 T T T 表示向量转置。若采用规范化增广样本表示形式, 并假设初始的权向量 a = ( 0 , 1 , 0 ) T \mathbf{a}=(0,1,0)^T a=(0,1,0)T, 其中向量 a \mathbf{a} a 的第三维对应于样本的齐次坐标。同时, 假定梯度更新步长 η k \eta_k ηk 固定为 1 。试利用批处理感知准则函数方法求解线性判别函数 g ( y ) = a T y g(\mathbf{y})=\mathbf{a}^T \mathbf{y} g(y)=aTy 的权向量 a \mathbf{a} a 。(注: “规范化增广样本表示” 是指对齐次坐标表示的样本 进行规范化处理。

在这里插入图片描述

【解】第一类的样本规范化后为: x 1 = [ 1 , 4 , 1 ] x_1=[1,4,1] x1=[1,4,1] x 2 = [ 2 , 3 , 1 ] x_2=[2,3,1] x2=[2,3,1]; 第二类的样本规范化后为: x 3 = [ − 4 , − 1 , − 1 ] x_3=[-4,-1,-1] x3=[4,1,1] x 4 = [ − 3 , − 2 , − 1 ] x_4=[-3,-2,-1] x4=[3,2,1], 初始化的权重向量为 [ 0 , 1 , 0 ] [0,1,0] [0,1,0], 用权重向量来判别所有样本的类别, 结果如下: x 1 : [ 0 , 1 , 0 ] [ 1 , 4 , 1 ] T = 4 > 0 x 2 : [ 0 , 1 , 0 ] [ 2 , 3 , 1 ] T = 3 > 0 x 3 : [ 0 , 1 , 0 ] [ − 4 , − 1 , − 1 ] T = − 1 < 0 x 4 : [ 0 , 1 , 0 ] [ − 3 , − 2 , − 1 ] T = − 2 < 0 \begin{gathered} x_1:[0,1,0][1,4,1]^T=4>0 \\ x_2:[0,1,0][2,3,1]^T=3>0 \\ x_3:[0,1,0][-4,-1,-1]^T=-1<0 \\ x_4:[0,1,0][-3,-2,-1]^T=-2<0 \end{gathered} x1:[0,1,0][1,4,1]T=4>0x2:[0,1,0][2,3,1]T=3>0x3:[0,1,0][4,1,1]T=1<0x4:[0,1,0][3,2,1]T=2<0希望判别结果全为正, 所以 x 3 x_3 x3 x 4 x_4 x4 被错分, 更新步长为 1 时, 权向量更新为: [ 0 , 1 , 0 ] + [ − 4 , − 1 , − 1 ] + [ − 3 , − 2 , − 1 ] = [ − 7 , − 2 , − 2 ] [0,1,0]+[-4,-1,-1]+[-3,-2,-1]=[-7,-2,-2] [0,1,0]+[4,1,1]+[3,2,1]=[7,2,2]计算是否都正确分类
x 1 : [ − 7 , − 2 , − 2 ] [ 1 , 4 , 1 ] T = − 17 < 0 x 2 : [ − 7 , − 2 , − 2 ] [ 2 , 3 , 1 ] T = − 22 < 0 x 3 : [ − 7 , − 2 , − 2 ] [ − 4 , − 1 , − 1 ] T = 32 > 0 x 4 : [ − 7 , − 2 , − 2 ] [ − 3 , − 2 , − 1 ] T = 27 > 0 \begin{gathered} x_1:[-7,-2,-2][1,4,1]^T=-17<0 \\ x_2:[-7,-2,-2][2,3,1]^T=-22<0 \\ x_3:[-7,-2,-2][-4,-1,-1]^T=32>0 \\ x_4:[-7,-2,-2][-3,-2,-1]^T=27>0 \end{gathered} x1:[7,2,2][1,4,1]T=17<0x2:[7,2,2][2,3,1]T=22<0x3:[7,2,2][4,1,1]T=32>0x4:[7,2,2][3,2,1]T=27>0希望判别结果全为正, 所以 x 1 x_1 x1 x 2 x_2 x2 被错分, 更新步长为 1 时, 权向量更新为: [ − 7 , − 2 , − 2 ] + [ 1 , 4 , 1 ] + [ 2 , 3 , 1 ] = [ − 4 , 5 , 0 ] [-7,-2,-2]+[1,4,1]+[2,3,1]=[-4,5,0] [7,2,2]+[1,4,1]+[2,3,1]=[4,5,0]计算是否正确分类 x 1 : [ − 4 , 5 , 0 ] [ 1 , 4 , 1 ] T = 16 > 0 x 2 : [ − 4 , 5 , 0 ] [ 2 , 3 , 1 ] T = 7 > 0 x 3 : [ − 4 , 5 , 0 ] [ − 4 , − 1 , − 1 ] T = 11 > 0 x 4 : [ − 4 , 5 , 0 ] [ − 3 , − 2 , − 1 ] T = 2 > 0 \begin{gathered} x_1:[-4,5,0][1,4,1]^T=16>0 \\ x_2:[-4,5,0][2,3,1]^T=7>0\\ x_3:[-4,5,0][-4,-1,-1]^T=11>0 \\ x_4:[-4,5,0][-3,-2,-1]^T=2>0 \end{gathered} x1:[4,5,0][1,4,1]T=16>0x2:[4,5,0][2,3,1]T=7>0x3:[4,5,0][4,1,1]T=11>0x4:[4,5,0][3,2,1]T=2>0于是得到最终的权向量 [ − 4 , 5 , 0 ] [-4,5,0] [4,5,0]

【题目二】对于多类分类情形, 考虑 one-vs-all 技巧, 即构建 c c c 个线性判别函数: g i ( x ) = w i T x + w i 0 , i = 1 , 2 , … , c g_i(\mathbf{x})=\mathbf{w}_i^T \mathbf{x}+w_{i 0}, \quad i=1,2, \ldots, c gi(x)=wiTx+wi0,i=1,2,,c此时的决策规则为: 对 j ≠ i j \neq i j=i, 如果 g i ( x ) > g j ( x ) , x g_i(\mathbf{x})>g_j(\mathbf{x}), \mathbf{x} gi(x)>gj(x),x 则被分为 ω i \omega_i ωi 类。现有三个二维空间 内的模式分类器, 其判别函数为: g 1 ( x ) = − x 1 + x 2 g 2 ( x ) = x 1 + x 2 − 1 g 3 ( x ) = − x 2 \begin{aligned} & g_1(\mathbf{x})=-x_1+x_2 \\ & g_2(\mathbf{x})=x_1+x_2-1 \\ & g_3(\mathbf{x})=-x_2 \end{aligned} g1(x)=x1+x2g2(x)=x1+x21g3(x)=x2试画出决策面, 指出为何此时不存在分类不确定性区域。

【解】根据决策规则, 属于 ω \omega ω 的区域应该满足 g 1 ( x ) > g 2 ( x ) g_1(x)>g_2(x) g1(x)>g2(x) g 1 ( x ) > g 3 ( x ) g_1(x)>g_3(x) g1(x)>g3(x), 所以 ω 1 \omega_1 ω1 的决策边界为:
g 1 ( x ) − g 2 ( x ) = − 2 x 1 + 1 = 0 g 1 ( x ) − g 3 ( x ) = − x 1 + 2 x 2 = 0 \begin{gathered} g_1(x)-g_2(x)=-2 x_1+1=0 \\ g_1(x)-g_3(x)=-x_1+2 x_2=0 \end{gathered} g1(x)g2(x)=2x1+1=0g1(x)g3(x)=x1+2x2=0
还有一条分界线 g 2 ( x ) − g 3 ( x ) = x 1 + 2 x 2 − 1 = 0 g_2(x)-g_3(x)=x_1+2x_2-1=0 g2(x)g3(x)=x1+2x21=0由于决策边界交于一点 ( 0.5 , 0.25 ) (0.5,0.25) (0.5,0.25), 因此, 不存在不确定区域

clc;
close all;
clear;
plot(0.5*ones(1,100),linspace(0.25,5,100));
hold on;
x1 = linspace(-5,0.5,100);
plot(x1,1/2*x1);
hold on;
x2 = linspace(0.5,5,100);
plot(x2,(-x2+1)/2);
t = text(-3,3,'{\omega_1}');
t.FontSize = 24;
t1 = text(3,3,'{\omega_2}');
t1.FontSize = 24;
t2 = text(0.5,-2,'{\omega_3}');
t2.FontSize = 24;

在这里插入图片描述
【编程题】(下面瞎做的,大佬轻点喷)

  1. Write a program to implement the “batch perception” algorithm.
    (a). Starting with a = 0 \mathbf{a}=\mathbf{0} a=0, apply your program to the training data from ω 1 \omega_1 ω1 and ω 2 \omega_2 ω2. Note that the number of iterations required for convergence(即记录下收敛的步数)。
    (b). Apply your program to the training data from ω 3 \omega_3 ω3 and ω 2 \omega_2 ω2. Again, note that the number of iterations required for convergence.
clc;
close all;
clear;
trainset1 = [0.1, 1.1, 1; 6.8, 7.1, 1; -3.5, -4.1, 1;
             2.0, 2.7, 1; 4.1, 2.8, 1; 3.1, 5.0, 1;-0.8, -1.3, 1;
             0.9, 1.2, 1; 5.0, 6.4, 1; 3.9, 4.0, 1;-7.1, -4.2, -1;
             1.4, 4.3, -1; -4.5, -0.0, -1;-6.3, -1.6, -1;-4.2, -1.9, -1;-1.4, 3.2, -1;
             -2.4, 4.0, -1;-2.5, 6.1, -1;-8.4, -3.7, -1;-4.1, -2.2, -1];  
trainset2 = [-7.1, -4.2, -1;
             1.4, 4.3, -1; -4.5, -0.0, -1;-6.3, -1.6, -1;-4.2, -1.9, -1;-1.4, 3.2, -1;
             -2.4, 4.0, -1;-2.5, 6.1, -1;-8.4, -3.7, -1;-4.1, -2.2, -1 ;-3.0, -2.9, 1;0.5, 8.7, 1;2.9, 2.1, 1;
             -0.1, 5.2, 1;-4.0, 2.2, 1;-1.3, 3.7, 1;-3.4, 6.2, 1;-4.1, 3.4, 1;
             -5.1, 1.6, 1;1.9, 5.1, 1];
omega_1 = [0,0,0];
omega_2 = [0,0,0];
learning_rate = 0.01;


iteration1 = 0;
while iteration1<=1001
    iteration1 = iteration1 + 1;
    if sum(omega_1*trainset1'>0) == 20
        %print('迭代次数为',num2str(iteration1))
        %print('权重为',num2str(omega_1))
        iteration1
        omega_1
        break
    else
        omega_1 = omega_1 + sum(trainset1(omega_1*trainset1' <= 0,:)*learning_rate);
    end
    if iteration1 == 1000
        print('迭代次数已达最大1000')
        omega1
    end
end
   

iteration2 = 0;
while iteration2<=1001
    iteration2 = iteration2 + 1;
    if sum(omega_2*trainset2'>0) == 20
        %print('迭代次数为',num2str(iteration1))
        %print('权重为',num2str(omega_1))
        iteration2
        omega_2
        break
    else
        omega_2 = omega_2 + sum(trainset2(omega_2*trainset2' <= 0,:)*learning_rate);
    end
    if iteration2 == 1000
        print('迭代次数已达最大1000')
        omega2
    end
end
    


在这里插入图片描述

  1. Implement the Ho-Kashyap algorithm and apply it to the training data from ω 1 \omega_1 ω1 and ω 3 \omega_3 ω3. Repeat to apply it to the training data from ω 2 \omega_2 ω2 and ω 4 \omega_4 ω4. Point out the training errors, and give some analyses.
clc;
close all;
clear;
a = [0,0,0]';   % 初始权重
b = ones(20,1)*0.01;  % 初始margin
bmin = ones(20,1)*0.001; % 误差阈值
Y1 = [0.1 1.1 1;
    6.8 7.1 1;
    -3.5 -4.1 1;
    2.0 2.7 1;
    4.1 2.8 1;
    3.1 5.0 1;
    -0.8 -1.3 1;
    0.9 1.2 1;
    5.0 6.4 1;
    3.9 4.0 1;
    3.0 2.9 -1;
    -0.5 -8.7 -1;
    -2.9 -2.1 -1;
    0.1 -5.2 -1;
    4.0 -2.2 -1;
    1.3 -3.7 -1;
    3.4 -6.2 -1;
    4.1 -3.4 -1;
    5.1 -1.6 -1;
    -1.9 -5.1 -1];
Y2 = [7.1 4.2 1;
    -1.4 -4.3 1;
    4.5 0.0 1;
    6.3 1.6 1;
    4.2 1.9 1;
    1.4 -3.2 1;
    2.4 -4.0 1;
    2.5 -6.1 1;
    8.4 3.7 1;
    4.1 -2.2 1;
    2.0 8.4 -1;
    8.9 -0.2 -1;
    4.2 7.7 -1;
    8.5 3.2 -1;
    6.7 4.0 -1;
    0.5 9.2 -1;
    5.3 6.7 -1;
    8.7 6.4 -1;
    7.1 9.7 -1;
    8.0 6.3 -1];
kmax = 100000;    % 最大迭代次数
learning_rate = 0.01;
iterations = 0;  % 迭代次数
e = [1 1 1]';  % error


%======================%
while 1
    e = Y1*a-b;
    e_plus = 1/2*(e + abs(e));
    b = b + 2*learning_rate*e_plus;
    a = (Y1'*Y1)\Y1'*b;
    iterations =iterations+1;
    if abs(e) <= bmin
        a
        b
        iterations
        break
    end
    
    if iterations == kmax
        disp('No solution found!')
        sprintf('迭代已达最大次数%d',kmax)
        disp('========================')
        break
    end
end

%======================%
while 1
    e = Y2*a-b;
    e_plus = 1/2*(e + abs(e));
    b = b + 2*learning_rate*e_plus;
    a = (Y2'*Y2)\Y2'*b;
    iterations =iterations+1;
    if abs(e) <= bmin
        a
        b
        iterations
        break
    end
    
    if iterations == kmax
        disp('No solution found!')
        sprintf('迭代已达最大次数%d',kmax)
        break
    end
    
end

输出结果:

No solution found!
ans =
    '迭代已达最大次数100000'
========================
a =
    0.0063
    0.0050
    0.0398
b =
    0.1056
    0.0105
    0.0682
    0.0875
    0.0758
    0.0326
    0.0349
    0.0250
    0.1113
    0.0546
    0.0149
    0.0156
    0.0252
    0.0298
    0.0224
    0.0100
    0.0272
    0.0471
    0.0535
    0.0422
iterations =
      122298

【分析】
在这里插入图片描述
由于1类和3类是线性不可分的,所以算法肯定是不收敛的。
画出上面这个分布图的代码:

clc;
close all;
clear;
omega1_x = [0.1,6.8,-3.5,2.0,4.1,3.1,-0.8,0.9,5.0,3.9];
omega1_y = [1.1,7.1,-4.1,2.7,2.8,5.0,-1.3,1.2,6.4,4.0];
omega2_x = [7.1,-1.4,4.5,6.3,4.2,1.4,2.4,2.5,8.4,4.1];
omega2_y = [4.2,-4.3,0.0,1.6,1.9,-3.2,-4.0,-6.1,3.7,-2.2];
omega3_x = [-3.0,0.5,2.9,-0.1,-4.0,-1.3,-3.4,-4.1,-5.1,1.9];
omega3_y = [-2.9,8.7,2.1,5.2,2.2,3.7,6.2,3.4,1.6,5.1];
omega4_x = [-2.0,-8.9,-4.2,-8.5,-6.7,-0.5,-5.3,-8.7,-7.1,-8.0];
omega4_y = [-8.4,0.2,-7.7,-3.2,-4.0,-9.2,-6.7,-6.4,-9.7,-6.3];
figure();
scatter(omega1_x,omega1_y,'filled');
hold on
scatter(omega2_x,omega2_y,'filled');
hold on
scatter(omega3_x,omega3_y,'filled');
hold on
scatter(omega4_x,omega4_y,'filled');
hold off
legend('\omega_1','\omega_2','\omega_3','\omega_4');
  1. 请写一个程序, 实现 MSE 多类扩展方法。每一类用前 8 个样本来构造分类器, 用后两个样本作测试。请写出主要计算步骤, 并给出你的正确率。
clc;
close all;
clear;
Y = [1 0 0 0;1 0 0 0;1 0 0 0;1 0 0 0;1 0 0 0;1 0 0 0;1 0 0 0;1 0 0 0;
    0 1 0 0;0 1 0 0;0 1 0 0;0 1 0 0;0 1 0 0;0 1 0 0;0 1 0 0;0 1 0 0;
    0 0 1 0;0 0 1 0;0 0 1 0;0 0 1 0;0 0 1 0;0 0 1 0;0 0 1 0;0 0 1 0;
    0 0 0 1;0 0 0 1;0 0 0 1;0 0 0 1;0 0 0 1;0 0 0 1;0 0 0 1;0 0 0 1;]';
X_hat = [0.1 1.1 1;6.8 7.1 1;-3.5 -4.1 1;2.0 2.7 1;4.1 2.8 1;3.1 5.0 1;-0.8 -1.3 1;0.9 1.2 1;
7.1 4.2 1;-1.4 -4.3 1;4.5 0.0 1;6.3 1.6 1;4.2 1.9 1;1.4 -3.2 1;2.4 -4.0 1;2.5 -6.1 1;-3.0 -2.9 1;
0.5 8.7 1;2.9 2.1 1;-0.1 5.2 1;-4.0 2.2 1;-1.3 3.7 1;-3.4 6.2 1;-4.1 3.4 1;-2.0 -8.4 1;-8.9 0.2 1;
-4.2 -7.7 1;-8.5 -3.2 1;-6.7 -4.0 1;-0.5 -9.2 1;-5.3 -6.7 1;-8.7 -6.4 1]';
W_hat = (X_hat*X_hat')\X_hat*Y';
X_test = [5.0 6.4 1;3.9 4.0 1;8.4 3.7 1;4.1 -2.2 1;
    -5.1 1.6 1;1.9 5.1 1;-7.1 -9.7 1; -8.0 -6.3 1]';
[a,b] = max(W_hat'*X_test);
b

在这里插入图片描述

正确率100%

### 回答1: 国科大模式识别是国家科学技术部资助设立的一个高水平研究机构,致力于模式识别的教学与研究。 第一章作业是该课程的第一次作业,主要目的是让学生对模式识别的基础概念有一个初步的了解。 第一章作业通常包括以下内容:首先是对模式识别的定义和目标的了解。模式识别是通过分析和处理大量数据来识别出数据的模式和规律,以便进行分类、识别、预测等操作。其目标是提高计算机或系统对实际问题的认知和理解能力。 其次,作业可能包括对常用的模式识别技术和方法的介绍。例如,统计模式识别方法将数据分析与统计学方法相结合,利用统计模型来进行模式分类和预测。机器学习方法则是通过让计算机自动学习和优化模型参数,从而实现模式识别的功能。 另外,作业还可能要求学生从实际问题出发,分析和解决一个具体的模式识别问题。学生可能需要选择一个有足够数据和相关信息的问题,并使用已学习的模式识别技术进行数据分析和处理,最终得出相应的结论或预测。 完成第一章作业需要学生具备一定的数学、统计和编程基础。学生需要了解和掌握模式识别的基本概念和方法,并能够运用相关工具和软件进行数据处理和分析。 总之,国科大模式识别第一章作业是帮助学生理解和掌握模式识别基本概念和方法的重要环节,通过实践和应用来提高学生的模式识别能力。 ### 回答2: 国科大模式识别第七章作业主要涵盖了模式识别的贝叶斯决策论、混淆矩阵以及特征选择三个方面的内容。 第一部分是关于贝叶斯决策论的讲解。贝叶斯决策论是一种基于概率统计原理的模式分类方法。在这部分,我们学习了条件概率和贝叶斯定理的概念,并了解了如何通过最大后验概率准则进行模式分类。 第二部分是关于混淆矩阵的介绍。混淆矩阵是用来衡量分类算法性能的一种常用工具。我们学习了混淆矩阵的定义,以及如何根据混淆矩阵计算分类的准确率、精确率、召回率和F1值等指标。通过了解混淆矩阵的应用,我们可以更好地评估模式识别算法的性能和效果。 第三部分是关于特征选择的内容。特征选择是模式识别的一个重要环节,它的目的是从原始数据选择出最能代表模式的特征。我们学习了特征选择的原理和常用方法,例如过滤式和包裹式特征选择方法,并了解了特征选择的准则和评价指标。 通过学习模式识别第七章的作业,我对贝叶斯决策论的应用、混淆矩阵的使用和特征选择的方法都有了更深入的了解。这些知识对于我进一步理解和应用模式识别算法具有重要的指导作用,并有助于我在实践能够更好地处理分类问题。在以后的学习和工作,我将继续深入研究这些内容,不断提升自己的模式识别能力。 ### 回答3: 国科大模式识别课程第七章的作业内容主要包括两个方面,第一个是基于贝叶斯分类器的手写数字识别,第二个是基于支持向量机(SVM)的情感分类。 在第一个任务,我们需要利用贝叶斯分类器对手写数字进行识别。首先,我们需要从MNIST数据集获取一部分手写数字的图像和对应的标签,然后将图像数据进行预处理,如将其转换为灰度图像并进行归一化处理。接下来,我们需要训练贝叶斯分类器,即根据训练数据学习每个数字的概率分布。通过计算每个数字的像素点在各个类别出现的概率,我们可以根据贝叶斯公式确定每个数字属于各个类别的概率。最后,我们可以通过比较每个数字属于各个类别的概率,来确定手写数字的识别结果。 在第二个任务,我们需要使用支持向量机对文本进行情感分类。首先,我们需要从IMDB数据集获取一些带有情感标签的电影评论文本数据。然后,我们需要对文本数据进行预处理,去除停用词、标点符号等,并将每个单词转换为向量表示。接下来,我们可以使用SVM算法来训练情感分类器,即利用支持向量机技术将文本数据划分为积极和消极两个类别。通过调整SVM的超参数和选择适当的核函数,我们可以得到较好的情感分类结果。最后,我们可以使用已训练好的分类器对新的电影评论进行情感分类,判断其是积极还是消极的评价。 总的来说,国科大模式识别课程的第七章作业涵盖了贝叶斯分类器和支持向量机在手写数字识别和情感分类的应用。通过完成这些作业,我们可以加深对这两个算法的理解,并掌握它们在实际问题的应用技巧。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

果壳小旋子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值