TensorFlow(四) 用TensorFlow实现弹性网络回归算法(多线性回归)

弹性网络回归算法是综合lasso回归和岭回归的一种回归算法,通过在损失函数中增加L1正则和L2正则项,进而控制单个系数对结果的影响

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from sklearn import  datasets
sess=tf.Session()
#加载鸢尾花集
iris=datasets.load_iris()
#花瓣长度,花瓣宽度,花萼宽度 预测 花萼长度
x_vals=np.array([ [x[1],x[2],x[3]] for x in iris.data])
y_vals=np.array([y[0] for y in iris.data])

learning_rate=0.001
batch_size=50

x_data=tf.placeholder(shape=[None,3],dtype=tf.float32)
y_target=tf.placeholder(shape=[None,1],dtype=tf.float32)

A=tf.Variable(tf.random_normal(shape=[3,1]))
b=tf.Variable(tf.random_normal(shape=[1,1]))

#增加线性模型y=Ax+b  x*a==>shape(None,1)+b==>shape(NOne,1)
model_out=tf.add(tf.matmul(x_data,A),b)
#参数1,2
elastic_p1=tf.constant(1.)
elastic_p2=tf.constant(1.)

#声明损失函数 包含斜率的L1正则和L2正则。
#创建正则项
l1_a_loss=tf.reduce_mean(tf.abs(A))
l2_a_loss=tf.reduce_mean(tf.square(A))
e1_term=tf.multiply(elastic_p1,l1_a_loss)
e2_term=tf.multiply(elastic_p2,l2_a_loss)
#这里A是不规则的shape即3,1的数组形式  对应的loss也扩展成数组形式
loss=tf.expand_dims(tf.add(tf.add(tf.reduce_mean(tf.square(y_target-model_out)),e1_term),e2_term),0)

#初始化变量
init=tf.global_variables_initializer()
sess.run(init)

#梯度下降
my_opt=tf.train.GradientDescentOptimizer(learning_rate)
train_step=my_opt.minimize(loss)

#循环迭代
loss_rec=[]
for i in range(1000):
    rand_index=np.random.choice(len(x_vals),size=batch_size)
    #shape(None,3)
    rand_x= x_vals[rand_index]
    rand_y= np.transpose([y_vals[rand_index]])
    #运行
    sess.run(train_step,feed_dict={x_data:rand_x,y_target:rand_y})
    temp_loss =sess.run(loss,feed_dict={x_data:rand_x,y_target:rand_y})

    #添加记录
    loss_rec.append(temp_loss)
    #打印
    if (i+1)%250==0:
        print(‘Step: %d A=%s b=%s‘%(i,str(sess.run(A)),str(sess.run(b))))
        print(‘Loss:%s‘% str(temp_loss[0]))

#弹性网络回归迭代图形
plt.plot(loss_rec,‘k-‘,label=‘Loss‘)
plt.title(‘Loss per Generation‘)
plt.xlabel(‘Generation‘)
plt.ylabel(‘ loss ‘)
plt.show()

原文地址:https://www.cnblogs.com/x0216u/p/9173106.html

时间: 2024-07-30 14:16:20

TensorFlow(四) 用TensorFlow实现弹性网络回归算法(多线性回归)的相关文章

【转】机器学习教程 十四-利用tensorflow做手写数字识别

模式识别领域应用机器学习的场景非常多,手写识别就是其中一种,最简单的数字识别是一个多类分类问题,我们借这个多类分类问题来介绍一下google最新开源的tensorflow框架,后面深度学习的内容都会基于tensorflow来介绍和演示 请尊重原创,转载请注明来源网站www.shareditor.com以及原始链接地址 什么是tensorflow tensor意思是张量,flow是流. 张量原本是力学里的术语,表示弹性介质中各点应力状态.在数学中,张量表示的是一种广义的"数量",0阶张量

最小二乘回归,岭回归,Lasso回归,弹性网络

普通最小二乘法 理论: 损失函数: 权重计算: 1.对于普通最小二乘的系数估计问题,其依赖于模型各项的相互独立性. 2.当各项是相关的,且设计矩阵 X的各列近似线性相关,那么,设计矩阵会趋向于奇异矩阵,这会导致最小二乘估计对于随机误差非常敏感,产生很大的方差. 例如,在没有实验设计的情况下收集到的数据,这种多重共线性(multicollinearity)的情况可能真的会出现. 使用: from sklearn import datasets, linear_model regr = linear

