国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

機(jī)器學(xué)習(xí)~從入門到精通(三)梯度下降法

這篇具有很好參考價值的文章主要介紹了機(jī)器學(xué)習(xí)~從入門到精通(三)梯度下降法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、梯度下降法

#   梯度下降不是一種算法,是一種最優(yōu)化方法
#   上節(jié)課講解的梯度下降的案例  是一個簡單的一元二次方程
#    最簡單的線性回歸:只有一個特征的線性回歸,有兩個theta
#    

二、在多元線性回歸中使用梯度下降求解

機(jī)器學(xué)習(xí)~從入門到精通(三)梯度下降法,機(jī)器學(xué)習(xí),人工智能
機(jī)器學(xué)習(xí)~從入門到精通(三)梯度下降法,機(jī)器學(xué)習(xí),人工智能
機(jī)器學(xué)習(xí)~從入門到精通(三)梯度下降法,機(jī)器學(xué)習(xí),人工智能
機(jī)器學(xué)習(xí)~從入門到精通(三)梯度下降法,機(jī)器學(xué)習(xí),人工智能

三、### R squared error

機(jī)器學(xué)習(xí)~從入門到精通(三)梯度下降法,機(jī)器學(xué)習(xí),人工智能

使用真實數(shù)據(jù)來進(jìn)行梯度下降的過程

機(jī)器學(xué)習(xí)~從入門到精通(三)梯度下降法,機(jī)器學(xué)習(xí),人工智能
機(jī)器學(xué)習(xí)~從入門到精通(三)梯度下降法,機(jī)器學(xué)習(xí),人工智能

#  如果特征數(shù)多,樣本數(shù)少,梯度下降法占優(yōu)
#  如果特征數(shù)少,樣本數(shù)多,梯度下降法的效率會比較低
import numpy as np


def r2_score(y_true, y_predict):
    return 1 - ((np.sum((y_true - y_predict) ** 2) / len(y_true)) / np.var(y_true))


class MyLinearGression:
    def __init__(self):
        self._theta = None  # theta參數(shù)
        self.coef_ = None  # 系數(shù)
        self.interception_ = None  # 截距

    def fit_gd(self, X_train, y, eta=0.01, n_iters=1e3, epsilon=1e-8):  # 使用梯度下降的方式來訓(xùn)練數(shù)據(jù)
        def j(theta, X_b, y):
            try:
                return np.sum((y - X_b.dot(theta)) ** 2) / len(X_b)
            except:
                return float('inf')

        def dj(theta, X_b, y):
            # res = np.empty(len(theta))
            # res[0] = np.sum((X_b.dot(theta) - y))
            # for i in range(1, len(theta)):
            #     res[i] = (X_b.dot(theta) - y).dot(X_b[:, i])
            # return res * 2 / len(X_b)
            return X_b.T.dot(X_b.dot(theta) - y)

        def gradient_descent(X_b, y, eta, initial_theta, n_iters=1e3, epsilon=1e-8):
            theta = initial_theta
            i_iter = 1
            while i_iter < n_iters:
                last_theta = theta
                theta = theta - eta * dj(theta, X_b, y)
                if abs(j(theta, X_b, y) - j(last_theta, X_b, y)) < epsilon:
                    break
                i_iter += 1
            return theta

        # eta = 0.01
        X_b = np.hstack([np.ones(len(X_train)).reshape(-1, 1), X_train])
        initial_theta = np.zeros(X_b.shape[1])
        self._theta = gradient_descent(X_b, y, eta, initial_theta)
        self.interception_ = self._theta[0]
        self.coef_ = self._theta[1:]
        return self

    def __repr__(self):
        return "MyLinearGression()"

    def score(self, X_predict, y_test):
        y_predict = self.predict(X_predict)
        return r2_score(y_test, y_predict)

    def predict(self, X_predict):
        X_b = np.hstack([np.ones(len(X_predict)).reshape(-1, 1), X_predict])
        return X_b.dot(self._theta)

