看图理解过拟合与欠拟合

欠拟合解决方法

  • 增加输入特征项

  • 增加网络参数

  • 减少正则化参数

过拟合解决方法

  • 数据清洗

  • 增大训练集

  • 采用正则化

  • 增大正则化参数

案例

import tensorflow as tf
from matplotlib import pyplot as plt
import numpy as np
import pandas as pd
###正则化缓解过拟合
# 正则化在损失函数中引入模型复杂度指标,利用给W加权值,弱化训练数据的噪声(一般不正则化b)# 正则化的选择
# L1正则化大概率会使很多参数变为0,因此该方法可通过稀疏参数,即加少参数的数量,降低复杂度
# L2正则化会使参数很接近0但不为0,因此该方法可通过减小参数值的大小降低复杂度###读入数据
df = pd.read_csv("dot.csv")
x_data = np.array(df[['x1', 'x2']])
y_data = np.array(df['y_c'])##-1的意思是行数自动生成
x_train = np.vstack(x_data).reshape(-1, 2)
y_train = np.vstack(y_data).reshape(-1, 1)Y_c = [['red' if y else 'blue'] for y in y_train]##转换数据类型。不然后面矩阵相乘会报错
x_train = tf.cast(x_train, dtype=tf.float32)
y_train = tf.cast(y_train, dtype=tf.float32)#from_tensor_slices函数切分传入的张量的第一个维度,生成相应的数据集,输入特征与标签一一对应
train_db = tf.data.Dataset.from_tensor_slices((x_train, y_train)).batch(32)###这里定义了两层网络
#生成升神经网络参数,输入层为2个神经元(因为两个特征),隐藏层为11个神经元(这个自己选),1层为隐藏层,输出层为1个神经元
#用tf.Variable()保证参数可训练
w1 = tf.Variable(tf.random.normal([2,11]), dtype=tf.float32)
b1 = tf.Variable(tf.constant(0.01, shape=[11]))
##第二层,输出节点必须和标签个数一样所以是1,神经元个数要和前面的保持一致所以是[11,1]
w2 = tf.Variable(tf.random.normal([11,1]), dtype=tf.float32)
b2 = tf.Variable(tf.constant(0.01, shape=[1]))lr = 0.005#学习率
epoch = 800#循环轮数#训练部分
for epoch in range(epoch):for step, (x_train, y_train) in enumerate(train_db):with tf.GradientTape() as tape:h1 = tf.matmul(x_train, w1) + b1##relu激活函数h1 = tf.nn.relu(h1)y = tf.matmul(h1, w2) + b2#采用均方误差损失函数mse = mean(sum(y-out)^2)loss_mse = tf.reduce_mean(tf.square(y_train - y))###添加l2正则化缓解过拟合#####################################loss_regularization = []loss_regularization.append(tf.nn.l2_loss(w1))loss_regularization.append(tf.nn.l2_loss(w2))loss_regularization = tf.reduce_sum(loss_regularization)loss = loss_mse + 0.03 * loss_regularization##########################################################计算loss对各个参数的梯度variables = [w1, b1, w2, b2]grads = tape.gradient(loss, variables)#开始梯度更新#w1 = w1 -lr * w1_grad tape.gradient是自动求导结果与[w1, b1, w2, b2] 索引为0 1 2 3w1.assign_sub(lr * grads[0])b1.assign_sub(lr * grads[1])w2.assign_sub(lr * grads[2])b2.assign_sub(lr * grads[3])##每20个epoch 打印一下lossif epoch % 20 == 0:print('epoch:', epoch, 'loss', float(loss))##预测部分
print("*******predict********")
xx, yy = np.mgrid[-3:3:.1, -3:3:.1]
# 将xx,yy拉直,并合并配对为二维张量,生成二维坐标点
grid = np.c_[xx.ravel(), yy.ravel()]
grid = tf.cast(grid, tf.float32)
#将网格坐标放入神经网络,进行预测,probs为输出
probs = []
for x_test in grid:#使用训练好的参数w1, b1, w2, b2进行预测h1 = tf.matmul([x_test], w1) + b1h1 = tf.nn.relu(h1)y = tf.matmul(h1, w2) + b2#预测结果probs.append(y)
#取第0列给x1,取第1列给x2
x1 = x_data[:, 0]
x2 = x_data[:, 1]
#probs的shape调整成xx的样子
probs = np.array(probs).reshape(xx.shape)
plt.scatter(x1, x2, color = np.squeeze(Y_c))#squeeze去掉维度是1的维度
# 把坐标xx yy和对应的值probs放入contour函数,给probs值0.5的所有点上色
plt.contour(xx, yy, probs, levels=[.5])
plt.show()
#读入红蓝点,画出分隔线,不包含正则化

未正则化的结果(边界不够圆滑)

正则化后的结果

