博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tensorflow实现线形回归
阅读量:5219 次
发布时间:2019-06-14

本文共 2449 字,大约阅读时间需要 8 分钟。

  回归是基于已有的数据对新的数据进行预测,除了标准的线形回归,还会有戴明回归、lasso回归、岭回归、弹性网络回归、逻辑回归等,具体的定义和差别会在下文实现中体现。

  tensorflow作为流行的机器学习框架,有诸多现成的API可以调用,在线形回归的实现中,使用这些API可以非常便捷的实现。

  

  1、首先准备数据 ,这里采用sklearn的数据iris数据集

  from sklearn import datasets

  import numpy as np

  import tensorflow as tf

  x_vals=np.array([x[3] for x in iris.data])

  y_vals=np.array([y[0] for y in iris.data])

  

  2、声明训练参数

  learning_rate=0.05

  batch_size=25

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

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

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

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

  

  3、配置模型

  model_output=tf.add(tf.matmul(x_data,A),b)

  

  4、声明损失函数

  #这里使用L2正则损失函数

  loss=tf.reduce_mean(tf.square(y_target-model_output))

  #这里使用L1正则损失函数

  loss=tf.reduce_mean(tf.abs(y_target-model_output))

  #这里是戴明回归的损失函数

  demming_numerator=tf.abs(tf.sub(y_target,tf.add(tf.matmul(x_data,A),b)))

  demming_denominator=tf.sqrt(tf.add(tf.square(A),1))

  loss=tf.reduce_mean(tf.truediv(demming_numerator,demming_denominator))

  #lasso回归,增加损失函数

  lasso_param=tf.constant(0.9)

  heavyside_step=tf.truediv(1,tf.add(1,tf.exp(tf.mul(-100,tf.sub(A,lasso_param)))))

  regularization_param=tf.mul(heavyside_step,0.9)

  loss=tf.add(tf.reduce_mean(tf.square(y_target-model_output)),regularization_param)

  #岭回归算法,增加了L2正则项

  ridge_param=tf.constant(1)

  ridge_loss=tf.reduce_mean(tf.square(A))

  loss=tf.expand_dims(tf.add(tf.reduce_mean(tf.square(y_target-model_output)),tf.mul(ridge_param,ridge_loss)),0) 

  弹性网络回归,增加了L1和L2正则项

  elastic_param1=tf.constant(1)

  elastic_param2=tf.constant(1)

  l1_a_loss=tf.reduce_mean(tf.abs(A))

  l2_a_loss=tf.reduce_mean(tf.square(A))

  e1_term=tf.mul(elastic_param1,l1_a_loss)

  e2_term=tf.mul(elastic_param2,l2_a_loss)

  loss=tf.expand_dims(tf.add(tf.add(tf.reduce_mean(tf.square(y_target-model_output)),e1_term),e2_term),0)

    

  5、运行图

  init=tf.global_variables_initializer()

  sess.run(init)

 

  6、训练图

  设置优化因子

  my_opt=tf.train.GradientDescentOptimizer(learning_rate)

  train_step=my_opt.minimize(loss)

  for i in range(steps):

    rand_index=np.random.choice(len(x_vals),size=batch_size)

    rand_x=np.transpose([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})

代码参考书籍《tensorflow机器学习实战指南》

转载于:https://www.cnblogs.com/bladeyul/p/10463433.html

你可能感兴趣的文章
log4j.properties的作用
查看>>
游戏偶感
查看>>
Leetcode: Unique Binary Search Trees II
查看>>
C++ FFLIB 之FFDB: 使用 Mysql&Sqlite 实现CRUD
查看>>
Spring-hibernate整合
查看>>
c++ map
查看>>
exit和return的区别
查看>>
ThinkPHP5.1安装
查看>>
js += 含义(小知识)
查看>>
B2321 [BeiJing2011集训]星器 数学&&物理
查看>>
201571030319 四则运算
查看>>
RestTemplate 调用本地服务 connection refused
查看>>
.NET方向高级开发人员面试时应该事先考虑的问题
查看>>
台达PLC modbus 不支持04功能码
查看>>
python学习笔记--装饰器
查看>>
发布一个JavaScript工具类库jutil,欢迎使用,欢迎补充,欢迎挑错!
查看>>
discuz 常用脚本格式化数据
查看>>
MS CRM 2011 创建基于Fetch的报表 -- 进阶版
查看>>
zabbix 监控zookeeper
查看>>
trace与代码跟踪服务
查看>>