机器学习(五)——缓解过拟合
看图理解过拟合与欠拟合
欠拟合解决方法
增加输入特征项
增加网络参数
减少正则化参数
过拟合解决方法
数据清洗
增大训练集
采用正则化
增大正则化参数
案例
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()
#读入红蓝点,画出分隔线,不包含正则化
未正则化的结果(边界不够圆滑)
正则化后的结果
机器学习(五)——缓解过拟合相关推荐
- 深度学习机器学习理论知识:范数、稀疏与过拟合合集(2)有监督模型下的过拟合与正则化加入后缓解过拟合的原理
范数.稀疏与过拟合合集(1)范数的定义与常用范数介绍 范数.稀疏与过拟合合集(2)有监督模型下的过拟合与正则化加入后缓解过拟合的原理 范数.稀疏与过拟合合集(3)范数与稀疏化的原理.L0L1L2范数的 ...
- 深度学习机器学习理论知识:范数、稀疏与过拟合合集(5)Dropout原理,操作实现,为什么可以缓解过拟合,使用中的技巧
范数.稀疏与过拟合合集(1)范数的定义与常用范数介绍 范数.稀疏与过拟合合集(2)有监督模型下的过拟合与正则化加入后缓解过拟合的原理 范数.稀疏与过拟合合集(3)范数与稀疏化的原理.L0L1L2范数的 ...
- 机器学习模型评价指标及拟合概念
机器学习模型评价指标及拟合概念 一.机器学习模型评价指标 回归问题等连续值的差值的判断 1) MAE平均绝对误差: 2)MSE均方误差: 3)RMSE均方根误差: 4)R平方: 分类问题 1)混淆矩阵 ...
- L2正则化缓解过拟合实例
正则化(Regularization) 是机器学习中对原始损失函数引入额外信息,以便防止过拟合和提高模型泛化性能的一类方法的统称.也就是目标函数变成了原始损失函数+额外项,常用的额外项一般有两种,英文 ...
- 「机器学习速成」过拟合的风险和泛化
https://www.toutiao.com/a6702764208561340942/ 大家好,今天我们学习[机器学习速成]之过拟合的风险和泛化. 泛化是指模型很好地拟合以前未见过的新数据的能力. ...
- 使用tensorflow实现机器学习中的线性拟合
使用tensorflow实现机器学习中的线性拟合 这个例子是模拟的单变量线性回归,通过提高单变量的阶数来增加特征数量,例如:4阶相当于分解为四个特征 这种思想同样适用于多变量线性回归 import t ...
- 机器学习基础概念——过拟合和欠拟合
欢迎关注,敬请点赞! 机器学习基础概念--过拟合和欠拟合 1. 基本概念 1.1 偏差和方差 2. 欠拟合和过拟合 2.1 学习曲线 2.2 复杂程度曲线 2.3 支持向量机的过拟合和欠拟合 2.4 ...
- 一文解决机器学习中的过拟合与欠拟合问题(正则化,数据增强,Dropout)
一文解决机器学习中的过拟合与欠拟合问题(正则化,数据增强,Dropout,提前终止) 生活中的过拟合与欠拟合现象 过拟合与欠拟合的概念 解决过拟合与欠拟合问题的四大金刚 正则化 数据增强 Dropou ...
- 【TensorFlow自学2】基础语句+激活函数+损失函数+正则化缓解过拟合+优化器(SGD、Adam等)
2.1预备知识 tf.where()–条件语句真的话返回A,假的话返回B tf.where(条件语句,A(真-返回),B(假-返回)) import tensorflow as tfa=tf.cons ...
最新文章
- 平民架构的春天——UCloud数据方舟实战记
- MongoDB快速入门(五)- Where子句
- 软件工程的迷途与沉思
- python脚本-记录Python脚本的运行日志的方法
- PHP对自己I/O流访问的封装(转)
- 软件工程4 用例建模
- mysql+sqlplus命令找不到_oracle sqlplus命令报command not found
- for循环中控制事务单个提交问题
- 怎么才能够坚持做一件事并且把它做好?
- LTE(4G) ATTACH流程
- node.js学习笔记之简洁聊天室
- 第四期单独赠书,书籍翻倍,给你留了一本。
- Instruction Tuning(FLAN、instructGPT、chatGPT)
- 快排三种基本解法以及两种快排优化
- 图片转pdf/pdf多文件合并,在线一键完成
- 2023年软考网络工程师考试备考指南
- 【源码篇】聊聊源码mybatis(更新分析)
- rabbitmq的启停与异常
- 积分制给商家带来的影响有哪些?
- 高斯贝叶斯(Gaussian Naive Bayes)基于Numpy的python实现
热门文章
- one or more of the ports are invalid. Open the server editor and correct the invalid ports
- ftp 服务器 显示未登录,ftp 服务器 显示未登录
- react router 级联路由_前端路由原理解析和实现
- pythonsuper用法_python super函数使用方法详解
- java标点符号用什么意思_java怎么统计字符串内的标点符号?
- 成功解决VS编译环境下C++语言出现的异常提示:烫烫烫烫烫烫烫烫烫烫
- Python的IDE:利用MyEclipse2017软件的PyDev插件实现Python编程
- DL之DeconvNet:DeconvNet算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
- Go:go语言的认识理解、安装应用、语法使用之详细攻略
- 关于OpenGL环境配置问题(2015)