1. 程式人生 > >梯度下降原理及Python實現

梯度下降原理及Python實現

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

實際應用例子就不詳細說了,網上關於梯度下降的應用例子很多,最多的就是NG課上的預測房價例子:
假設有一個房屋銷售的資料如下:

面積(m^2) 銷售價錢(萬元)

面積(m^2) 銷售價錢(萬元)
123 250
150 320
87 180

根據上面的房價我們可以做這樣一個圖:

這裡寫圖片描述

於是我們的目標就是去擬合這個圖,使得新的樣本資料進來以後我們可以方便進行預測:
這裡寫圖片描述

對於最基本的線性迴歸問題,公式如下:
這裡寫圖片描述
x是自變數,比如說房子面積。θ是權重引數,也就是我們需要去梯度下降求解的具體值。

在這兒,我們需要引入損失函式(Loss function 或者叫 cost function),目的是為了在梯度下降時用來衡量我們更新後的引數是否是向著正確的方向前進,如圖損失函式(m表示訓練集樣本數量):
這裡寫圖片描述
下圖直觀顯示了我們梯度下降的方向,就是希望從最高處一直下降到最低出:
這裡寫圖片描述

梯度下降更新權重引數的過程中我們需要對損失函式求偏導數:
這裡寫圖片描述
求完偏導數以後就可以進行引數更新了:
這裡寫圖片描述
虛擬碼如圖所示:
這裡寫圖片描述

好了,下面到了程式碼實現環節,我們用Python來實現一個梯度下降演算法,求解:

y=2x1+x2+3,也就是求解:y=ax1+bx2+c中的a,b,c三個引數 。

下面是程式碼:

import numpy as np
import matplotlib.pyplot as plt
#y=2 * (x1) + (x2) + 3 
rate = 0.001
x_train = np.array([    [1, 2],    [2, 1],    [2, 3],    [3, 5],    [1, 3],    [4, 2],    [7, 3],    [4, 5],    [11, 3],    [8, 7]    ])
y_train = np.array([7, 8
, 10, 14, 8, 13, 20, 16, 28, 26]) x_test = np.array([ [1, 4], [2, 2], [2, 5], [5, 3], [1, 5], [4, 1] ]) a = np.random.normal() b = np.random.normal() c = np.random.normal() def h(x): return a*x[0]+b*x[1]+c for i in range(10000): sum_a=0 sum_b=0 sum_c=0 for x, y in zip(x_train, y_train): sum_a = sum_a + rate*(y-h(x))*x[0] sum_b = sum_b + rate*(y-h(x))*x[1] sum_c = sum_c + rate*(y-h(x)) a = a + sum_a b = b + sum_b c = c + sum_c plt.plot([h(xi) for xi in x_test]) print(a) print(b) print(c) result=[h(xi) for xi in x_train] print(result) result=[h(xi) for xi in x_test] print(result) plt.show()

x_train是訓練集x,y_train是訓練集y, x_test是測試集x,執行後得到如下的圖,圖片顯示了演算法對於測試集y的預測在每一輪迭代中是如何變化的:
這裡寫圖片描述

我們可以看到,線段是在逐漸逼近的,訓練資料越多,迭代次數越多就越逼近真實值。

相關推薦

梯度下降原理Python實現

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

梯度下降演算法python實現(學習筆記)

梯度下降(Gradient Descent)演算法是機器學習中使用非常廣泛的優化演算法。當前流行的機器學習庫或者深度學習庫都會包括梯度下降演算法的不同變種實現。 本文主要以線性迴歸演算法損失函式求極小值來說明如何使用梯度下降演算法並給出python實現。若有不正確的地方,希

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

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

(轉)梯度下降法及其Python實現

radi 減少 fill 叠代 bbs 方法 風險 ews 展示 梯度下降法(gradient descent),又名最速下降法(steepest descent)是求解無約束最優化問題最常用的方法,它是一種叠代方法,每一步主要的操作是求解目標函數的梯度向量,將當前位置的負

常見的查找算法的原理python實現

put arch img 字典 python實現 需要 技術 () one 順序查找 二分查找 練習 一、順序查找 data=[1,3,4,5,6] value=1 def linear_search(data,value): flag=False

短時傅裏葉變換(Short Time Fourier Transform)原理 Python 實現

src 參考 函數 ade block return 技術 數學公式 def 原理   短時傅裏葉變換(Short Time Fourier Transform, STFT) 是一個用於語音信號處理的通用工具.它定義了一個非常有用的時間和頻率分布類, 其指定了任意信號隨時間

線程池原理python實現

source 實例 以及 代碼 let range python實現 queue 上界 https://www.cnblogs.com/goodhacker/p/3359985.html 為什麽需要線程池   目前的大多數網絡服務器,包括Web服務器、Email服務器以

dropout原理python實現

