1. %matplotlib inline
  2. import mxnet
  3. from mxnet import nd,autograd
  4. from mxnet import gluon,init
  5. from mxnet.gluon import data as gdata,loss as gloss,nn
  6. import gluonbook as gb
  7.  
  8. n_train, n_test, num_inputs = 20,100,200
  9.  
  10. true_w = nd.ones((num_inputs, 1)) * 0.01
  11. true_b = 0.05
  12.  
  13. features = nd.random.normal(shape=(n_train+n_test, num_inputs))
  14. labels = nd.dot(features,true_w) + true_b
  15. labels += nd.random.normal(scale=0.01, shape=labels.shape)
  16.  
  17. train_feature = features[:n_train,:]
  18. test_feature = features[n_train:,:]
  19. train_labels = labels[:n_train]
  20. test_labels = labels[n_train:]
  21.  
  22. #print(features,train_feature,test_feature)
  23.  
  24. # 初始化模型参数
  25. def init_params():
  26. w = nd.random.normal(scale=1, shape=(num_inputs, 1))
  27. b = nd.zeros(shape=(1,))
  28. w.attach_grad()
  29. b.attach_grad()
  30. return [w,b]
  31.  
  32. # 定义,训练,测试
  33.  
  34. batch_size = 1
  35. num_epochs = 100
  36. lr = 0.03
  37.  
  38. train_iter = gdata.DataLoader(gdata.ArrayDataset(train_feature,train_labels),batch_size=batch_size,shuffle=True)
  39.  
  40. # 定义网络
  41. def linreg(X, w, b):
  42. return nd.dot(X,w) + b
  43.  
  44. # 损失函数
  45. def squared_loss(y_hat, y):
  46. """Squared loss."""
  47. return (y_hat - y.reshape(y_hat.shape)) ** 2 / 2
  48.  
  49. # L2 范数惩罚
  50. def l2_penalty(w):
  51. return (w**2).sum() / 2
  52.  
  53. def sgd(params, lr, batch_size):
  54. for param in params:
  55. param[:] = param - lr * param.grad / batch_size
  56.  
  57. def fit_and_plot(lambd):
  58. w, b = init_params()
  59. train_ls, test_ls = [], []
  60. for _ in range(num_epochs):
  61. for X, y in train_iter:
  62. with autograd.record():
  63. # 添加了 L2 范数惩罚项。
  64. l = squared_loss(linreg(X, w, b), y) + lambd * l2_penalty(w)
  65. l.backward()
  66. sgd([w, b], lr, batch_size)
  67. train_ls.append(squared_loss(linreg(train_feature, w, b),
  68. train_labels).mean().asscalar())
  69. test_ls.append(squared_loss(linreg(test_feature, w, b),
  70. test_labels).mean().asscalar())
  71. gb.semilogy(range(1, num_epochs + 1), train_ls, 'epochs', 'loss',
  72. range(1, num_epochs + 1), test_ls, ['train', 'test'])
  73. print('L2 norm of w:', w.norm().asscalar())
  1. fit_and_plot(0)
    fit_and_plot(3)

训练集太少,容易出现过拟合,即训练集loss远小于测试集loss,解决方案,权重衰减——(L2范数正则化)

例如线性回归:

loss(w1,w2,b) = 1/n * sum(x1w1 + x2w2 + b - y)^2 /2 ,平方损失函数。

权重参数 w = [w1,w2],

新损失函数 loss(w1,w2,b) += lambd / 2n *||w||^2

迭代方程:

