Linear Regression
1 符號定義
- input features: ,例如
- output variable or target variable
- training example: 一個輸入和輸出變數組成的pair ( )
- training set: 由多個training example構成的list ,其中 用來表示index
- space of input values:
- space of output values: (不是y,但是木有找到符號,知乎渣渣)
- hypothesis: 在監督學習問題中,我們的目標是給定一個訓練集,學習到一個函數 ,我們稱函數h為hypothesis
- regression problem:當我們試圖預測的目標變數是連續的,例如希望通過房子面積、位置等預測它的價格,這樣的問題稱為回歸問題
- classification problem:當y取值只能是有限若干個離散值,例如給定房子面積,希望預測房子是否有花園,這樣的問題稱為分類問題
2 線性回歸
在給定了訓練集合 的情況下,希望能夠根據新的輸入值x,來預測新的y. 假設 為大小為n的向量,則我們假設如下
為了能夠衡量假設h的性能,我們定義cost function為
3 LMS演算法(least mean squares)
採用梯度下降演算法來求取使得 ,即:
其中 稱為learning rate(學習率),表示沿著梯度下降方向每次下降多少的一個乘子
我們將上面定義的損失函數代入得:
對於單個的訓練樣本,更新規則如下:
而對於有多個樣本的情況,有兩種更新方法
3.1 batch gradient descent
batch gradient descent(批梯度下降),每次根據批量數據的梯度下降方向進行平均,然後決定下降方向
Repeat until convergence {
}
3.2 stochastic gradient descent
stochastic gradient desceent(隨即梯度下降),每次隨機選擇一個數據點,然後根據這個數據點計算出梯度下降方向,然後循環
Loop{
for i=1 to m, {
}
}
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 |