机器学习(五)——缓解过拟合相关推荐

  1. 深度学习机器学习理论知识:范数、稀疏与过拟合合集(2)有监督模型下的过拟合与正则化加入后缓解过拟合的原理

    范数.稀疏与过拟合合集(1)范数的定义与常用范数介绍 范数.稀疏与过拟合合集(2)有监督模型下的过拟合与正则化加入后缓解过拟合的原理 范数.稀疏与过拟合合集(3)范数与稀疏化的原理.L0L1L2范数的 ...

  2. 深度学习机器学习理论知识:范数、稀疏与过拟合合集(5)Dropout原理,操作实现,为什么可以缓解过拟合,使用中的技巧

    范数.稀疏与过拟合合集(1)范数的定义与常用范数介绍 范数.稀疏与过拟合合集(2)有监督模型下的过拟合与正则化加入后缓解过拟合的原理 范数.稀疏与过拟合合集(3)范数与稀疏化的原理.L0L1L2范数的 ...

  3. 机器学习模型评价指标及拟合概念

    机器学习模型评价指标及拟合概念 一.机器学习模型评价指标 回归问题等连续值的差值的判断 1) MAE平均绝对误差: 2)MSE均方误差: 3)RMSE均方根误差: 4)R平方: 分类问题 1)混淆矩阵 ...

  4. L2正则化缓解过拟合实例

    正则化(Regularization) 是机器学习中对原始损失函数引入额外信息,以便防止过拟合和提高模型泛化性能的一类方法的统称.也就是目标函数变成了原始损失函数+额外项,常用的额外项一般有两种,英文 ...

  5. 「机器学习速成」过拟合的风险和泛化

    https://www.toutiao.com/a6702764208561340942/ 大家好,今天我们学习[机器学习速成]之过拟合的风险和泛化. 泛化是指模型很好地拟合以前未见过的新数据的能力. ...

  6. 使用tensorflow实现机器学习中的线性拟合

    使用tensorflow实现机器学习中的线性拟合 这个例子是模拟的单变量线性回归,通过提高单变量的阶数来增加特征数量,例如:4阶相当于分解为四个特征 这种思想同样适用于多变量线性回归 import t ...

  7. 机器学习基础概念——过拟合和欠拟合

    欢迎关注,敬请点赞! 机器学习基础概念--过拟合和欠拟合 1. 基本概念 1.1 偏差和方差 2. 欠拟合和过拟合 2.1 学习曲线 2.2 复杂程度曲线 2.3 支持向量机的过拟合和欠拟合 2.4 ...

  8. 一文解决机器学习中的过拟合与欠拟合问题(正则化,数据增强,Dropout)

    一文解决机器学习中的过拟合与欠拟合问题(正则化,数据增强,Dropout,提前终止) 生活中的过拟合与欠拟合现象 过拟合与欠拟合的概念 解决过拟合与欠拟合问题的四大金刚 正则化 数据增强 Dropou ...

  9. 【TensorFlow自学2】基础语句+激活函数+损失函数+正则化缓解过拟合+优化器(SGD、Adam等)

    2.1预备知识 tf.where()–条件语句真的话返回A,假的话返回B tf.where(条件语句,A(真-返回),B(假-返回)) import tensorflow as tfa=tf.cons ...

最新文章

  1. 平民架构的春天——UCloud数据方舟实战记
  2. MongoDB快速入门(五)- Where子句
  3. 软件工程的迷途与沉思
  4. python脚本-记录Python脚本的运行日志的方法
  5. PHP对自己I/O流访问的封装(转)
  6. 软件工程4 用例建模
  7. mysql+sqlplus命令找不到_oracle sqlplus命令报command not found
  8. for循环中控制事务单个提交问题
  9. 怎么才能够坚持做一件事并且把它做好?
  10. LTE(4G) ATTACH流程
  11. node.js学习笔记之简洁聊天室
  12. 第四期单独赠书,书籍翻倍,给你留了一本。
  13. Instruction Tuning(FLAN、instructGPT、chatGPT)
  14. 快排三种基本解法以及两种快排优化
  15. 图片转pdf/pdf多文件合并,在线一键完成
  16. 2023年软考网络工程师考试备考指南
  17. 【源码篇】聊聊源码mybatis(更新分析)
  18. rabbitmq的启停与异常
  19. 积分制给商家带来的影响有哪些?
  20. 高斯贝叶斯(Gaussian Naive Bayes)基于Numpy的python实现

热门文章

  1. one or more of the ports are invalid. Open the server editor and correct the invalid ports
  2. ftp 服务器 显示未登录,ftp 服务器 显示未登录
  3. react router 级联路由_前端路由原理解析和实现
  4. pythonsuper用法_python super函数使用方法详解
  5. java标点符号用什么意思_java怎么统计字符串内的标点符号?
  6. 成功解决VS编译环境下C++语言出现的异常提示:烫烫烫烫烫烫烫烫烫烫
  7. Python的IDE:利用MyEclipse2017软件的PyDev插件实现Python编程
  8. DL之DeconvNet:DeconvNet算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
  9. Go:go语言的认识理解、安装应用、语法使用之详细攻略
  10. 关于OpenGL环境配置问题(2015)