通过一个小例子帮助你理解正则化(附python代码)

2 篇文章 0 订阅
1 篇文章 0 订阅

一.L1和L2正则化简单介绍:

1.L1和L2正则化的作用(这一部分摘自网络,我主要是提供后面的代码说明):

在这里插入图片描述

L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择,一定程度上,L1也可以防止过拟合。

L2正则化可以防止模型过拟合(overfitting)

L2正则化可以直观理解为它对于大数值的权重向量进行严厉惩罚,倾向于更加分散的权重向量。由于输入和权重之间的乘法操作,这样就有一个优良的特性:使网络更倾向于使用所有输入特征,而不是严重依赖输入特征中某些小部分特征。L2惩罚倾向于更小更分散的权重向量,这就会鼓励分类器最终将所有维度上的特征都用起来,而不是强烈依赖其中少数几个维度,这样做可以提高模型的范化能力,降低过拟合的风险。
(转自https://www.cnblogs.com/zhibei/p/12397975.html)

二.代码实现

本例通过两个点拟合出y=ax^2+bx+c曲线,a、b、c为参数,需要我们解出来,当然,会有无数个a、b、c的值满足要求,这就好比深度学习中参数远远多于样本数。正则化可以使得参数的值尽可能接近0。
p1=(x1,y1),p2= (x2,y2)为两个样本点,本例取 p1 = [5, 3],p2= [-3, -9]

1.没有用正则化的例子

损失函数为 L = [ a ( X 1 ) 2 + b ( x 1 ) + c − y 1 ] 2 + [ a ( X 2 ) 2 + b ( x 2 ) + c − y 2 ] 2 L = [a(X1)^2+b(x1)+c-y1]^2+ [a(X2)^2+b(x2)+c-y2]^2 L=[a(X1)2+b(x1)+cy1]2+[a(X2)2+b(x2)+cy2]2

下面展示具体代码:
def No_rugularization(e,f):
    '''
    没有用正则化 abc系数都很大
    :param e: e f为传入的两个点,列表形式如[2,4]
    :param f: 同上
    :return: a,b,c。即一元二次方程的三个系数
    '''
    x1=e[0]
    y1=e[1]
    x2=f[0]
    y2=f[1]
    a=-1000000
    c,b=1000 ,1000
    L=(a*x1**2+b*x1+c-y1)**2+(a*x2**2+b*x2+c-y2)**2
    print(L)
    for i in range(100000):
        a = a - (2*(a*x1**2+b*x1+c-y1)*(x1**2)+2*(a*x2**2+b*x2+c-y2)*(x2**2))*0.001
        b = b - (2*(a*x1**2+b*x1+c-y1)*(x1)+2*(a*x2**2+b*x2+c-y2)*(x2))*0.001
        c = c - (2*(a*x1**2+b*x1+c-y1)+2*(a*x2**2+b*x2+c-y2))*0.001
    L1 = (a * x1 ** 2 + b * x1 + c - y1) ** 2 + (a * x2 ** 2 + b * x2 + c - y2) ** 2
    print(L1,'L1')
    print(a,b,c)
    return a,b,c
def testfunction(f):
    p1 = [5, 3]
    p2 = [-3, -9]
    a, b, c = f(p1, p2)
    x = np.arange(-20, 20)
    y = a * x ** 2 + b * x + c
    plt.title("Matplotlib demo")
    plt.xlabel("x axis caption")
    plt.ylabel("y axis caption")
    plt.plot(x, y)
    [a1, b1] = p1 
    [a2, b2] = p2
    plt.plot(a1, b1, 'ob')
    plt.plot(a2, b2, 'ob')
    plt.show()

执行testfunction则得到实验结果

  testfunction(No_rugularization)#实验结果表明所得的系数绝对值很大

所学到的曲线:在这里插入图片描述

结果为:a=1726.5490931668319,b= -3451.5981863336674,c= -25902.736397502467

2.用了正则化的例子

损失函数为 L = [ a ( X 1 ) 2 + b ( x 1 ) + c − y 1 ] 2 + [ a ( X 2 ) 2 + b ( x 2 ) + c − y 2 ] 2 + a 2 + b 2 + c 2 L = [a(X1)^2+b(x1)+c-y1]^2+ [a(X2)^2+b(x2)+c-y2]^2+a^2+b^2+c^2 L=[a(X1)2+b(x1)+cy1]2+[a(X2)2+b(x2)+cy2]2+a2+b2+c2
$$

def ZhengzehuaL2(e,f):
   x1=e[0]
   y1=e[1]
   x2=f[0]
   y2=f[1]
   a=-1000000
   c,b=1000 ,1000#给一个较大初始值
   L=(a*x1**2+b*x1+c-y1)**2+(a*x2**2+b*x2+c-y2)**2+a**2+b**2+c**2
   print(L)
   for i in range(100000):#学习率设为0.001
       a = a - (2*(a*x1**2+b*x1+c-y1)*(x1**2)+2*(a*x2**2+b*x2+c-y2)*(x2**2)+a*2)*0.001
       b = b - (2*(a*x1**2+b*x1+c-y1)*(x1)+2*(a*x2**2+b*x2+c-y2)*(x2)+b*2)*0.001
       c = c - (2*(a*x1**2+b*x1+c-y1)+2*(a*x2**2+b*x2+c-y2)+c*2)*0.001
   L1 = (a * x1 ** 2 + b * x1 + c - y1) ** 2 + (a * x2 ** 2 + b * x2 + c - y2) ** 2
   print(L1,'L1')
   print(a,b,c)
   return a,b,c

执行testfunction再得到实验结果

  testfunction(ZhengzehuaL2)#实验结果表明  正则化 让所得的系数绝对值非常小

在这里插入图片描述
结果为:a= -0.26734786263984833,b=1.9645605639267882,c= -0.27976459936624853
实验结果表明:正则化 让所得的系数绝对值非常小

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 信息抽取是指从大量文本中提取有价值的信息的过程。它可以帮助我们从海量文本中快速获取所需的信息。 下面是一个使用 Python 代码实现信息抽取的示例。假设我们要抽取文本中的所有电子邮件地址: ``` import re text = "我的电子邮件地址是example@gmail.com,请将信息发送到example@yahoo.com。" pattern = r'[\w\.-]+@[\w\.-]+' email_addresses = re.findall(pattern, text) print(email_addresses) # 输出:['example@gmail.com', 'example@yahoo.com'] ``` 在这个例子中,我们使用了 Python 的正则表达式模块 `re` 来实现信息抽取。我们先定义了一个匹配电子邮件地址的正则表达式,然后使用 `re.findall` 函数扫描文本,并提取所有符合正则表达式的信息。最后,我们使用 `print` 函数输出提取到的信息。 希望这个例子帮助理解信息抽取的基本过程。如果您对 Python 中的正则表达式不熟悉,可以先学习一下相关的知识。 ### 回答2: 信息抽取是从非结构化或半结构化的文本中提取出有价值的信息的过程。Python作为一种较为常用的编程语言,提供了很多库和工具来辅助进行信息抽取。 下面以一个简单的例子来说明如何使用Python进行信息抽取。 假设我们有一段新闻文本,需要从中提取出地点和日期信息。首先,我们需要使用Python中的正则表达式库re来匹配文本中的地点和日期模式。 ```python import re news_text = "2022年7月1日,世界杯将在卡塔尔多个城市举行比赛。" # 正则表达式模式 date_pattern = r"\d{4}年\d+月\d+日" location_pattern = r"在\w+" # 提取日期 date_result = re.findall(date_pattern, news_text) # 提取地点 location_result = re.search(location_pattern, news_text) # 输出结果 print("日期:", date_result) print("地点:", location_result.group().replace("在", "")) ``` 运行以上代码,将得到以下输出: ``` 日期: ['2022年7月1日'] 地点: 卡塔尔 ``` 以上代码首先定义了日期和地点的正则表达式模式。然后使用re.findall方法匹配日期模式,将结果保存在date_result列表中。使用re.search方法匹配地点模式,将结果保存在location_result中。 最后,通过print语句将提取到的日期和地点信息输出。 这只是一个简单的例子,实际中的信息抽取任务可能更为复杂。但是Python提供了很多强大的工具库,如BeautifulSoup、Scrapy等,可以辅助我们进行更复杂的信息抽取任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值