1. 程式人生 > >梯度下降原理及線性迴歸程式碼實現(python/java/c++)

梯度下降原理及線性迴歸程式碼實現(python/java/c++)

“梯度下降”顧名思義通過一步一步迭代逼近理想結果,當達到一定的精度或者超過迭代次數才退出,所以所獲得的結果是一個近似值。在其他部落格上面基本都有一個通俗的比喻:從山頂一步步下山。下面將用到幾個概念:
- 步長:移動一步的長度。
- 維度:一個空間的表示方式,通常一個模型引數表示一個維度。比如(x,y)表示的是2維空間。
- 梯度:最陡的那個方向。通過求導獲得。如果是某一維度的梯度,表示在該維度上變化最快的方向,可以通過求該維度(引數)的偏導數獲得。所有引數構成的梯度向量表示空間內該點最陡的方向。關於最陡問題[可以參考]
這裡寫圖片描述

通常使用梯度下降來解決線性擬合的問題。

一個線性方程可以表示為:

f(θ0,θ1,θ2...θn)=hθ+Jθ
其中假設函式:
hθ=hθ(x1,x2...xn)=θ0+θ1x1+θ1x2+...θnxn
其中θi(i=0,1,2...n) 為模型引數,x1,x2...xn 和y為樣本資料。

錯誤函式:

Jθ=Jθ(x1,x2...xn)=i=0m(hθ(xi)yi)2
通過上式知,錯誤函式越小,f(θ0,θ1,θ2...θn) 就越準確,所以,在進行線性擬合的時候,需要讓錯誤函式最小,而我們的目的是求解模型引數θi(i=0,1,2...n)

總體思路是:先隨機設定模型引數的初始值(相當於把一個人放到山的某一地方),通過求偏導得到梯度向量(即移動的方向或者斜率),梯度向量乘以步長就是一步的量。把引數減去步長,得到新的模型引數。不斷更新引數,直到滿足一定條件(人往最陡的方向下山)

下面是第i個引數的梯度,通過求該引數的偏導數獲得:

θiJθ=θi(12mi=0m(hθ(x1,x2,...xn)yi)2)=1mi=0m((hθ(x1,x2,...xn)yi)xi)
分別對每一個模型引數(即θ0,θ1,θ2...θn)求偏導,得到梯度向量:
θJ=[θ0Jθ,θ1Jθ,...θnJθ]T

某一個引數梯度的幾何意義為:因為這裡一個引數可以代表一個空間維度,所以該引數梯度在一個多維空間中,表示某一點在該維度中變化最快的方向。因此,對於梯度向量,就表示某一點變化最快的方向。

如果S表示步長,那麼SθiJθ 就表示在第i維度上面移動一步的量。因此

θJ 表示在該空間中移動一步的量。

既然已經知道在某一維度中移動一步的量,那麼就可以通過下列函式得到第i維(也就是第i個模型引數)移動之後的值。

相關推薦

梯度下降原理線性迴歸程式碼實現python/java/c++

“梯度下降”顧名思義通過一步一步迭代逼近理想結果,當達到一定的精度或者超過迭代次數才退出,所以所獲得的結果是一個近似值。在其他部落格上面基本都有一個通俗的比喻:從山頂一步步下山。下面將用到幾個概念: - 步長:移動一步的長度。 - 維度:一個空間的表示方式,

布隆過濾器Bloom Filters原理程式碼實現Python + Java

本文介紹了布隆過濾器的概念及變體,這種描述非常適合程式碼模擬實現。重點在於標準布隆過濾器和計算布隆過濾器,其他的大都在此基礎上優化。文末附上了標準布隆過濾器和計算布隆過濾器的程式碼實現(Java版和Python版) 本文內容皆來自 《Foundations of Computers Systems Rese

梯度下降原理Python實現

梯度下降演算法是一個很基本的演算法,在機器學習和優化中有著非常重要的作用,本文首先介紹了梯度下降的基本概念,然後使用python實現了一個基本的梯度下降演算法。梯度下降有很多的變種,本文只介紹最基礎的梯度下降,也就是批梯度下降。 實際應用例子就不詳細說

梯度下降原理線上性迴歸、邏輯迴歸中的應用

