基於tensorflow實現線性回歸

2021-10-03 12:20:47 字數 3131 閱讀 6954

1.1 回歸分析

回歸分析是一種**性的建模技術,它研究的是因變數(目標)和自變數(**器)之間的關係。這種技術通常用於**分析,時間序列模型以及發現變數之間的因果關係。通常使用曲線/線來擬合資料點,目標是使曲線到資料點的距離差異最小

1.2 線性回歸

在統計學中,線性回歸(linear regression)是利用稱為線性回歸方程的最小平方函式對乙個或多個自變數和因變數之間關係進行建模的一種回歸分析。這種函式是乙個或多個稱為回歸係數的模型引數的線性組合。只有乙個自變數的情況稱為簡單回歸,大於乙個自變數情況的叫做多元回歸。(這反過來又應當由多個相關的因變數**的多元線性回歸區別,而不是乙個單一的標量變數。)

線性回歸是回歸問題中的一種,線性回歸假設目標值與特徵之間線性相關,即滿足乙個多元一次方程。通過構建損失函式,來求解損失函式最小時的引數w和b。通長我們可以表達成如下公式:

1.3 目標/損失函式

求解最佳引數,需要乙個標準來對結果進行衡量,為此我們需要定量化乙個目標函式式,使得計算機可以在求解過程中不斷地優化。

針對任何模型求解問題,都是最終都是可以得到一組**值y^ ,對比已有的真實值 y ,資料行數為 n ,可以將損失函式定義如下:

即核心目標優化式為

求解方式有兩種

1)最小二乘法(least square method)

求解 w 和 b 是使損失函式最小化的過程,在統計中,稱為線性回歸模型的最小二乘「引數估計」(parameter estimation)。我們可以將 l(w,b) 分別對 w 和 b 求導,得到:

令上述兩式為0,可得到 w 和 b 最優解的閉式(closed-form)解:

2)梯度下降(gradient descent)

梯度下降核心內容是對自變數進行不斷的更新(針對w和b求偏導),使得目標函式不斷逼近最小值的過程

這裡不使用封裝好的api,自實現乙個簡單的線性回歸**。

給定隨機的x值設定其均值和方差,以及y的真實值。

設定迭代次數為100次,執行對比結果。

import tensorflow as tf

defmyregression()

:"""

自實現乙個線性回歸**

:return: none

"""# 1.準備資料,x 特徵值[100, 10], y 目標值[100]

x = tf.random_normal(

[100,1

], mean=

1.75

, stddev=

0.5, name=

"x_data"

)# 矩陣相乘必須是二維的

y_true = tf.matmul(x,[[

0.7]])

+0.8

# 2. 建立線性回歸模型,乙個特徵,乙個權重,乙個偏置 y =wx+b

# 隨機給乙個權重和偏置的值,讓其去計算損失,然後再當前狀態下優化

# 用變數定義才能優化

weight = tf.variable(tf.random_normal([1

,1], mean=

0.0, stddev=

1.0)

, name=

"w")

bias = tf.variable(

0.0, name=

"b")

y_predict = tf.matmul(x, weight)

+ bias

# 3.建立損失函式,均方誤差

loss = tf.reduce_mean(tf.square(y_true - y_predict)

)# 4.梯度下降優化損失 learning_rate: 0~1,2,3,5,7,10

train_op = tf.train.gradientdescentoptimizer(

0.1)

.minimize(loss)

# 定義乙個初始化變數的op

init_op = tf.global_variables_initializer(

)# 通過會話執行程式

with tf.session(

)as sess:

# 初始化變數

sess.run(init_op)

# 列印隨機最先初始化的權重和偏置

print

("隨機初始化的引數權重為: %f,偏置為: %f"

%(weight.

eval()

, bias.

eval()

))# 迴圈訓練 執行優化

for i in

range

(100):

sess.run(train_op)

print

("第%d次引數權重為: %f,偏置為: %f"

%(i, weight.

eval()

, bias.

eval()

))return

none

if __name__ ==

"__main__"

: myregression(

)

程式執行結果

tensorflow實現基於LSTM的文字分類方法

學習一段時間的tensor flow之後,想找個專案試試手,然後想起了之前在看theano教程中的乙個文字分類的例項,這個星期就用tensorflow實現了一下,感覺和之前使用的theano還是有很大的區別,有必要總結mark一下 這個分類的模型其實也是很簡單,主要就是乙個單層的lstm模型,當然也...

基於tensorflow實現的線性回歸模型

遇到的問題以及解決方案 question1 對於隨機生成的x,y訓練出來的擬合直線效果不理想。解決方案 將權重的標準差調整為0後效果仍然不理想,然後根據線性回歸的流程,對所有引數設定的一一進行排查,最後將錯誤定位到梯度下降法的步長,起初設定為0.0001,導致步長太小,使得直線擬合速度太慢,迭代50...

基於tensorflow2實現卷積神經網路

利用tensorflow2中的api實現乙個簡單的卷積神經網路,完成梯度下降的操作並繪製訓練集和測試集準確率曲線。資料集在這裡 資料分布 訓練集數量為209,測試集數量為50 import numpy as np import matplotlib.pyplot as plt import tens...