今天主要是想和大家分享一下使用梯度下降解決線性回歸問題,使用的框架是tensorflow,開發環境在linux ubuntu
首先我們使用numpy的正態分佈函式隨機生成100個點,這些(x,y)對應的線性方程為y=0.1*x+0.2,weigth=0.1,bias=0.2;然後我們使用py去生成100個真實data
生成了100個隨機點之後,我們就需要利用matplotlib庫來繪製圖示,進行資料展示# 構建資料
points_num = 100
vectors =
# 用 numpy 的正態隨機分布函式生成 100 個點
# 這些點的(x, y)座標值對應線性方程 y = 0.1 * x + 0.2
# 權重(weight)為 0.1,偏差(bias)為 0.2
for i in xrange(points_num):
x1 = np.random.normal(0.0, 0.66)
y1 = 0.1 * x1 + 0.2 + np.random.normal(0.0, 0.04)
x_data = [v[0] for v in vectors] # 真實的點的 x 座標
y_data = [v[1] for v in vectors] # 真實的點的 y 座標
接著,我們需要利用tensorflow框架來構建我們的線性回歸模型# 影象 1 :展示 100 個隨機數據點
plt.plot(x_data, y_data, 'r*', label="original data") # 紅色星形的點
plt.title("linear regression using gradient descent")
plt.legend()#將oraginal data 標籤展示
plt.show()
# 構建線性回歸模型
w = tf.variable(tf.random_uniform([1], -1.0, 1.0)) # 初始化 weight
b = tf.variable(tf.zeros([1])) # 初始化 bias
y = w * x_data + b # 模型計算出來的 y
了解過一點深度學習的人都知道,有乙個概念非常重要,loss function。基本上所有模型的訓練都是求這個loss最小,所以接下來我們需要求loss function,然後再去優化我們的loss function來擬合出最優的直線
深度學習模型需要不斷去使用資料訓練才可以得到比較優的model,然後因為這個model比較簡單,所以訓練20次就差不多了。# 定義 loss function(損失函式)或 cost function(代價函式)
# 對 tensor 的所有維度計算 ((y - y_data) ^ 2) 之和 / n
loss = tf.reduce_mean(tf.square(y - y_data))
# 用梯度下降的優化器來優化我們的 loss functioin
optimizer = tf.train.gradientdescentoptimizer(0.5) # 設定學習率為 0.5
train = optimizer.minimize(loss)
model訓練完成後,我們可以使用matplotlib來將訓練的model進行展示出來,看看我們訓練的效果,**如下:# 建立會話
sess = tf.session()
# 初始化資料流圖中的所有變數
init = tf.global_variables_initializer()
sess.run(init)
# 訓練 20 步
for step in xrange(20):
# 優化每一步
sess.run(train)
# 列印出每一步的損失,權重和偏差
print("step=%d, loss=%f, [weight=%f bias=%f]") \
% (step, sess.run(loss), sess.run(w), sess.run(b))
# 建立會話
sess = tf.session()
# 初始化資料流圖中的所有變數
init = tf.global_variables_initializer()
sess.run(init)
# 訓練 20 步
for step in xrange(20):
# 優化每一步
sess.run(train)
# 列印出每一步的損失,權重和偏差
print("step=%d, loss=%f, [weight=%f bias=%f]") \
% (step, sess.run(loss), sess.run(w), sess.run(b))
備註:下面為所有的**,總的來說,這個demo還是比較簡單的,感興趣的小夥伴們可以自己去跑一下我這個demo哦
-*- coding: utf-8 -*-
'''用梯度下降的優化方法來快速解決線性回歸問題
'''import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
# 構建資料
points_num = 100
vectors =
# 用 numpy 的正態隨機分布函式生成 100 個點
# 這些點的(x, y)座標值對應線性方程 y = 0.1 * x + 0.2
# 權重(weight)為 0.1,偏差(bias)為 0.2
for i in xrange(points_num):
x1 = np.random.normal(0.0, 0.66)
y1 = 0.1 * x1 + 0.2 + np.random.normal(0.0, 0.04)
x_data = [v[0] for v in vectors] # 真實的點的 x 座標
y_data = [v[1] for v in vectors] # 真實的點的 y 座標
# 影象 1 :展示 100 個隨機數據點
plt.plot(x_data, y_data, 'r*', label="original data") # 紅色星形的點
plt.title("linear regression using gradient descent")
plt.legend()
plt.show()
# 構建線性回歸模型
w = tf.variable(tf.random_uniform([1], -1.0, 1.0)) # 初始化 weight
b = tf.variable(tf.zeros([1])) # 初始化 bias
y = w * x_data + b # 模型計算出來的 y
# 定義 loss function(損失函式)或 cost function(代價函式)
# 對 tensor 的所有維度計算 ((y - y_data) ^ 2) 之和 / n
loss = tf.reduce_mean(tf.square(y - y_data)
# 用梯度下降的優化器來優化我們的 loss functioin
optimizer = tf.train.gradientdescentoptimizer(0.5) # 設定學習率為 0.5
train = optimizer.minimize(loss)
# 建立會話
sess = tf.session()
# 初始化資料流圖中的所有變數
init = tf.global_variables_initializer()
sess.run(init)
# 訓練 20 步
for step in xrange(20):
# 優化每一步
sess.run(train)
# 列印出每一步的損失,權重和偏差
print("step=%d, loss=%f, [weight=%f bias=%f]") \
% (step, sess.run(loss), sess.run(w), sess.run(b))
# 影象 2 :繪製所有的點並且繪製出最佳擬合的直線
plt.plot(x_data, y_data, 'r*', label="original data") # 紅色星形的點
plt.title("linear regression using gradient descent")
plt.plot(x_data, sess.run(w) * x_data + sess.run(b), label="fitted line") # 擬合的線
plt.legend()
plt.xlabel('x')
plt.ylabel('y')
plt.show()
# 關閉會話
sess.close()
線性回歸 梯度下降
線性回歸演算法屬於監督學習的一種,主要用於模型為連續函式的數值 過程總得來說就是初步建模後,通過訓練集合確定模型引數,得到最終 函式,此時輸入自變數即可得到 值。1 初步建模。確定假設函式 h x 最終 用 2 建立價值函式 j 也叫目標函式 損失函式等,求引數 用 3 求引數 對價值函式求偏導 即...
線性回歸梯度下降
梯度下降 一種最優化演算法,就是沿著函式的梯度方向尋找函式的最小值 線性回歸模型 最終的目標就是利用 梯度下降法 求出使 誤差函式 最小的線性函式的系數值 梯度下降演算法有兩種 1.批量梯度下降 batch gradient descent 2.隨機梯度下降 stochastic gradient ...
線性回歸 梯度下降
利用回歸方程對乙個或多個自變數和因變數之間進行建模的分析方式損失 計算損失用最小二乘法。優化。優化有兩種方式。一種是正規方程解法通常只適用於極少量資料,一般不會用 二是梯度下降的方式通常使用梯度下降 梯度下降的簡介。梯度就是倒導數 切線。沿著切線的方向下降的最快。梯度下降有兩個引數,起始點和學習率 ...