TensorFlow 入门之手写识别(MNIST) softmax算法

TensorFlow 入门之手写识别(MNIST) softmax算法 MNIST 卢富毓 softmax回归 softmax回归算法 TensorFlow实现softmax softmax回归算法 我们知道MNIST的每一张图片都表示一个数字,从0到9.我们希望得到给定图片代表每个数字的概率.比如说,我们的模型可能推测一张包含9的图片代表数字9的概率是80%但是判断它是8的概率是5%(因为8和9都有上半部分的小圆),然后给予它代表其他数字的概率更小的值. 这是一个使用softmax回归(sof

移动端目标识别(3)——使用TensorFlow Lite将tensorflow模型部署到移动端(ssd)之Running on mobile with TensorFlow Lite (写的很乱,回头更新一个简洁的版本)

承接移动端目标识别(2) 使用TensorFlow Lite在移动设备上运行         在本节中,我们将向您展示如何使用TensorFlow Lite获得更小的模型,并允许您利用针对移动设备优化的操作. TensorFlow Lite是TensorFlow针对移动和嵌入式设备的轻量级解决方案.它支持端上的机器学习推理,具有低延迟和小二进制模型大小. TensorFlow Lite使用了许多技术,例如允许更小和更快(定点数学)模型的量化内核. 对于本节,您需要从源代码构建TensorFlow

android内部培训视频_第四节(1)_异步网络操作

第四节(1):异步网络操作  一.结合asyncTask下载网络图片 1.定义下载类,继承自asyncTask,参数分别为:String(url地址),Integer(刻度,本例没有用到),BitMap(下载成功后的图片) public class downloadImageTask extends AsyncTask<String, Integer, Bitmap> { /** * 在线程开始之前执行 */ @Override protected void onPreExecute() {

SCVMM 2012 R2运维管理十四之:VMM中网络概述

SCVMM 2012 R2运维管理十四之:VMM中网络概述 借助System Center 2012 R2 中的 Virtual Machine Manager (VMM),可以轻松地将虚拟机连接到在环境中提供特定功能的网络,例如,"后端"."前端"或"备份"网络. 为此,需要将 IP 子网和虚拟局域网 (VLAN) 一起关联到名为逻辑网络的命名单元中.可以设计自己的逻辑网络以适合环境.逻辑网络是 System Center 2012 中的增强功

基于Python的函数回归算法验证

看机器学习看到了回归函数,看了一半看不下去了,看到能用方差进行函数回归,又手痒痒了,自己推公式写代码验证: 常见的最小二乘法是一阶函数回归回归方法就是寻找方差的最小值y = kx + bxi, yiy-yi = kxi+b-yi方差为∑(kxi + b - yi )^2f = k^2∑xi^2 + b^2 + ∑yi^2 +2kb∑xi - 2k∑xi*yi - 2yib求极值需要对其求微分,因为是二元函数,因此使用全微分公式,其极值点应该在两个元的偏微分都为0处δf/δk = 2k∑(xi^2

Bayesian 网络分类算法

1:贝叶斯网络的定义和性质 一个贝叶斯网络定义包括一个有向无环图(DAG)和一个条件概率表集合.DAG中每一个节点表示一个随机变量,可以是可直接观测变量或隐藏变量,而有向边表示随机变量间的条件依赖:条件概率表中的每一个元素对应DAG中唯一的节点,存储此节点对于其所有直接前驱节点的联合条件概率. 贝叶斯网络有一条极为重要的性质,就是我们断言每一个节点在其直接前驱节点的值制定后,这个节点条件独立于其所有非直接前驱前辈节点. 这个性质很类似Markov过程.其实,贝叶斯网络可以看做是Markov链的非

Lasso回归算法: 坐标轴下降法与最小角回归法小结

前面的文章对线性回归做了一个小结,文章在这: 线性回归原理小结.里面对线程回归的正则化也做了一个初步的介绍.提到了线程回归的L2正则化-Ridge回归,以及线程回归的L1正则化-Lasso回归.但是对于Lasso回归的解法没有提及,本文是对该文的补充和扩展.以下都用矩阵法表示,如果对于矩阵分析不熟悉,推荐学习张贤达的<矩阵分析与应用>. 1. 回顾线性回归 首先我们简要回归下线性回归的一般形式: hθ(X)=Xθhθ(X)=Xθ 需要极小化的损失函数是: J(θ)=12(Xθ?Y)T(Xθ?Y