1 基本概念 1)定義 梯度下降法,就是利用負梯度方向來決定每次迭代的新的搜尋方向,使得每次迭代能使待優化的目標函式逐步減小。 梯度下降法是2範數下的最速下降法。 最速下降法的一種簡單形式是:x(k+1)=x(k)-a*g(k),其中a稱為學習速率,可以是較小的常數。g(k

【機器學習】Apriori演算法——原理程式碼實現Python

Apriopri演算法 Apriori演算法在資料探勘中應用較為廣泛,常用來挖掘屬性與結果之間的相關程度。對於這種尋找資料內部關聯關係的做法,我們稱之為:關聯分析或者關聯規則學習。而Apriori演算法就是其中非常著名的演算法之一。關聯分析,主要是通過演算法在大規模資料集中尋找頻繁項集和關聯規則。

【機器學習】線性迴歸+程式碼實現

參考:《機器學習實戰》 原始碼地址以及資料:https://github.com/JieruZhang/MachineLearninginAction_src 1. 標準線性迴歸(LR) y

梯度下降法解決線性迴歸

''' 用梯度下降的優化方法來快速解決線性迴歸問題 ''' import tensorflow as tf import numpy as np import matplotlib.pyplot as plt import os os.environ['TF_

python利用梯度下降求多元線性迴歸

之前一直看Ng的課程,以為掌握了,結果自己動手實現發現問題很多。 多元線性迴歸 向量形式:Y=W∗X 展開:y=w0∗x0+w1∗x1+...+wn∗xn 參數:W:w0,w1,...wn 代價函數:J(w0,w1,...wn)=

[ch04-02] 用梯度下降法解決線性迴歸問題

系列部落格,原文在筆者所維護的github上:https://aka.ms/beginnerAI, 點選star加星不要吝嗇,星越多筆者越努力。 4.2 梯度下降法 有了上一節的最小二乘法做基準,我們這次用梯度下降法求解w和b,從而可以比較二者的結果。 4.2.1 數學原理 在下面的公式中,我們規定x是樣本特

4、python簡單線性迴歸程式碼案例完整

第一、迴歸分析的步驟 01 根據預測目標,確定自變數和因變數 02 繪製散點圖,確定迴歸模型型別 03 估計模型引數,建立迴歸模型 04 對迴歸模型進行檢驗 迴歸方程的精度就是用來表示實際觀測點和迴歸方程的擬合程度的指標,使用判定係數來度量。 判定係數=相關係數R平方=ESS

【演算法學習】AVL平衡二叉搜尋樹原理各項操作程式設計實現C++

AVLTree即(Adelson-Velskii-Landis Tree),是加了額外條件的二叉搜尋樹。其平衡條件的建立是為了確保整棵樹的深度為O(nLogn)。平衡條件是任何節點的左右子樹的高度相差不超過1. 在下面的程式碼中,程式設計實現了AVL樹的建立、查詢、插入、

隨機森林迴歸Random Forest演算法原理Spark MLlib呼叫例項Scala/Java/python

隨機森林迴歸 演算法介紹:        隨機森林是決策樹的整合演算法。隨機森林包含多個決策樹來降低過擬合的風險。隨機森林同樣具有易解釋性、可處理類別特徵、易擴充套件到多分類問題、不需特徵縮放等性質。 隨機森林分別訓練一系列的決策樹,所以訓練過程是並行的。因演算法中加入隨機

梯度迭代樹GBDT演算法原理Spark MLlib呼叫例項Scala/Java/python

梯度迭代樹 演算法簡介:         梯度提升樹是一種決策樹的整合演算法。它通過反覆迭代訓練決策樹來最小化損失函式。決策樹類似,梯度提升樹具有可處理類別特徵、易擴充套件到多分類問題、不需特徵縮放等性質。Spark.ml通過使用現有decision tree工具來實現。

歸併法的程式碼實現python

這個演算法的主要思想是:將被排序的陣列劃分成相等的兩個子陣列,然後遞迴使用同樣的演算法分別對兩個子陣列排序。最好將兩個排好序的子陣列歸併成一個數組。        歸併的過程如下:假設兩個子陣列是A和B,它們的元素都按照從小到大的順序排列。將A與B歸併後的

pyhon檔案操作典型程式碼實現非常經典!

1. 編寫一個程式,統計當前目錄下每個檔案型別的檔案數,程式實現如圖: 實現程式碼: import os all_files = os.listdir(os.chdir("D:\\")) type_dict = dict() for each_file in all_files: if os.pa

Softmax程式碼實現Python,附測試

import numpy as np import math from matplotlib import pyplot as plt from sklearn import datasets #計算假設的“相對概率”分佈,注意防止指數運算資料溢位 dataset: m*(n+1) the

感知機演算法Perceptron Learning Algorithm程式碼實現Python

PLA演算法是機器學習中最為基礎的演算法,與SVM和Neural Network有著緊密的關係。                            &n

分成確定性錢包開發的程式碼實現HD錢包服務

HD Wallets的全稱是Hierachical Deterministic Wallets, 對應中文是 分層確定性錢包。 這種錢包能夠使用一組助記詞來管理所有的賬戶的所有幣種,在比特幣的BIP32提案中提出,通過種子來生成主私鑰,然後派生海量的子私鑰和地址。種子很長,為了方便記錄,轉換為一組單詞記錄,

資料庫系統原理應用教程複習筆記第3 版

最近在複習資料庫相關知識點,過幾天就要考試了; 第一章 資料庫基礎知識 1、資料庫管理是資料處理的基礎工作,資料庫是資料管理的技術和手段。資料庫中的資料具有整體性和共享性。 1.2、資料庫系統的核心:資料庫管理系統。 1.3、資料庫核心:資料模型; 2、資料庫(DB)是一個按資料結構來儲存和管理資料的

多層感知機MLP演算法原理Spark MLlib呼叫例項Scala/Java/Python

多層感知機 演算法簡介:         多層感知機是基於反向人工神經網路(feedforwardartificial neural network)。多層感知機含有多層節點,每層節點與網路的下一層節點完全連線。輸入層的節點代表輸入資料,其他層的節點通過將輸入資料與層上節點