tensorflow實現線形回歸

2022-09-12 00:03:28 字數 2523 閱讀 2962

回歸是基於已有的資料對新的資料進行**,除了標準的線形回歸,還會有戴明回歸、lasso回歸、嶺回歸、彈性網路回歸、邏輯回歸等,具體的定義和差別會在下文實現中體現。

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)

he**yside_step=tf.truediv(1,tf.add(1,tf.exp(tf.mul(-100,tf.sub(a,lasso_param)))))

regularization_param=tf.mul(he**yside_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=)

temp_loss=sess.run(loss,feed_dict=)

**參考書籍《tensorflow機器學習實戰指南》

Tensorflow 非線形回歸

import tensorflow as tf import numpy as np import matplotlib.pyplot as plt 使用numpy來生成兩百個隨機點,範圍在 0.5到0.5之間,均勻分布 np.newaxis 插入新的維度 x data np.linspace 0....

TensorFlow 實現Softmax 回歸模型

importtensorflowastf importnumpyasnp importtensorflow.examples.tutorials.mnist.input dataasinput data mnist input data.read data sets mnist data one h...

tensorflow實現softmax回歸函式

softmax函式可以把多個值歸一化到 0,1 區間中,以實現分類等問題 輸出 5 dtype float32,numpy array 0.1738882 0.7230672,0.8248408,0.8263163 1.5385914 1.3104331 0.91867334 1.5094105,0...