• 模式识别第三次作业


    第三次作业

    6.3

    (a) 由于2范数(| A|_2=sigma_{max})(又叫谱范数),其中(sigma_{max})(A)的最大奇异值,故

    [kappa(X)=sigma_{max}*frac{1}{sigma_{min}}=frac{sigma_1}{sigma_n} ]

    (b) 假设存在一个小的扰动(varDelta x)导致一个(varDelta y),即

    [A(x+varDelta x)=b+varDelta b ]

    (varDelta x = A^{-1}varDelta b),两边取二范数:(|varDelta x|leq | A^{-1} | | varDelta b |)

    由根据(Ax=b),有(| b |leq | A| |x|)

    根据以上两式有:

    [frac{varDelta x}{x}leq(|A||A^{-1}|)frac{|varDelta b|}{|b|}=kappa_2(A)frac{|varDelta b|}{|b|} ]

    由上式可知,当存在扰动量时,解的相对误差与矩阵的条件数成正比,即较小的(varDelta x​)会造成较大的(varDelta y​),因此(kappa_2(A)​)很大时,线性系统是病态的。

    (c) 证明:对于正交矩阵(A)(A^TA=AA^T=1),

    (|A|_2=sqrt{ ho(A^TA)}=1)(|A^{-1}|_2=sqrt{ ho(AA^T)}=1),故:

    (kappa_2(A)=|A|_2|A_{-1}|_2=1)

    由第一题知,矩阵条件数(frac{sigma_1}{sigma_n})不会比1小,且正交矩阵的条件数为1,因此正交矩阵是良态的。

    6.6

    (c) 环境 ubuntu16.04 OPenCv2.4 C++ cmake文件:

    project(face_recognition)
    set( CMAKE_CXX_FLAGS "-std=c++11" )
    set( OpenCV_FOUND 1 )
    find_package(OpenCV 2.4 REQUIRED PATHS "/home/dlutjwh/opencv-2.4")
    include_directories( ${OpenCV_INCLUDE_DIRS} )
    add_executable(fisherface facerec_fisherfaces.cpp)
    add_executable(eigenface facerec_eigenfaces.cpp)
    target_link_libraries( fisherface ${OpenCV_LIBS} )
    target_link_libraries( eigenface ${OpenCV_LIBS} )
    

    Eigenface实验结果:

    前面十个为eigenfaces,后面为每隔15个特征向量进行重建后的效果图,最后一张图为平均脸。

    FisherFace实验结果:

    前面16张为fisherface,后面为重建效果,最后一张为平均脸。

    总结:从效果上来看,fisherface似乎难以重建出原图像,可能由于FisherFace只关注各类目标间的不同特征,难以复原图像。而PCV没有考虑label,降维后可能失去了类和类之间的区别信息。

    (d)

    最右边为原图像,大概需要225-230张左右,重构图像与原图像难以区分。

    7.1

    (a) 阅读软件包并编译成功,实验环境:ubuntu16.04,在Makefile所在文件夹下进行make操作

    (b)

    1. 默认参数下,命令:./svm-train svmguide1(训练) ./svm-predict svmguide1.t svmguide1.model svmguide1.t.predict (测试) 准确率: Accuracy = 66.925% (2677/4000) 以第一题为例截图如下:

    ![2020-05-12 23-42-30屏幕截图](D:网课2020-05-12 23-42-30屏幕截图.png)

    1. 特征规范化到([-1,1])区间,命令:
      ./svm-scale -l -1 -u 1 -s range1 svmguide1 > svmguide1.scale (缩放)
      ./svm-scale -r range1 svmguide1.t > svmguide1.t.scale (测试集同样进行缩放)
      ./svm-train svmguide1.scale (训练)
      ./svm-predict svmguide1.t.scale svmguide1.scale.model svmguide1.t.predict (测试) 准确率:Accuracy = 96.15% (3846/4000)

    2. 采用线性核,命令:
      ./svm-train -t 0 svmguide1 (训练)
      ./svm-predict svmguide1.t svmguide1.model svmguide1.t.predict (测试) 准确率:Accuracy = 95.675% (3827/4000)

    3. (C=1000),以RBF核,命令:
      ./svm-train -c 1000 svmguide1 (训练)
      ./svm-predict svmguide1.t svmguide1.model svmguide1.t.predict (测试)
      准确率:Accuracy = 70.475% (2819/4000)

    4. 确定超参数:

    ![2020-05-13 01-28-21屏幕截图](D:网课2020-05-13 01-28-21屏幕截图.png)

    (C=2.0, gamma=2.0)

    ​ 总结:在使用学习算法之前进行特征规范化很有必要,归一化后效果好很多。如果模型不是很复杂,使用RBF核可能会带来过拟合的问题,效果反而不好。另外适当增大参数(C)的大小可以提高准确率。

    (c) 使用原网站a6a数据集,训练集中标签有两个,-1和1,其中-1的占比较大,采用-wi参数:
    命令: ./svm-train -w-1 1 -w1 1.5 a6a 其中权值比重为1:1.5,准确率由 84.1713% (17963/21341)上升到84.5321% (18040/21341),考虑到测试集较大,准确率还是有一定提高。

    8.2

    (a) 证明:

    [int_{x_m}^{infty}p_1(x)dx=int_{x_m}^{infty}frac{c_1}{x^{alpha+1}}dx=frac{c_1}{alpha x_m ^alpha}=1 ]

    解得:(c_1=alpha x_m^alpha),故(p_1(x)=p(x)),X服从pareto((x_m,alpha)).

    (b)似然函数:

    [p(D|x_m,alpha)=Pi_{i=1}^{n}p(x_i|x_m,alpha)=Pi_{i=1}^{n}frac{alpha x_m^alpha}{x^{alpha+1}}[xgeq x_m] ]

    易知该函数为(x_m)的非减函数,故(x_{min})的估计值为(min left{ x_i,1leq ileq n ight }),进而:

    [p(D|x_{m},alpha)=frac{alpha^nx_{min}^{alpha n}}{Pi_{i=1}^{n} x_i^{alpha+1}} ]

    取对数后对(alpha)求导:

    [frac{partialln P}{partial alpha}=frac{partial (nlnalpha +nalpha ln x_{min}-(alpha+1)ln x_i)}{partial alpha}={frac{n}{alpha}+nln x_{min}-sum_{i=1}^{n}ln x_i} ]

    令其等于0解得:

    [alpha = frac{n}{sum_{i=1}^{n}x_i-nln x_{min}} , x_m=min left{ x_i,1leq ileq n ight } ]

    (3)

    [p( heta|D)=m Pi_{i=1}^{n}p(x_i| heta)p( heta)=mPi_{i=1}^{n}frac{1}{ heta}frac{k x_m^k}{ heta^{k+1}}=mfrac{k^nx_m^{k n}}{ heta^{n(k+2)}} ]

    PDF积分后归一化:

    [int_{x_m}^{infty}p( heta|D)d heta=mint_{x_m}^{infty}frac{k^nx_m^{k n}}{ heta^{n(k+2)}}d heta=mfrac{k^nx^{-2n+1}}{k n+2n-1}=1 ]

    解得:

    [m=frac{k n+2n-1}{k^nx_m^{-2n+1}} ]

    带回去:

    [p( heta|D)=frac{(k n+2n-1)x_m^{k n+2n-1}}{ heta^{(k+2)n}} ]

    故后验也是一个Pareto((x_m,kn+2n-1))分布。

    9.6

    (a) 阅读软件包并编译成功,实验环境:ubuntu16.04,在Makefile所在文件夹下进行make操作

    (b) 默认参数命令:/train mnist (训练) ./predict mnist.t mnist.model mnist.t.predict(测试)

    准确率:Accuracy = 80.26% (8026/10000)

    (c) 训练和测试命令不变,train.c中修改代码:x_space[j].value = sqrt(x_space[j].value); predict.c中修改代码:x[i].value=sqrt(x[i].value); 准确率:Accuracy = 87.22% (8722/10000)

    (d) 由上述实验,开根变换后准确率有所上升。由于mnist数据集的特征取值范围大约在0-300左右,跨度较大,且某些特征的取值范围比其他特征大得多,特征值较大的特征影响占比太大,进行开根变换后特征值的相对大小没有改变,但是总体缩小了,因此取值较大的特征值对结果影响降低,使得准确率上升。

    10.2

    (a) 对于两个向量(oldsymbol x)(oldsymbol y)(oldsymbol z)距离度量(d)需要满足非负性:(d(oldsymbol x,oldsymbol y)geq0),对称性:(d(oldsymbol x,oldsymbol y)=d(oldsymbol y,oldsymbol x)),同一性(d(oldsymbol x,oldsymbol y)=0 <=> oldsymbol x = oldsymbol y),三角不等式(d(oldsymbol x,oldsymbol z)leq d(oldsymbol x,oldsymbol y)+d(oldsymbol y,oldsymbol z))

    (b)根据公式(KL(p|q)=sum_xp(x)log_2frac{p(x)}{q(x)})

    [egin{split} KL(A|B)&=frac{1}{2}log_2frac{frac{1}{2}}{frac{1}{4}}+frac{1}{2}log_2frac{{frac{1}{2}}}{frac{3}{4}}=1-frac{1}{2}log_23\ KL(B|A)&=frac{1}{4}log_2frac{frac{1}{4}}{frac{1}{2}}+frac{3}{4}log_2frac{{frac{3}{4}}}{frac{1}{2}}=frac{3}{4}log_23-1\ KL(A|C)&=frac{1}{2}log_2frac{frac{1}{2}}{frac{1}{8}}+frac{1}{2}log_2frac{{frac{1}{2}}}{frac{7}{8}}=2-frac{1}{2}log_27\ KL(C|A)&=frac{1}{8}log_2frac{frac{1}{8}}{frac{1}{2}}+frac{7}{8}log_2frac{{frac{7}{8}}}{frac{1}{2}}=frac{7}{8}log_27-2\ KL(B|C)&=frac{1}{4}log_2frac{frac{1}{4}}{frac{1}{8}}+frac{3}{4}log_2frac{{frac{3}{4}}}{frac{7}{8}}=frac{3}{4}log_26-frac{3}{4}log_27-frac{1}{4}\ KL(C|B)&=frac{1}{8}log_2frac{frac{1}{8}}{frac{1}{4}}+frac{7}{8}log_2frac{{frac{7}{8}}}{frac{3}{4}}=frac{7}{8}log_27-frac{7}{8}log_26-frac{1}{8}\ end{split} ]

    上述各式均不小于0,故满足非负性,(KL(A|B) eq KL(B|A)),故不满足对称性,(KL(A,A)=0)(A,B,C)满足同一性。(KL(A|C)>KL(A|B)+KL(B|C)),故不满足三角不等式。

    (c) matlab中检验:

    DisAB = A(1)*log2(A(1)/B(1))+A(2)*log2(A(2)/B(2))
    DisBA = B(1)*log2(B(1)/A(1))+B(2)*log2(B(2)/A(2))
    DisAC = A(1)*log2(A(1)/C(1))+A(2)*log2(A(2)/C(2))
    DisCA = C(1)*log2(C(1)/A(1))+C(2)*log2(C(2)/A(2))
    DisCB = C(1)*log2(C(1)/B(1))+C(2)*log2(C(2)/B(2))
    DisBC = B(1)*log2(B(1)/C(1))+B(2)*log2(B(2)/C(2))
    DisAC-(DisAB+DisBC)>0  输出1
    DisAB =  0.20752;DisBA =  0.18872;DisAC =  0.59632;
    DisCA =  0.45644;DisCB =  0.069593;DisBC =  0.083206;
    

    10.6

    根据已知设熵为(h(x))

    [egin{split} &h(x)=-int_0^{infty} q(x)ln q(x) dx\ &max h(x),st. int_0^infty q(x)dx=1,q(x)geq 0,int_0^infty xq(x)dx=mu end{split} ]

    使用拉格朗日乘子法:

    [egin{split} L(q,a,b,c)=-int_0^{infty} q(x)ln q(x) dx+a(int_0^infty q(x)dx-1)+bq(x)+c(int_0^infty xq(x)dx-mu) end{split} ]

    (q)求导并令其等于0:

    [frac{partial L}{partial q}=-ln q(x)+1+a+b+cx=0 ]

    解得:

    [q(x)=e^{-cx-a-b-1}=me^{-nx} ]

    根据已知:

    [int_0^{infty}q(x)dx=frac{m}{n}=1 => m=n\ int_0^{infty}xq(x)dx=int_0^{infty} mxe^{-mx}dx=frac{1}{m}=u => m=frac{1}{mu} ]

    故参数为(frac{1}{mu})的实数分布是这样约束条件的最大熵分布。

  • 相关阅读:
    colemak,你用了吗?
    DELPHI一个对付内存汇漏的办法和技巧
    使用for in 循环数据集
    今天差点被断电搞死了,幸好IDE的备份救了我
    为什么继续选择DELPHI?
    无缘DELPHI的BUG
    DELPHI DOUBLE不解之迷
    失败的大牛事件委托,与我的委托
    2017-02-08 01:19:09 Scrapy: pk5_mylist
    2016-09-02 16:50:15 webqq 协议分析
  • 原文地址:https://www.cnblogs.com/dlutjwh/p/13517083.html
Copyright © 2020-2023  润新知