四、總結(jié)

knn算法 線性回歸 數(shù)據(jù)的預(yù)處理(標(biāo)準(zhǔn)化) 模型好壞的校驗

機(jī)器學(xué)習(xí)~從入門到精通(三)梯度下降法,機(jī)器學(xué)習(xí),人工智能
機(jī)器學(xué)習(xí)~從入門到精通(三)梯度下降法,機(jī)器學(xué)習(xí),人工智能
機(jī)器學(xué)習(xí)~從入門到精通(三)梯度下降法,機(jī)器學(xué)習(xí),人工智能

五 梯度下降法

# 梯度下降不是一個機(jī)器學(xué)習(xí)算法,既不是再做監(jiān)督學(xué)習(xí),也不是在做非監(jiān)督學(xué)習(xí),是一種基于搜索的最優(yōu)化方法
# 作用:最小化一個損失函數(shù)
# 梯度上升法:最大化一個效用函數(shù)
#  eta叫做學(xué)習(xí)率,learning rate
#  eta的取值影響我們求得最優(yōu)解的速度
#  eta如果取值過小,收斂太慢
#  eta取值過大,可能甚至得不到最優(yōu)解
#  eta他是梯度下降法的一個超參數(shù)

#  并不是所有的函數(shù)都有唯一的極值點

#  線性回歸的損失函數(shù)具有唯一的最優(yōu)解
#  gradient inscent 
import numpy as np
import matplotlib.pyplot as plt
plt_x = np.linspace(-1,6,141)
plt_y = (plt_x-2.5)**2-1
plt.plot(plt_x,plt_y)
plt.show()

機(jī)器學(xué)習(xí)~從入門到精通(三)梯度下降法,機(jī)器學(xué)習(xí),人工智能

def dj(theta):  
    return 2*(theta-2.5) #  傳入theta,求theta點對應(yīng)的導(dǎo)數(shù)

def j(theta):
    return (theta-2.5)**2-1  #  傳入theta,獲得目標(biāo)函數(shù)的對應(yīng)值
eta = 0.1
theta =0.0
epsilon = 1e-8
while True:
    gradient = dj(theta)
    last_theta = theta
    theta = theta-gradient*eta 
    if np.abs(j(theta)-j(last_theta))<epsilon:
        break
        
print(theta)
print(dj(theta))
print(j(theta))
eta = 0.1
theta =0.0
epsilon = 1e-8
theta_history = [theta]
while True:
    gradient = dj(theta)
    last_theta = theta
    theta = theta-gradient*eta 
    theta_history.append(theta)
    if np.abs(j(theta)-j(last_theta))<epsilon:
        break
        
print(theta)
print(dj(theta))
print(j(theta))

len(theta_history)

plt.plot(plt_x,plt_y)
plt.plot(theta_history,[(i-2.5)**2-1 for i in theta_history],color='r',marker='+')
plt.show()
def gradient_descent(eta,initial_theta,n_iters=1e3,epsilon = 1e-8):
    theta = initial_theta
    theta_history = [initial_theta]
    i_iter = 1
    def dj(theta):  
        try:
            return 2*(theta-2.5) #  傳入theta,求theta點對應(yīng)的導(dǎo)數(shù)
        except:
            return float('inf')
    def j(theta):
        return (theta-2.5)**2-1  #  傳入theta,獲得目標(biāo)函數(shù)的對應(yīng)值
    while i_iter<=n_iters:
        gradient = dj(theta)
        last_theta = theta
        theta = theta-gradient*eta 
        theta_history.append(theta)
        if np.abs(j(theta)-j(last_theta))<epsilon:
            break
        i_iter+=1
    return theta_history

def plot_gradient(theta_history):
    plt.plot(plt_x,plt_y)
    plt.plot(theta_history,[(i-2.5)**2-1 for i in theta_history],color='r',marker='+')
    plt.show()