dropout原理及python實現 標籤: 神經網路 python dropout引入 我們都知道在訓練神經網路的時候,對於神經網路來說很容易產生過擬合現象,在解決神經網路的過擬合的時候,我們可以使用正則化進行防止過擬合現象的產生,除此之外我們也可以使用dropout

梯度下降演算法(1) - Python實現

演算法介紹:梯度下降演算法是一種利用一次導數資訊求取目標函式極值的方法,也是目前應用最為廣泛的區域性優化演算法之一。其具有實現簡單、容易遷移、收斂速度較快的特徵。在求解過程中,從預設的種子點開始,根據梯度資訊逐步迭代更新,使得種子點逐漸向目標函式的極小值點移動,最終到達目標函式的極小值點。注意,沿梯度正

SVM演算法原理Python實現

Svm(support Vector Mac)又稱為支援向量機,是一種二分類的模型。當然如果進行修改之後也是可以用於多類別問題的分類。支援向量機可以分為線性核非線性兩大類。其主要思想為找到空間中的一個更夠將所有資料樣本劃開的超平面,並且使得本本集中所有資料到這個超平面的距離最

url去重 --布隆過濾器 bloom filter原理python實現

array art bits bras pos for tar ack setup https://blog.csdn.net/a1368783069/article/details/52137417 # -*- encoding: utf-8 -*- """This

xgboost原理python實現

目錄 xgboost原理 具體瞭解還是要看Tianqi Chen大佬文章 決策樹分為分類樹和迴歸樹(CART)組成。這裡有一個簡單的的例子,用來區分人們是否會喜歡電腦遊戲。  但是有時候一棵樹並不

樸素貝葉斯原理python實現

一、貝葉斯演算法引入       樸素貝葉斯演算法是基於貝葉斯定理和特徵條件獨立假設的分類法,是一種基於概率分佈的分類演算法。       貝葉斯分類演算法,通俗的來講,在給定資料集的前提下,對於一個

層次聚類演算法的原理python實現

層次聚類(Hierarchical Clustering)是一種聚類演算法,通過計算不同類別資料點間的相似度來建立一棵有層次的巢狀聚類樹。在聚類樹中,不同類別的原始資料點是樹的最低層,樹的頂層是一個聚類的根節點。 聚類樹的建立方法:自下而上的合併,自上而下的分裂。(這裡介紹第一種) 1.2 層次聚類的合

經典排序演算法,氣泡排序,選擇排序,直接插入排序,希爾排序,快速排序,歸併排序,二分查詢。原理python實現

1.氣泡排序 氣泡排序 1.比較相鄰的元素,如果第一個比第二個大(升序),就交換他們兩個 2.對每一對相鄰的元素做同樣的工作,從開始到結尾的最後一對 這步做完後,最後的元素會是最大的數 3.針對所有的元素重複以上的步驟,除了最

隨機梯度下降演算法的Python實現

當用於訓練的資料量非常大時,批量梯度下降演算法變得不再適用(此時其速度會非常慢),為解決這個問題,人們又想出了隨機梯度下降演算法。隨機梯度下降演算法的核心思想並沒有變,它仍是基於梯度,通過對目標函式中的引數不斷迭代更新,使得目標函式逐漸靠近最小值。 具體程式碼實現如下: 先匯入要用到的各種包

小批量梯度下降演算法的Python實現

小批量梯度下降演算法的核心思想仍然是基於梯度,通過對目標函式中的引數不斷迭代更新,使得目標函式逐漸靠近最小值。它是批量梯度下降與隨機梯度下降的折中,有著訓練過程較快,同時又能保證得到較為精確的訓練結果。在一些情況下,小批量梯度下降比批量梯度下降和隨機梯度下降的速度都要快。 具體程式碼實現如下:

PCA 原理 Python 實現

原文發於個人部落格 前言 說好的要做個有逼格的技術部落格,雖然這篇依然沒什麼水平,但總算走出了第一步,希望以後每天都能進步一點點吧! 接觸機器學習也一年多了,也學了很多演算法,而PCA是資料預處理中一個很重要的演算法,當時學習的時候也在網上看了

協同過濾(ALS)的原理Python實現

提到ALS相信大家應該都不會覺得陌生(不陌生你點進來幹嘛[捂臉]),它是協同過濾的一種,並被整合到Spark的Mllib庫中。本文就ALS的基本原理進行講解,並手把手、肩並肩地帶您實現這一演算法。 原理篇 我們用人話而不是大段的數學公式來講講ALS是怎麼一回事。 1.1 你聽說過推薦演算法麼 假

樸素貝葉斯分類原理Python實現簡單文字分類

貝葉斯定理: 這個定理解決了現實生活裡經常遇到的問題:已知某條件概率,如何得到兩個事件交換後的概率,也就是在已知P(A|B)的情況下如何求得P(B|A)。這裡先解釋什麼是條件概率:表示事件B已經發生的前提下,事件A發生的概率,叫做事件B發生下事件A的條件概率。