天天看點

TensorFlow.NET機器學習入門【2】線性回歸

回歸分析用于分析輸入變量和輸出變量之間的一種關系,其中線性回歸是最簡單的一種。

設: Y=wX+b,現已知一組X(輸入)和Y(輸出)的值,要求出w和b的值。

舉個例子:快年底了,銷售部門要發年終獎了,銷售員小王想知道今年能拿多少年終獎,目前他大抵知道年終獎是和銷售額(特征量)挂鈎的,具體什麼規則不清楚,那麼他大概有兩個方法解決這個問題:

1、去問老闆,今年的配置設定規則是什麼。【通過算法解決問題】

2、去向同僚打聽他們的銷售額和獎金情況,然後推算自己能拿多少。【通過資料解決問題】

 我們當然選擇第二種方法了。通過收集資料,我們得到下面這個表格: 

TensorFlow.NET機器學習入門【2】線性回歸

拿到這個資料,我們基本上很快就能推算出兩者的對應關系,如果推算不出來,我們也可以繪制下面這張圖表: 

TensorFlow.NET機器學習入門【2】線性回歸

 通過圖表,我們可以立即看出兩者的對應關系了。

 以上就是一個典型的線性回歸求解的問題,下面我們要用TensorFlow架構解決這個問題。

具體解決思路如下:

1、先設w=1,b=0

2、取得一批訓練資料,将X代入函數f(x)=wx+b,計算取得在目前條件下的預測值Y‘

3、計算預測值Y‘和實際值Y的誤差

4、根據梯度對w、b進行微調

5、重複上述步驟,直到誤內插補點足夠小。

先貼出全部代碼,然後再逐一解釋。

下面對代碼進行簡單的解釋:

首先,我們要讀取一批(比如10組 )訓練資料,标記為:train_X和train_Y,然後通過現有的w和b值計算預測值:pred_Y=w*train_X+b,此時train_X、train_Y、pred_Y都是10個資料長度的數組。

然後計算預測資料和時間資料之間的誤差,我們采用均方誤差公式來計算:

TensorFlow.NET機器學習入門【2】線性回歸

 然後開始計算W、b對于loss函數的梯度,梯度表達的就是W、b的變化對計算結果的影響,比如将W增大一點,loss的計算結果是變大還是變小,我們的目标是希望loss的值最小,如果w變大時loss變大(梯度為正數),那麼我們下一次就将w變小一點,反之同理。

TensorFlow.NET機器學習入門【2】線性回歸

這裡的learning_rate表示學習率,表示每次參數進行調整的步進值,就是每次調整一大步,還是一小步。通過多次的循環調整,w和b的值将調整為一個合适的數字,此時loss的值将會很小,線性回歸就完成了。以下是運算結果:

TensorFlow.NET機器學習入門【2】線性回歸

  在上述過程中,最難了解的就是梯度,以及如何計算梯度的問題,想要進一步了解的話可以參閱相關參考資料。

【相關資源】

 源碼:Git: https://gitee.com/seabluescn/tf_not.git

項目名稱:LinearRegression

目錄:檢視TensorFlow.NET機器學習入門系列目錄

【參考資料】

《深度學習入門:基于Python的理論與實踐(齋藤康毅)》,網上可以找到電子版

簽名區:

如果您覺得這篇部落格對您有幫助或啟發,請點選右側【推薦】支援,謝謝!

繼續閱讀