eta = 0.1
theta =0.0
plot_gradient(gradient_descent(eta,theta))
eta = 0.01  #  eta越小,迭代次數(shù)越多,耗時越久
theta =0.0
theta_history = gradient_descent(eta,theta)
plot_gradient(theta_history)
len(theta_history)
eta = 0.8   #  說明eta的取值不是特別準(zhǔn)確,也可以得到正確的結(jié)果
theta =0.0
plot_gradient(gradient_descent(eta,theta))
eta = 1.1  #  說明eta取值太大
theta =0.0
plot_gradient(gradient_descent(eta,theta))

六、sklearn中使用梯度下降法

機(jī)器學(xué)習(xí)~從入門到精通(三)梯度下降法,機(jī)器學(xué)習(xí),人工智能文章來源地址http://www.zghlxwxcb.cn/news/detail-801550.html

到了這里,關(guān)于機(jī)器學(xué)習(xí)~從入門到精通(三)梯度下降法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【初學(xué)人工智能原理】【4】梯度下降和反向傳播:能改(下)

    【初學(xué)人工智能原理】【4】梯度下降和反向傳播:能改(下)

    本文教程均來自b站【小白也能聽懂的人工智能原理】,感興趣的可自行到b站觀看。 本文【原文】章節(jié)來自課程的對白,由于缺少圖片可能無法理解,故放到了最后,建議直接看代碼(代碼放到了前面)。 在引入b后繪制代價函數(shù)界面,看看到底是不是一個碗 在w和b兩個方向

    2024年02月05日
    瀏覽(21)
  • 【人工智能】— 邏輯回歸分類、對數(shù)幾率、決策邊界、似然估計、梯度下降

    【人工智能】— 邏輯回歸分類、對數(shù)幾率、決策邊界、似然估計、梯度下降

    考慮二分類問題,其中每個樣本由一個特征向量表示。 直觀理解:將特征向量 x text{x} x 映射到一個實數(shù) w T x text{w}^Ttext{x} w T x 一個正的值 w T x text{w}^Ttext{x} w T x 表示 x text{x} x 屬于正類的可能性較高。 一個負(fù)的值 w T x text{w}^Ttext{x} w T x 表示 x text{x} x 屬于負(fù)類的可能性

    2024年02月09日
    瀏覽(20)
  • 【人工智能】— 神經(jīng)網(wǎng)絡(luò)、前向傳播、反向傳播、梯度下降、局部最小值、多層前饋網(wǎng)絡(luò)、緩解過擬合的策略

    【人工智能】— 神經(jīng)網(wǎng)絡(luò)、前向傳播、反向傳播、梯度下降、局部最小值、多層前饋網(wǎng)絡(luò)、緩解過擬合的策略

    前向傳播和反向傳播 都是神經(jīng)網(wǎng)絡(luò)訓(xùn)練中常用的重要算法。 前向傳播 是指將輸入數(shù)據(jù)從輸入層開始經(jīng)過一系列的權(quán)重矩陣和激活函數(shù)的計算后,最終得到輸出結(jié)果的過程。在前向傳播中,神經(jīng)網(wǎng)絡(luò)會將每一層的輸出作為下一層的輸入,直到輸出層得到最終的結(jié)果。 反向傳播

    2024年02月10日
    瀏覽(24)
  • 【人工智能】神經(jīng)網(wǎng)絡(luò)、前向傳播、反向傳播、梯度下降、局部最小值、多層前饋網(wǎng)絡(luò)、緩解過擬合的策略

    前向傳播 是指將輸入數(shù)據(jù)從輸入層開始經(jīng)過一系列的權(quán)重矩陣和激活函數(shù)的計算后,最終得到輸出結(jié)果的過程。在前向傳播中,神經(jīng)網(wǎng)絡(luò)會將每一層的輸出作為下一層的輸入,直到輸出層得到最終的結(jié)果。 反向傳播 是指在神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程中,通過計算損失函數(shù)的梯度,將

    2024年02月16日
    瀏覽(20)
  • 機(jī)器學(xué)習(xí)梯度下降法筆記

    梯度下降法(Gradient Descent)是一種常用的優(yōu)化算法,用于在機(jī)器學(xué)習(xí)和深度學(xué)習(xí)中最小化或最大化一個函數(shù)的值。在機(jī)器學(xué)習(xí)中,梯度下降法常用于調(diào)整模型的參數(shù),使得模型能夠更好地擬合訓(xùn)練數(shù)據(jù)。 這個優(yōu)化算法的基本思想是通過迭代的方式,不斷調(diào)整參數(shù)的值,使得

    2024年02月15日
    瀏覽(21)
  • 機(jī)器學(xué)習(xí)——線性回歸、梯度下降

    機(jī)器學(xué)習(xí)——線性回歸、梯度下降

    監(jiān)督學(xué)習(xí) :學(xué)習(xí)數(shù)據(jù)帶有標(biāo)簽 無監(jiān)督學(xué)習(xí) :沒有任何的標(biāo)簽,或者有相同的標(biāo)簽 其他:強(qiáng)化學(xué)習(xí)、推薦系統(tǒng)等 還是房價預(yù)測的例子, 訓(xùn)練集如下: 定義各個變量的含義如下: m——代表訓(xùn)練集中實例的數(shù)量 x——代表特征/輸入變量 y——代表目標(biāo)變量/輸出變量 (x,y)——代

    2024年02月07日
    瀏覽(25)
  • 機(jī)器學(xué)習(xí)——梯度下降法

    機(jī)器學(xué)習(xí)——梯度下降法

    問:梯度下降法一定能求得最小值??? 答: 在某些情況下,梯度下降法可以找到函數(shù)的最小值,但并非總是如此。這取決于函數(shù)的形狀和梯度下降法的參數(shù)設(shè)置。如果函數(shù)具有多個局部最小值,梯度下降法可能會收斂到其中一個局部最小值,而不是全局最小值。此外,如

    2023年04月08日
    瀏覽(21)
  • 機(jī)器學(xué)習(xí)_梯度下降

    機(jī)器學(xué)習(xí)_梯度下降

    計算梯度向量其幾何意義,就是函數(shù)變化的方向,而且是變化最快的方向。對于函數(shù)f(x),在點(xo,yo),梯度向量的方向也就是y值增加最快的方向。也就是說,沿著梯度向量的方向 △f(xo),能找到函數(shù)的最大值。反過來說,沿著梯度向量相反的方向,也就是 -△f(xo)的方向,梯度

    2024年01月19日
    瀏覽(43)
  • 梯度下降與機(jī)器學(xué)習(xí)的關(guān)系

    梯度下降是一種優(yōu)化算法,常用于機(jī)器學(xué)習(xí)中的參數(shù)優(yōu)化問題。在機(jī)器學(xué)習(xí)中,我們通常需要通過調(diào)整模型的參數(shù)來最小化損失函數(shù),從而使模型能夠更好地擬合數(shù)據(jù)。梯度下降算法通過不斷迭代更新參數(shù),沿著損失函數(shù)的負(fù)梯度方向移動,逐步接近最優(yōu)解。 以下是梯度下降

    2024年02月22日
    瀏覽(26)
  • [機(jī)器學(xué)習(xí)] 1. 梯度下降 Gradient Descent 與隨機(jī)梯度下降 Stochastic Gradient Descent

    ML Theory 太魔怔了?。。。。?從微積分課上我們學(xué)到 對一個 (mathscr C^2) 函數(shù),其二階泰勒展開的皮亞諾余項形式 [f(bm w\\\') = f(bm w) + langle nabla f(bm w), bm w\\\' - bm wrangle + o(|bm w\\\' - bm w|)] 這說明只要 (bm w\\\') 和 (bm w) 挨得足夠接近,我們就可以用 (f(bm w) + langle nabla f(

    2024年02月08日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包