L2范数惩罚项,高维线性回归的更多相关文章

  1. 小白学习之pytorch框架(6)-模型选择(K折交叉验证)、欠拟合、过拟合(权重衰减法(=L2范数正则化)、丢弃法)、正向传播、反向传播

    下面要说的基本都是<动手学深度学习>这本花书上的内容,图也采用的书上的 首先说的是训练误差(模型在训练数据集上表现出的误差)和泛化误差(模型在任意一个测试数据集样本上表现出的误差的期望) ...

  2. 机器学习中的范数规则化 L0、L1与L2范数 核范数与规则项参数选择

    http://blog.csdn.net/zouxy09/article/details/24971995 机器学习中的范数规则化之(一)L0.L1与L2范数 zouxy09@qq.com http: ...

  3. 机器学习中的范数规则化之 L0、L1与L2范数、核范数与规则项参数选择

    装载自:https://blog.csdn.net/u012467880/article/details/52852242 今天我们聊聊机器学习中出现的非常频繁的问题:过拟合与规则化.我们先简单的来理 ...

  4. 《机器学习实战》学习笔记第八章 —— 线性回归、L1、L2范数正则项

    相关笔记: 吴恩达机器学习笔记(一) —— 线性回归 吴恩达机器学习笔记(三) —— Regularization正则化 ( 问题遗留: 小可只知道引入正则项能降低参数的取值,但为什么能保证 Σθ2  ...

  5. deep learning (五)线性回归中L2范数的应用

    cost function 加一个正则项的原因是防止产生过拟合现象.正则项有L1,L2 等范数,我看过讲的最好的是这个博客上的:机器学习中的范数规则化之(一)L0.L1与L2范数.看完应该就答题明白了 ...

  6. paper 126:[转载] 机器学习中的范数规则化之(一)L0、L1与L2范数

    机器学习中的范数规则化之(一)L0.L1与L2范数 zouxy09@qq.com http://blog.csdn.net/zouxy09 今天我们聊聊机器学习中出现的非常频繁的问题:过拟合与规则化. ...

  7. 机器学习中的范数规则化之(一)L0、L1与L2范数(转)

    http://blog.csdn.net/zouxy09/article/details/24971995 机器学习中的范数规则化之(一)L0.L1与L2范数 zouxy09@qq.com http: ...

  8. L0、L1与L2范数、核范数(转)

    L0.L1与L2范数.核范数 今天我们聊聊机器学习中出现的非常频繁的问题:过拟合与规则化.我们先简单的来理解下常用的L0.L1.L2和核范数规则化.最后聊下规则化项参数的选择问题.这里因为篇幅比较庞大 ...

  9. 机器学习中的范数规则化之(一)L0、L1与L2范数 非常好,必看

    机器学习中的范数规则化之(一)L0.L1与L2范数 zouxy09@qq.com http://blog.csdn.net/zouxy09 今天我们聊聊机器学习中出现的非常频繁的问题:过拟合与规则化. ...

随机推荐

  1. echarts Y轴数据类型不同怎么让折线图显示差距不大

    如果希望在同一grid中展示不同数据类型的折线(1000或10%),那么展现出来的折线肯定显示差距很大,那么怎么让这两条折线显示效果差不多,在之前的项目中碰到了这个问题 每条折线对应的是不同的数据组, ...

  2. spark第二篇:Application Submission Guide

    提交应用 Spark的bin目录中的spark-submit脚本用于启动集群上的应用程序.它可以通过一个统一的接口使用所有Spark支持的集群管理器. 绑定应用程序的依赖 如果你的代码依赖其他项目,你 ...

  3. 有关tensorflow一些问题

    1.python版本 采用64位的python 2.系统不支持高版本tensorflow(>1.6),运行报错如下: 问题描述如下: ImportError: DLL load failed: ...

  4. nginx 问题总结

    1, 403错误 403是很常见的错误代码,一般就是未授权被禁止访问的意思. 可能的原因有两种:Nginx程序用户无权限访问web目录文件Nginx需要访问目录,但是autoindex选项被关闭 修复 ...

  5. Dubbo解析及原理浅析

    原文链接:https://blog.csdn.net/chao_19/article/details/51764150 一.Duboo基本概念解释 Dubbo是一种分布式服务框架. Webservic ...

  6. Composite Design Pattern in Java--转

    https://dzone.com/articles/composite-design-pattern-in-java-1 The composite pattern is meant to &quo ...

  7. WPF 窗体在Alt+Tab中隐藏

    问题: 近段时间由于项目上的需求,需要在WPF中使用COM组件,并且由于软件界面设计等等原因,需要将部分控件显示在COM组件之上,由于WindowsFormsHost的一些原因,导致继承在WPF中的W ...

  8. BNU34058——干了这桶冰红茶!——————【递推】

    干了这桶冰红茶! Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      Java class nam ...

  9. 当Activity出现Exception时是如何处理的?

    1.ActivityThread 2.PerformStop 在这里会调用mWindow.closeAllPanels(),从而关闭OptionMenu, ContextMenu.如果自己通过Wind ...

  10. shiro 配置导图

    1 web.xml配置:shiro filter必须放在其他filter之前 <filter> <filter-name>shiroFilter</filter-name ...