首页 > 其他分享 >范数--矩阵论

范数--矩阵论

时间:2024-09-25 23:20:23浏览次数:10  
标签:-- 矩阵 调用函数 正则 matlab 范数 norm

以下分别列举常用的向量范数和矩阵范数的定义。

  • 向量范数

1-范数:

||x||1=∑i=1N|xi|,即向量元素绝对值之和,matlab调用函数norm(x, 1) 。

2-范数:

||x||2=∑i=1Nxi2,Euclid范数(欧几里得范数,常用计算向量长度),即向量元素绝对值的平方和再开方,matlab调用函数norm(x, 2)。

∞-范数:||x||∞=maxi|xi|,即所有向量元素绝对值中的最大值,matlab调用函数norm(x, inf)。

−∞-范数:||x||−∞=mini|xi|

,即所有向量元素绝对值中的最小值,matlab调用函数norm(x, -inf)。

p-范数:||x||p=(∑i=1N|xi|p)1p
,即向量元素绝对值的p次方和的1/p次幂,matlab调用函数norm(x, p)。

1-范数:||A||1=maxj∑i=1m|ai,j|
, 列和范数,即所有矩阵列向量绝对值之和的最大值,matlab调用函数norm(A, 1)。

2-范数:||A||2=λ1,λ<br/>为ATA的最大特征值。

谱范数,即A'A矩阵的最大特征值的开平方。matlab调用函数norm(x, 2)。

∞-范数:||A||∞=maxi∑j=1N|ai,j|

,行和范数,即所有矩阵行向量绝对值之和的最大值,matlab调用函数norm(A, inf)。

F-范数:||A||F=(∑i=1m∑j=1n|ai,j|2)12

Frobenius范数,即矩阵元素绝对值的平方和再开平方,matlab调用函数norm(A, ’fro‘)。

核范数:||A||∗=∑i=1nλi,λi是A的奇异值

奇异值之和

我们从最简单的最小二乘线性模型开始。最开始,最小二乘的loss(需优化的目标函数)如下:

式中,tn是目标变量,xn是观测量(自变量),\phi 是基函数(后期推导与核化相关),是w是参数。此式有闭式解,解为:

但是我们都知道,矩阵求逆是一个病态问题,即矩阵并不是在所有情况下都有逆矩阵。所以上述式子在实际使用时会遇到问题。为了解决这个问题,可以求其近似解。可以用SGD(梯度下降法)求一个近似解,或者加入正则项(2范数)。加入正则项是我们这里要说的。加入2范数的正则项可以解决这个病态问题,并且也可以得到闭式解,在实际使用时要比用SGD快,并且加入正则化后的好处并不仅仅是这些。加入正则项(2范数)的loss如下:

其闭式解为:

此式在 \lambda 不为零时,总是有解的,所以是一个非病态的问题,这在实际使用时很好。除了这一点,2范数的正则项还有其他好处,比如控制方差和偏差的关系,得到一个好的拟合,这里就不赘述了,毕竟这里讲的是范数,有兴趣可以参阅相关资料。

加入正则项后一般情况下的loss为:

好了,我们终于可以专注于范数了。不同范数对应的曲线如下图:

(图来源于参考书PRML)

上图中,可以明显看到一个趋势,即q越小,曲线越贴近坐标轴,q越大,曲线越远离坐标轴,并且棱角越明显。那么 q=0 和 q=oo 时极限情况如何呢?猜猜看。

bingio, 你猜对了,答案就是十字架和正方形。除了图形上的直观形象,在数学公式的推导中,q=0 和 q=oo 时两种极限的行为可以简记为非零元的个数和最大项。即0范数对应向量或矩阵中非零元的个数,无穷范数对应向量或矩阵中最大的元素。具体推导可以参考维基百科。至此为止,那么他们用在机器学习里有什么区别呢?

以1范数和2范数为例:

(图来自PRML)

上图中,蓝色的圆圈表示原问题可能的解范围,橘色的表示正则项可能的解范围。而整个目标函数(原问题+正则项)有解当且仅当两个解范围相切。从上图可以很容易地看出,由于2范数解范围是圆,所以相切的点可能有很多个,绝大部分不在坐标轴上,而由于1范数是菱形,其相切的点大多在坐标轴上,而坐标轴上的点有一个特点,其只有一个坐标分量不为零,其他坐标分量为零,即是稀疏的。所以有如下结论,1范数可以导致稀疏解,2范数导致稠密解。那么为什么不用0范数呢,理论上它是求稀疏解最好的规范项了。然而在机器学习中,特征的维度往往很大,解0范数又是NP-hard问题,所以在实际中不可行。但是用1范数解是可行的,并且也可以得到稀疏解,所以实际稀疏模型中用1范数约束。

