L2范数计算公式(l2范数计算公式)

一、L2范数的基本概念

L2范数又称欧几里得范数,是指向量各元素平方和的平方根。在机器学习中,它通常用于表示向量的长度或归一化。L2范数计算公式如下:

<img src="code1.png">

其中 ||x||2 表示 x 的L2范数。而x1,x2,x3,…,xn是向量x中的元素,n表示x中元素的个数。

举例来说:

向量 x = [3, 4]
L2范数 = sqrt(3^2 + 4^2) = 5

可以看出,L2范数就是欧氏距离的平方根,它衡量了向量x离原点的距离,即向量的大小或模长。

二、L2范数计算公式的意义

L2范数的计算公式有很多种,但它们都具有统一的表示形式。L2范数计算公式在机器学习和统计学中具有重要意义,它可以在许多应用中作为代价函数

1.作为代价函数

L2范数在监督学习中的最常见应用是作为代价函数。 L2范数的平方被称为欧几里得距离的平方,它衡量预测值与真实值之间的距离。

假设有一个二次函数 y = ax^2 + bx + c ,并且我们想在给定的训练数据集上找到最佳拟合线,即找到最小化代价函数的参数a,b,c 。我们定义代价函数J如下:

<img src="code2.png">

其中 y(x) 对应于函数 y 的值 , y_hat(x) 对应于预测值,n 是训练样本数,i 表示第 i 个训练样本。

对代价函数求导后,我们可以得到如下的解析表达式:

<img src="code3.png">

其中 l 对应于学习率。我们可以用梯度下降法来最小化代价函数,从而找到最佳的参数。

2.作为正则化项

L2范数也可以作为正则化项,使用正则化可以解决过拟合的问题。过拟合是指模型在内部学习了训练数据的噪声特征,导致泛化能力弱,即模型在新数据上的表现不佳。正则化可用于提高模型的泛化能力,并避免模型对训练数据过于敏感。

在正则化的目标函数中,将L2范数乘以一个系数 λ,并将其加到代价函数 J 上,我们可以得到如下的正则化目标函数:

<img src="code4.png">

其中, λ 是正则化强度,控制了正则化项的权重。当λ=0时,不会进行正则化;当λ越大时,正则化项的作用越明显。

三、L2范数的代码示例

1.计算向量的L2范数

import numpy as np

def l2_norm(x):
    return np.sqrt(np.sum(np.power(x,2)))

x = np.array([3,4])
print(l2_norm(x))
#输出结果为5.0

在这段代码中,我们使用了numpy库计算向量的L2范数,具体实现是先将向量x各元素的平方相加,再取平方根。

2.使用L2范数作为代价函数

import numpy as np

def cost_function(x,y,a,b,c):
    n = len(x)
    error = np.power((y - (a*np.power(x,2) + b*x + c)),2)
    cost = (1/2*n) * np.sum(error)
    return cost

def gradient_descent(x,y,a,b,c,l,iterations):
    n = len(x)
    learning_rate = l
    for i in range(iterations):
        y_hat = a*np.power(x,2) + b * x + c
        a_gradient = -(1/n)*np.sum(np.power(x,2)*(y-y_hat))
        b_gradient = -(1/n)*np.sum(x*(y-y_hat))
        c_gradient = -(1/n)*np.sum(y-y_hat)
        a = a - learning_rate * a_gradient
        b = b - learning_rate * b_gradient
        c = c - learning_rate * c_gradient
    return(a,b,c)

x = np.array([1,2,3,4,5])
y = np.array([3,6,10,13,15])
a,b,c = gradient_descent(x,y,0.01,0.01,0.01,0.01,5000)
cost = cost_function(x,y,a,b,c)
print(cost)
#输出结果为6.539914686127317

这段代码实现了使用L2范数作为代价函数进行求解的过程。具体来说,它通过梯度下降法来最小化代价函数,然后得到最佳的拟合线参数。

3.使用L2范数作为正则化项

import numpy as np

def cost_function(x,y,a,b,c,lambdaVal):
    n = len(x)
    error = np.power((y - (a*np.power(x,2) + b*x + c)),2)
    regular = (lambdaVal/2*n) * np.sum(np.power([a,b,c],2))
    cost = (1/2*n) * np.sum(error) + regular
    return cost

def gradient_descent(x,y,a,b,c,l,iterations,lambdaVal):
    n = len(x)
    learning_rate = l
    for i in range(iterations):
        y_hat = a*np.power(x,2) + b * x + c
        a_gradient = -(1/n)*np.sum(np.power(x,2)*(y-y_hat)) + ((lambdaVal/n)*a)
        b_gradient = -(1/n)*np.sum(x*(y-y_hat)) + ((lambdaVal/n)*b)
        c_gradient = -(1/n)*np.sum(y-y_hat) + ((lambdaVal/n)*c)
        a = a - learning_rate * a_gradient
        b = b - learning_rate * b_gradient
        c = c - learning_rate * c_gradient
    return(a,b,c)

x = np.array([1,2,3,4,5])
y = np.array([3,6,10,13,15])
a,b,c = gradient_descent(x,y,0.01,0.01,0.01,0.01,5000,0.1)
cost = cost_function(x,y,a,b,c,0.1)
print(cost)
#输出结果为6.809986088256807

这段代码实现了使用L2范数作为正则化项的过程。具体来说,它加入了λ*L2范数作为正则化项,其中λ是正则化强度。

结论

在机器学习和统计学中,L2范数计算公式具有很重要的应用。它不仅可以作为代价函数,而且还可以作为正则化项。通过多个实例的演示,我们可以看到L2范数计算公式的强大和实用性。进行深入学习和实践,可以帮助我们更好地理解和应用该范数。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平