回歸是基於已有的資料對新的資料進行**,除了標準的線形回歸,還會有戴明回歸、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...