至此,我们总结一下,在机器学习中,以0范数和1范数作为正则项,可以求得稀疏解,但是0范数的求解是NP-hard问题; 以2范数作为正则项可以得到稠密解,并且由于其良好的性质,其解的定义很好,往往可以得到闭式解,所以用的很多。

另外,从距离的角度说一下范数。1范数对应街区距离,2范数对应大家熟知的欧式距离,无穷范数对应棋盘距离(切比雪夫距离)。

参考资料:

1. PRML: Pattern recognition and machine learning, Christopher M. Bishop.

2. USTC 图像分析课程ppt,统计学习课程ppt.

发布于 2017-09-25 20:15

标签:--,矩阵,调用函数,正则,matlab,范数,norm
From: https://blog.csdn.net/quaer/article/details/142533872

相关文章

  • 【算法】C++KMP算法的简洁实现
    目录简介next数组匹配完整代码简介对于朴素的字符串匹配算法,如果想在主串中寻找到第一次出现子串的位置,需要依次枚举主串中的每一个位置作为起始位置进行匹配尝试,如果主串中存在许多与子串相似结构的部分,那么朴素算法会进行大量的无用枚举,时间复杂度非常之高。KMP算法......
  • python画图|横向填充两条线之间的区域
    前述已经学习了《python画图|竖向填充两条线之间的区域》,点击下方链接直达:python画图|竖向填充两条线之间的区域-CSDN博客现在我们尝试更换填充方向,转向横向填充。【1】官网教程首先点击官网链接,直达教程:https://matplotlib.org/stable/gallery/lines_bars_and_markers/fi......
  • 【算法题】63. 不同路径 II-力扣(LeetCode)-”如果起点有障碍物,那么便到不了终点“
    【算法题】63.不同路径II-力扣(LeetCode)-”如果起点有障碍物,那么便到不了终点“1.题目下方是力扣官方题目的地址63.不同路径II一个机器人位于一个mxn网格的左上角(起始点在下图中标记为“Start”)。机器人每次只能向下或者向右移动一步。机器人试图达到网格......
  • 【Python】Python中的进制转换操作
    【Python】Python中的进制转换操作1.十进制转其他进制转二进制使用bin()函数可以将十进制整数转换为二进制字符串,前缀为'0b'。decimal_number=10binary_string=bin(decimal_number)print(binary_string)#输出:0b1010转八进制使用oct()函数可以将十进......
  • 10.Lab Nine —— file system-上
    首先切换分支到fsgitcheckoutfsmakeclean预备知识mkfs程序创建xv6文件系统磁盘映像,并确定文件系统的总块数,这个大小在kernel/param.h中的FSSIZE写明//kernel/params.h#defineFSSIZE   200000//sizeoffilesysteminblocksMakeFile文件系统和内核文......
  • JAVA语法基础总结
    packagecom.chunchuner.fourcompute;importjava.util.Random;publicclassArithmatics{privatestaticRandomrandom=newRandom();privatefinalstaticintCOUNT=30;privatestaticbooleangetProject(){intnum1=random.nextInt(101);intnum......
  • 实验1
    任务11.1源代码:1#include<stdio.h>2intmain()3{4printf("O\n");5printf("<H>\n");6printf("II\n");7printf("O\n");8printf("<H>\n");9......
  • 使用AI进行需求分析的案例研究
    生成式AI的潜在应用场景似乎无穷无尽。虽然这令人兴奋,但也可能让人不知所措。因此,团队在使用这项技术时需要有明确的目标:关键是要明确生成式AI在团队工作中能产生哪些实质性影响。在软件工程中,一个引人注目的应用场景是需求分析。这是一个常常被忽视但充满挑战的环节,如果处理......
  • 06 常用内置模块总结
    -其他需背会len获取长度openrange随机生成数id是比较内存地址is/==是进行比较type获取数据类型输入输出printinput强制转换dict()list()tuple()int()str()bool()set()数学相关abs,绝对值v=abs(-1)print(v)float,转换成浮点型(小数)v=55v1=......
  • getopt函数的使用
    getopt函数intgetopt(intargc,char*constargv[],constchar*optstring);头文件:#include<unistd.h>参数:argc:命令行参数的数量**argv*8:一个字符串数组,包含所有命令行参数**optstring*8:一个字符串,定义了合法的选项字符(例如:"abc:"表示-a,-b,和-c需......