Linear Regression

1 符號定義

  • input features: x^{(i)} ,例如 x^{(2)}=(0.1,0.4,1.2)
  • output variable or target variable y^{(i)}
  • training example: 一個輸入和輸出變數組成的pair ( x^{(i)}, y^{(i)} )
  • training set: 由多個training example構成的list left{ (x^{(i)},y^{(i)});i=1,...,m 
ight} ,其中 (i) 用來表示index
  • space of input values: chi
  • space of output values: y (不是y,但是木有找到符號,知乎渣渣)
  • hypothesis: 在監督學習問題中,我們的目標是給定一個訓練集,學習到一個函數 h:chi
ightarrow y ,我們稱函數h為hypothesis
  • regression problem:當我們試圖預測的目標變數是連續的,例如希望通過房子面積、位置等預測它的價格,這樣的問題稱為回歸問題
  • classification problem:當y取值只能是有限若干個離散值,例如給定房子面積,希望預測房子是否有花園,這樣的問題稱為分類問題

2 線性回歸

在給定了訓練集合 left{ (x^{(i)},y^{(i)});i=1,...,m 
ight} 的情況下,希望能夠根據新的輸入值x,來預測新的y. 假設 x^{(i)}=(x_{1}^{(i)},x_{2}^{(i)},x_{3}^{(i)}...,x_{n}^{(i)}) 為大小為n的向量,則我們假設如下

y=h(x)=sum_{i=0}^{n}{	heta_{i}x_{i}}

為了能夠衡量假設h的性能,我們定義cost function為

J(	heta)=frac{1}{2}sum_{i=1}^{m}{h_{	heta}(x^{(i)}-y^{(i)})}^{2}

3 LMS演算法(least mean squares)

採用梯度下降演算法來求取使得 J(	heta)最小的	heta ,即:

	heta_{j}:=	heta_{j}-alphafrac{partial}{partial	heta_{j}}J(	heta)

其中 alpha 稱為learning rate(學習率),表示沿著梯度下降方向每次下降多少的一個乘子

梯度下降演算法示例

我們將上面定義的損失函數代入得:

frac{partial}{partial	heta_{j}}J(	heta)=frac{partial}{partial 	heta_{j}}frac{1}{2}(h_{	heta}(x)-y)^{2}

=2cdotfrac{1}{2}(h_{	heta}(x)-y)cdotfrac{partial}{partial 	heta_{j}}(h_{	heta}(x)-y)

=(h_{	heta}(x)-y)cdotfrac{partial}{partial	heta_{j}}(sum_{i=0}^{n}{	heta_{i}x_{i}}-y)

=(h_{	heta}(x)-y)x_{j}

對於單個的訓練樣本,更新規則如下:

	heta_{j}:=	heta_{j}+alpha(y^{(i)}-h_{	heta}(x^{(i)}))x_{j}^{(i)}

而對於有多個樣本的情況,有兩種更新方法

3.1 batch gradient descent

batch gradient descent(批梯度下降),每次根據批量數據的梯度下降方向進行平均,然後決定下降方向

Repeat until convergence {

	heta_{j}:=	heta_{j}+alphasum_{i=1}^{m}{x}(y^{(i)}-h_{	heta}(x^{(i)}))x_{j}^{(i)}

}

3.2 stochastic gradient descent

stochastic gradient desceent(隨即梯度下降),每次隨機選擇一個數據點,然後根據這個數據點計算出梯度下降方向,然後循環

Loop{

for i=1 to m, {

	heta_{j}:=	heta_{j}+alpha(y^{(i)}-h_{	heta}(x^{(i)}))x_{j}^{(i)}

}

}

4 Tensorflow實現

import tensorflow as tf# Model parametersW = tf.Variable([.3], dtype=tf.float32)b = tf.Variable([-.3], dtype=tf.float32)# Model input and outputx = tf.placeholder(tf.float32)linear_model = W * x + by = tf.placeholder(tf.float32)# lossloss = tf.reduce_sum(tf.square(linear_model - y)) # sum of the squares# optimizeroptimizer = tf.train.GradientDescentOptimizer(0.01)train = optimizer.minimize(loss)# training datax_train = [1, 2, 3, 4]y_train = [0, -1, -2, -3]# training loopinit = tf.global_variables_initializer()sess = tf.Session()sess.run(init) # reset values to wrongfor i in range(1000): if 00 in str(i): print(sess.run([loss],{x: x_train, y: y_train})) sess.run(train, {x: x_train, y: y_train})# evaluate training accuracycurr_W, curr_b, curr_loss = sess.run([W, b, loss], {x: x_train, y: y_train})print("W: %s b: %s loss: %s"%(curr_W, curr_b, curr_loss))

推薦閱讀:

機器學習-各種 Learning 概念簡明介紹
機器學習項目流程清單
機器學習課程筆記---(1)單變數線性回歸
3 支持向量機-線性可分(優化函數的求解)
用Python實現線性回歸,8種方法哪個最高效?

TAG:機器學習 | TensorFlow |