Ridge和Lasso回归代码实现–Tensorflow部分–潘登同学的机器学习笔记

python版本–3.6 ; Tensorflow版本–1.15.0 ;编辑器–Pycharm

文章目录

    • Ridge和Lasso回归代码实现--Tensorflow部分--潘登同学的机器学习笔记
  • Ridge回归
    • 代码
    • 结果
  • Lasso回归
    • 代码
    • 结果
  • ElasticNet
    • 代码
    • 结果

Ridge回归

  • 任务:

以iris数据集的除Sepal length的数据作为X, 以Sepal length作为Y, 用X去拟合Y;

前面已经很详细介绍过了, 这里直接看代码

代码

import matplotlib.pyplot as plt  # 画图库
import tensorflow as tf
import numpy as np  #矩阵库
from sklearn import datasets   #导入数据集
from tensorflow.python.framework import ops   #Loss函数优化器
ops.get_default_graph()
sess = tf.Session()iris = datasets.load_iris()
X = np.array([x[1:4] for x in iris.data])
Y = np.array([y[0] for y in iris.data])# 声明学习率, 批量大小, 占位符和模型变量
seed = 42
tf.set_random_seed(seed)
learning_rate = 0.01
batch_size = 25
x_data = tf.placeholder(shape=[None, 3], dtype=tf.float32)
y_target = tf.placeholder(shape=[None, 1], dtype=tf.float32)
W = tf.Variable(tf.random_normal(shape=[3, 1]))
b = tf.Variable(tf.random_normal(shape=[1, 1]))# 增加线性模型
model_output = tf.add(tf.matmul(x_data, W), b)# 声明损失函数 MSE+L2, 其为批量损失的平均值, 初始化变量, 声明优化器
L2_regularization_param = tf.reduce_mean(tf.square(W))  # L2正则项
loss = tf.expand_dims(tf.add(tf.reduce_mean(tf.square(y_target - model_output)), L2_regularization_param), 0) # MSE+L2
# `tf.square` 表示向量的平方  `tf.reduce_mean` 表示计算张量在指定维度上的平均值, 如果没有指定就是普通的算平均值
init = tf.global_variables_initializer()  # 表示初始化操作
my_opt = tf.train.GradientDescentOptimizer(learning_rate)  # 表示选择梯度下降法作为优化器
train_step = my_opt.minimize(loss)  # 最小化Loss损失
sess.run(init)  # 运行初始化操作# 迭代遍历, 并在随机选择的数据上进行模型训练, 迭代100次 每25次迭代输出变量值和损失值, 将其用于之后的可视化
loss_vec = []  # 储存loss随迭代次数的变化, 等一下用于画图
for i in range(100):rand_index = np.random.choice(len(X), size=batch_size)  # 随机挑选X, 用于小批量随机梯度下降rand_x = X[rand_index]rand_y = np.transpose([Y[rand_index]])# 目标:最优化损失sess.run(train_step, feed_dict={x_data:rand_x,y_target:rand_y})# 更新loss值temp_loss = sess.run(loss, feed_dict={x_data:rand_x,y_target:rand_y})loss_vec.append(temp_loss)# 每25次打印if (i+1) % 25 == 0:print('Step:', i+1, 'w为:', sess.run(W), 'b为:', sess.run(b)[0][0])print('Loss为:', temp_loss)# 抽取系数, 创建最佳拟合直线
slope = sess.run(W)[0][0]
y_intercept = sess.run(b)[0][0]
best_fit = []
for i in X:best_fit.append(slope * i + y_intercept)
# 绘制两幅图 第一个是拟合直线(高维空间的画图就不画了) 另一个是迭代100次的L2正则损失
plt.figure(2)
plt.plot(loss_vec, 'k--')
plt.title('Ridge loss per Generation')
plt.xlabel('Generation')
plt.ylabel('loss')
plt.show()

结果

Lasso回归

  • 任务:

以iris数据集的除Sepal length的数据作为X, 以Sepal length作为Y, 用X去拟合Y;

代码

