# 只針對線性回歸中的使用
1)批量梯度下降法的特點
運算量大:批量梯度下降法中的每一項計算:
,要計算所有樣本(共 m 個);
批量梯度下降法的梯度是損失函式減小最快的方向,也就是說,對應相同的 theta 變化量,損失函式在梯度方向上的變化量最大;
1)基礎理解
2)優化方向的公式
每一次搜尋的方向,不能保證是損失函式減小的方向;
每一次搜尋的方向,不能保證是損失函式減小最快的方向;
其優化方向具有不可預知性;
實驗結論表明,即使隨機梯度下降法的優化方向具有不可預知性,通過此方法依然可以差不多來到損失函式最小值的附近,雖然不像批量梯度下降法那樣,一定可以來到損失函式最小值位置,但是,如果樣本數量很大時,有時可以用一定的模型精度,換取優化模型所用的時間;
原因:在隨機梯度下降法優化損失函式的過程中,如果 η 一直取固定值,可能會出現,已經優化到損失函式最小值位置了,但由於隨機的過程不夠好,η 又是各固定值,導致優化時慢慢的又跳出最小值位置;
方案:優化過程中讓 η 逐漸遞減(隨著梯度下降法迴圈次數的增加,η 值越來越小);
3)η 的確定過程
問題:隨著迴圈次數(i_iters)的增加,η 的變化率差別太大;
解決了 η 的變化率差異過大
分子改為 a ,增加 η 取值的靈活度;
a、b:為隨機梯度下降法的超引數;
本次學習不對 a、b 調參,選用經驗上比較適合的值:a = 5、b = 50;
# 學習率隨著迴圈次數的增加,逐漸遞減;
# 這種逐漸遞減的思想,是模擬在搜尋領域的重要思路:模擬退火思想;
#模擬退火思想:在退火過程中的冷卻函式,溫度與冷卻時間的關係;
將每個樣本都隨機抽取到;
將每個樣本至少抽取 n 次,也就是總的迴圈次數一般為:len(x_b) * n;
將變形後的資料集 x_b 的 index 做隨機亂序處理,得到新的資料集 x_b_new ;
根據亂序後的 index 逐個抽取 x_b_new 中的樣本,迴圈 n 遍;
# array . dot(m) == array . m
批量梯度下降法:1)達到設定的迴圈次數;2)找到損失函式的最小值
隨機梯度下降法:達到設定的迴圈次數
1)**實現隨機梯度下降法
2)封裝與呼叫自己的**
獲取原始資料
import資料分割numpy as np
import
matplotlib.pyplot as plt
from sklearn import
datasets
boston =datasets.load_boston()
x =boston.data
y =boston.target
x = x[y < 50.0]
y = y[y < 50.0]
from alg.data_split import資料歸一化train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, seed=666)
from sklearn.preprocessing import# 資料歸一化,主要是將訓練資料集(x_train)和測試資料集(x_test)歸一化;standardscaler
standardscaler =standardscaler()
standardscaler.fit(x_train)
x_train_standard =standardscaler.transform(x_train)
x_test_standard = standardscaler.transform(x_test)
使用線性回歸演算法:linearregression
from lr.linearregression import#問題:通過score()函式得到的 r^2 值,也就是準確度過小linearregression
lin_reg =linearregression()
%time lin_reg.fit_sgd(x_train_standard, y_train, n_iters=2)
lin_reg.score(x_test_standard, y_test)
#輸出:wall time: 10 ms
0.7865171620468298
#原因:對所有的 x_train_standard 迴圈優化的遍數太少:n_iters=2
迴圈遍數改為 50:n_iters=50
%time lin_reg.fit_sgd(x_train_standard, y_train, n_iters=50)迴圈遍數改為 100:n_iters = 100lin_reg.score(x_test_standard, y_test)
#輸出:wall time: 143 ms
0.8085728716573835
%time lin_reg.fit_sgd(x_train_standard, y_train, n_iters=100)總結:隨著迴圈遍數的增加,模型的準確度也隨著增加;3)呼叫 scikit-learn 中的演算法模型lin_reg.score(x_test_standard, y_test)
#輸出:wall time: 502 ms
0.8125954368325295
4)總結
通過計算時間就可以看出:n_iters=100時,自己的演算法需要 502ms,scikit-learn中的演算法需要 8ms;
自己所學的封裝好的演算法,只是為了幫助理解演算法的原來,而scikit-learn中使用了很多優化的方案
機器學習 批量梯度下降法(線性回歸中的使用)
1 基礎概念 2 梯度下降原理 此圖為有兩個引數的梯度下降法的視覺化 z x2 2y2 一圈圈的紅線為等高線,也就是每次引數x y的變化後目標函式 z 的取值 越外圈的 z 的取值越大,中心位置表示 z 的最小值 z 的取值可以延不同的方向逐層下降,箭頭表示梯度下降的方向,也是 z 的取值變化最快的...
機器學習之梯度下降法求解線性回歸
最小二乘法的優點 準確率比較高,缺點 當有兩個或者兩個以上的變數時,就會出現計算量大,過於複雜。這時我們將用梯度下降的方法來畫出擬合圖。梯度下降 import pandas as pd import numpy as np import matplotlib.pyplot as plt points...
線性回歸與梯度下降法
原文 最近在看斯坦福的 機器學習 的公開課,這個課程是2009年的,有點老了,不過講的還是很好的,廓清了一些我以前關於機器學習懵懂的地方。我的一位老師曾經說過 什麼叫理解?理解就是你能把同乙個事情用自己的語言表達出來,並且能讓別人聽得懂。本著這樣的原則,同時也為了證明自己是 理解 的,於是決定打算在...