import matplotlib.pyplot as plt  # 画图库
import tensorflow as tf
import numpy as np  #矩阵库
from sklearn import datasets   #导入数据集
from tensorflow.python.framework import ops   #Loss函数优化器
ops.get_default_graph()
sess = tf.Session()iris = datasets.load_iris()
X = np.array([x[1:4] for x in iris.data])
Y = np.array([y[0] for y in iris.data])# 声明学习率, 批量大小, 占位符和模型变量
seed = 42
tf.set_random_seed(seed)
learning_rate = 0.01
batch_size = 25
x_data = tf.placeholder(shape=[None, 3], dtype=tf.float32)
y_target = tf.placeholder(shape=[None, 1], dtype=tf.float32)
W = tf.Variable(tf.random_normal(shape=[3, 1]))
b = tf.Variable(tf.random_normal(shape=[1, 1]))# 增加线性模型
model_output = tf.add(tf.matmul(x_data, W), b)# 声明损失函数 MSE+L2, 其为批量损失的平均值, 初始化变量, 声明优化器
L1_regularization_param = tf.reduce_mean(tf.abs(W))  # L1正则项
loss = tf.expand_dims(tf.add(tf.reduce_mean(tf.square(y_target - model_output)), L1_regularization_param), 0) # MSE+L1
# `tf.square` 表示向量的平方  `tf.reduce_mean` 表示计算张量在指定维度上的平均值, 如果没有指定就是普通的算平均值
init = tf.global_variables_initializer()  # 表示初始化操作
my_opt = tf.train.GradientDescentOptimizer(learning_rate)  # 表示选择梯度下降法作为优化器
train_step = my_opt.minimize(loss)  # 最小化Loss损失
sess.run(init)  # 运行初始化操作# 迭代遍历, 并在随机选择的数据上进行模型训练, 迭代100次 每25次迭代输出变量值和损失值, 将其用于之后的可视化
loss_vec = []  # 储存loss随迭代次数的变化, 等一下用于画图
for i in range(100):rand_index = np.random.choice(len(X), size=batch_size)  # 随机挑选X, 用于小批量随机梯度下降rand_x = X[rand_index]rand_y = np.transpose([Y[rand_index]])# 目标:最优化损失sess.run(train_step, feed_dict={x_data:rand_x,y_target:rand_y})# 更新loss值temp_loss = sess.run(loss, feed_dict={x_data:rand_x,y_target:rand_y})loss_vec.append(temp_loss)# 每25次打印if (i+1) % 25 == 0:print('Step:', i+1, 'w为:', sess.run(W), 'b为:', sess.run(b)[0][0])print('Loss为:', temp_loss)# 抽取系数, 创建最佳拟合直线
slope = sess.run(W)[0][0]
y_intercept = sess.run(b)[0][0]
best_fit = []
for i in X:best_fit.append(slope * i + y_intercept)
# 绘制两幅图 第一个是拟合直线(高维空间的画图就不画了) 另一个是迭代100次的L2正则损失
plt.figure(2)
plt.plot(loss_vec, 'k--')
plt.title('Lasso loss per Generation')
plt.xlabel('Generation')
plt.ylabel('loss')
plt.show()

结果

ElasticNet

还记得吗? ElasticNet是即用L1也用L2

  • 任务:

以iris数据集的除Sepal length的数据作为X, 以Sepal length作为Y, 用X去拟合Y;

代码

import matplotlib.pyplot as plt  # 画图库
import tensorflow as tf
import numpy as np  #矩阵库
from sklearn import datasets   #导入数据集
from tensorflow.python.framework import ops   #Loss函数优化器
ops.get_default_graph()
sess = tf.Session()iris = datasets.load_iris()
X = np.array([x[1:4] for x in iris.data])
Y = np.array([y[0] for y in iris.data])# 声明学习率, 批量大小, 占位符和模型变量
seed = 42
tf.set_random_seed(seed)
learning_rate = 0.01
batch_size = 25
x_data = tf.placeholder(shape=[None, 3], dtype=tf.float32)
y_target = tf.placeholder(shape=[None, 1], dtype=tf.float32)
W = tf.Variable(tf.random_normal(shape=[3, 1]))
b = tf.Variable(tf.random_normal(shape=[1, 1]))# 增加线性模型
model_output = tf.add(tf.matmul(x_data, W), b)# 声明损失函数 MSE+L2, 其为批量损失的平均值, 初始化变量, 声明优化器
L1_regularization_param = tf.reduce_mean(tf.abs(W))  # L1正则项
L2_regularization_param = tf.reduce_mean(tf.square(W))  # L2正则项
regularization_param = tf.add(L1_regularization_param, L2_regularization_param) # L1 + L2
loss = tf.expand_dims(tf.add(tf.reduce_mean(tf.square(y_target - model_output)), regularization_param), 0) # MSE+ L1 + L2
# `tf.square` 表示向量的平方  `tf.reduce_mean` 表示计算张量在指定维度上的平均值, 如果没有指定就是普通的算平均值
init = tf.global_variables_initializer()  # 表示初始化操作
my_opt = tf.train.GradientDescentOptimizer(learning_rate)  # 表示选择梯度下降法作为优化器
train_step = my_opt.minimize(loss)  # 最小化Loss损失
sess.run(init)  # 运行初始化操作# 迭代遍历, 并在随机选择的数据上进行模型训练, 迭代100次 每25次迭代输出变量值和损失值, 将其用于之后的可视化
loss_vec = []  # 储存loss随迭代次数的变化, 等一下用于画图
for i in range(100):rand_index = np.random.choice(len(X), size=batch_size)  # 随机挑选X, 用于小批量随机梯度下降rand_x = X[rand_index]rand_y = np.transpose([Y[rand_index]])# 目标:最优化损失sess.run(train_step, feed_dict={x_data:rand_x,y_target:rand_y})# 更新loss值temp_loss = sess.run(loss, feed_dict={x_data:rand_x,y_target:rand_y})loss_vec.append(temp_loss)# 每25次打印if (i+1) % 25 == 0:print('Step:', i+1, 'w为:', sess.run(W), 'b为:', sess.run(b)[0][0])print('Loss为:', temp_loss)# 抽取系数, 创建最佳拟合直线
slope = sess.run(W)[0][0]
y_intercept = sess.run(b)[0][0]
best_fit = []
for i in X:best_fit.append(slope * i + y_intercept)
# 绘制两幅图 第一个是拟合直线(高维空间的画图就不画了) 另一个是迭代100次的L2正则损失
plt.figure(2)
plt.plot(loss_vec, 'k--')
plt.title('ElasticNet loss per Generation')
plt.xlabel('Generation')
plt.ylabel('loss')
plt.show()

结果

Ridge和Lasso回归代码实现–Tensorflow部分就是这样了, 继续下一章吧!pd的Machine Learning

Ridge和Lasso回归代码实现--Tensorflow部分相关推荐

  1. 影像组学视频学习笔记(7)-特征筛选之LASSO回归(代码)、Li‘s have a solution and plan.

    本笔记来源于B站Up主: 有Li 的影像组学系列教学视频 本节(7)主要介绍: 特征筛选之LASSO回归分析(代码实现) import pandas as pd import numpy as np ...

  2. Ridge和Lasso回归

    上周看了看回归方面的知识,顺便复(xue)习一下Ridge(岭回归)和Lasso回归(套索回归).瞅到了一篇英文博客讲得不错,翻译一下 本文翻译自 Ridge and Lasso Regression ...

  3. 【读书笔记】数据出现多重共线性情况:岭回归,lasso回归,适应性lasso回归,偏最小二乘回归

    # 2.2.3 数据出现多重共线性情况:岭回归,lasso回归,适应性lasso回归,偏最小二乘回归 # 有一些关于多重共线性的度量,其中之一是容忍度(tolerance)或(等价的)方差膨胀因子(v ...

  4. 影像组学视频学习笔记(6)-特征筛选之LASSO回归(理论)、Li‘s have a solution and plan.

    本笔记来源于B站Up主: 有Li 的影像组学系列教学视频 本节(6)主要介绍: 特征筛选之LASSO回归分析(理论通俗讲解) LASSO (Least Absolute Shrinkage Selec ...

  5. [机器学习-实践篇]学习之线性回归、岭回归、Lasso回归,tensorflow实现的线性回归

    线性回归.岭回归.Lasso回归 前言 1.线性回归 2. 岭回归 3. Lasso回归 4. tensorflow利用梯度下降实现的线性回归 前言 本章主要介绍线性回归.岭回归.Lasso回归,te ...

  6. 手写算法-python代码实现Ridge(L2正则项)回归

    手写算法-python代码实现Ridge回归 Ridge简介 Ridge回归分析与python代码实现 方法一:梯度下降法求解Ridge回归参数 方法二:标准方程法实现Ridge回归 调用sklear ...

  7. r ridge回归_手把手带你画高大上的lasso回归模型图

    各位芝士好友,今天我们来聊一聊lasso回归算法.与预后有关的文章,传统的做法一般会选择多变量cox回归,高级做法自然就是我们今天的lasso分析. 首先我们先来几篇文献,看一下lasso最近发的两篇 ...

  8. 【机器学习】多项式回归案例五:正则惩罚解决过拟合(Ridge回归和Lasso回归)

    正则惩罚解决过拟合(Ridge回归和Lasso回归) 案例五: 正则惩罚解决过拟合(Ridge回归和Lasso回归) 3.2.1 模块加载与数据读入 3.2.2 特征工程 3.2.3 模型搭建与应用 ...

  9. 多元线性回归,岭回归,lasso回归(具体代码(包括调用库代码和手写代码实现)+一点点心得)

    最近数据挖掘导论老师布置了一项作业,主要就是线性回归的实现,笔者之前听过吴恩达的线性回归的网课,但一直没有进行代码的实现,这次正好相对系统的整理一下,方便各位同学的学习,也希望能够对其进行优化,优化的 ...

最新文章

  1. 日期Date和字符串之间转换
  2. Unity UI和引用的管理中心
  3. CSS+DIV固定底部的漂浮导航条(多浏览器兼容)
  4. mysql 对象_查看MySQL中的对象
  5. 【原创】SQlServer数据库生成简单的说明文档小工具(附源码)
  6. 基于TCP/IP的文件服务器编程一例
  7. VMWare学习总结(3)——Vmware Workstation 14虚拟机网卡桥接连不上网络解决方法
  8. 【Axure电商原型】电商app高保真原型、移动端通用版电商app模板、用户中心、会员体系、签到、高保真商城app、rp原型、直播、运营活动、订单管理、售后退款、电商系统、购物车、高保真移动端电商
  9. 取英文名字的几个规则
  10. opencv 的norm_OpenCV学习笔记(一)之图像金字塔-上采样与降采样与DOG
  11. 记录一下所了解的一些第三开源框架
  12. VPP电源控制(VPP Power)-- 由DC-DC变换集成电路MC34063组成
  13. 无法获得锁 /var/cache/apt/archives/lock - open (11: 资源暂时不可用)
  14. CentOS6.5 linux 逻辑卷管理 调整分区大小
  15. OCR-CTPN 文字检测
  16. 微商引流的六种有效方法
  17. 51nod1521 一维战舰
  18. 无法使用资源管理器打开FTP,别被百度的结果坑了
  19. 胡彦斌and音乐密码 MUSIC CODE
  20. 模拟电路设计(39)---一文搞懂直流电源EMI滤波器

热门文章

  1. maven surefire的executions配置
  2. Python中reversed()函数
  3. SiamFC:用于目标跟踪的全卷积孪生网络 fully-convolutional siamese networks for object tracking
  4. change在c语言中的用法,change的过去式和用法例句意思及阅读
  5. 哀悼日 网页置灰兼容ie 亲测有效!
  6. Linux at命令定时发送邮件具体用法
  7. 数据库关系代数思维导图
  8. dubbo源码分析总结
  9. 人工智能学习培训哪家好
  10. L1 正则化和L2正则化