最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)多元線性回歸的梯度下降法

 更新時(shí)間:2022年08月09日 10:27:47   作者:侯小啾  
梯度下降法的機(jī)器學(xué)習(xí)的重要思想之一,梯度下降法的目標(biāo),是使得代價(jià)函數(shù)最小。本文主要和大家分享的是python實(shí)現(xiàn)多元線性回歸的梯度下降法,感興趣的可以了解一下

1. 讀取數(shù)據(jù)

首先要做的就是讀取數(shù)據(jù),請(qǐng)自行準(zhǔn)備一組適合做多元回歸的數(shù)據(jù)即可。這里以data.csv為例,這里做的是二元回歸。導(dǎo)入相關(guān)庫,及相關(guān)代碼如下。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D


data = np.loadtxt("data.csv", delimiter=",")
# 提取特征數(shù)據(jù)與標(biāo)簽
x_data = data[:,0:-1]
y_data = data[:,-1]

2.定義代價(jià)函數(shù)

回歸模型形如:

接下來我們需要初始化相關(guān)參數(shù),并定義出代價(jià)函數(shù)。因?yàn)榇嬖诙鄠€(gè)系數(shù)參數(shù),這里代價(jià)函數(shù)的寫法與一元回歸時(shí)的情況略有不同,稍微有所調(diào)整。具體如下:

# 初始化一系列參數(shù)
# 截距
theta0 = 0
# 系數(shù)
theta1 = 0
theta2 = 0

# 學(xué)習(xí)率
learning_rate = 0.0001
# 初始化迭代次數(shù)
n_iterables = 1000


# 定義代價(jià)函數(shù)(損失函數(shù))
def compute_mse(theta0, theta1, theta2, x_data, y_data):
    total_error = 0
    for i in range(len(x_data)):
        # 計(jì)算損失 真實(shí)值:y_data  預(yù)測(cè)值h(x)=theta0 + theta1*x1 + theta2*x2
        total_error += (y_data[i] - (theta0 + theta1 * x_data[i, 0] + theta2 * x_data[i, 1])) ** 2

    mse_ = total_error / len(x_data) / 2
    return mse_

3. 梯度下降

多元回歸的梯度下降與一元回歸的差不多,在一元回歸中只需要求一個(gè)導(dǎo)數(shù),而現(xiàn)在求多個(gè)偏導(dǎo)數(shù)。代碼過程如下:

def gradient_descent(x_data, y_data, theta0, theta1, theta2, learning_rate, n_iterables):
    m = len(x_data)

    # 循環(huán) --> 迭代次數(shù)
    for i in range(n_iterables):
        # 初始化 theta0 theta1 theta2 的偏導(dǎo)值
        theta0_grad = 0
        theta1_grad = 0
        theta2_grad = 0

        # 計(jì)算偏導(dǎo)的總和再平均
        # 遍歷m次
        for j in range(m):
            theta0_grad += (1 / m) * ((theta1 * x_data[j, 0] + theta2 * x_data[j, 1] + theta0) - y_data[j])
            theta1_grad += (1 / m) * ((theta1 * x_data[j, 0] + theta2 * x_data[j, 1] + theta0) - y_data[j]) * x_data[
                j, 0]
            theta2_grad += (1 / m) * ((theta1 * x_data[j, 0] + theta2 * x_data[j, 1] + theta0) - y_data[j]) * x_data[
                j, 1]

        # 更新theta
        theta0 = theta0 - (learning_rate * theta0_grad)
        theta1 = theta1 - (learning_rate * theta1_grad)
        theta2 = theta2 - (learning_rate * theta2_grad)
    return theta0, theta1, theta2


print(f"開始:截距theta0={theta0},theta1={theta1},theta2={theta2},損失={compute_mse(theta0,theta1,theta2,x_data,y_data)}")
print("開始運(yùn)行")
theta0,theta1,theta2 = gradient_descent(x_data,y_data,theta0,theta1,theta2,learning_rate,n_iterables)
print(f"迭代{n_iterables}次后:截距theta0={theta0},theta1={theta1},theta2={theta2},損失={compute_mse(theta0,theta1,theta2,x_data,y_data)}")

執(zhí)行結(jié)果輸出如下:

1000次迭代之后,損失值由23.64變?yōu)?.3865。

4.可視化展示

可視化展示常常作為機(jī)器學(xué)習(xí)過程的補(bǔ)充,可以使得機(jī)器學(xué)習(xí)的效果更為生動(dòng),直觀。

# 可視化散點(diǎn)分布
fig = plt.figure()
ax = Axes3D(fig)
ax.scatter(x_data[:,0],x_data[:,1],y_data)
plt.show()


# 可視化散點(diǎn)分布
fig = plt.figure()
ax = Axes3D(fig)
ax.scatter(x_data[:,0],x_data[:,1],y_data)

# 繪制預(yù)期平面
# 構(gòu)建x
x_0 = x_data[:,0]
x_1 = x_data[:,1]

# 生成網(wǎng)格矩陣
x_0,x_1 = np.meshgrid(x_0,x_1)

y_hat = theta0 + theta1*x_0 + theta2*x_1

# 繪制3D圖
ax.plot_surface(x_0,x_1,y_hat)

# 設(shè)置標(biāo)簽
ax.set_xlabel("Miles")
ax.set_ylabel("nums")
ax.set_zlabel("Time")

plt.show()

散點(diǎn)圖輸出如下:

加上擬合回歸面后如圖所示:

到此這篇關(guān)于Python實(shí)現(xiàn)多元線性回歸的梯度下降法的文章就介紹到這了,更多相關(guān)Python梯度下降法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用Python的turtle模塊畫圖的方法

    使用Python的turtle模塊畫圖的方法

    這篇文章主要介紹了使用Python的turtle模塊畫圖的方法,涉及turtle簡(jiǎn)介,運(yùn)動(dòng)命令,畫筆控制命令的分享,以及具體操作的步驟,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Python 中將二進(jìn)制轉(zhuǎn)換為整數(shù)的多種方法

    Python 中將二進(jìn)制轉(zhuǎn)換為整數(shù)的多種方法

    這篇文章主要介紹了Python 中將二進(jìn)制轉(zhuǎn)換為整數(shù),Python 中提供了多種方式將二進(jìn)制字符串轉(zhuǎn)換為整數(shù),其中包括使用 int() 函數(shù)、使用二進(jìn)制前綴和使用 eval() 函數(shù),本文通過實(shí)例代碼講解的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • 對(duì)Python新手編程過程中如何規(guī)避一些常見問題的建議

    對(duì)Python新手編程過程中如何規(guī)避一些常見問題的建議

    這篇文章中作者對(duì)Python新手編程過程中如何規(guī)避一些常見問題給出了建議,主要著眼于初學(xué)者對(duì)于一些常用函數(shù)方法在平時(shí)的使用習(xí)慣中的問題給出建議,需要的朋友可以參考下
    2015-04-04
  • PyQt5的QWebEngineView使用示例

    PyQt5的QWebEngineView使用示例

    這篇文章主要介紹了PyQt5的QWebEngineView使用示例,幫助大家更好的學(xué)習(xí)和使用python,感興趣的朋友可以了解下
    2020-10-10
  • cython加速python代碼的方法實(shí)現(xiàn)

    cython加速python代碼的方法實(shí)現(xiàn)

    本文主要介紹了cython加速python代碼的方法實(shí)現(xiàn),特別是在涉及到數(shù)值計(jì)算密集型任務(wù)時(shí),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • python利用while求100內(nèi)的整數(shù)和方式

    python利用while求100內(nèi)的整數(shù)和方式

    這篇文章主要介紹了 python利用while求100內(nèi)的整數(shù)和方式,下面文章要描述的內(nèi)容有1到100的和、1到100內(nèi)的偶數(shù)和、1到100內(nèi)的奇數(shù)和,具體詳細(xì)內(nèi)容,需要的朋友可以參考一下
    2021-11-11
  • 解決python中 f.write寫入中文出錯(cuò)的問題

    解決python中 f.write寫入中文出錯(cuò)的問題

    今天小編就為大家分享一篇解決python中 f.write寫入中文出錯(cuò)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • IDLE下Python文件編輯和運(yùn)行操作

    IDLE下Python文件編輯和運(yùn)行操作

    這篇文章主要介紹了IDLE下Python文件編輯和運(yùn)行操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 淺談python數(shù)據(jù)結(jié)構(gòu)之動(dòng)態(tài)規(guī)劃

    淺談python數(shù)據(jù)結(jié)構(gòu)之動(dòng)態(tài)規(guī)劃

    這篇文章主要介紹了淺談python數(shù)據(jù)結(jié)構(gòu)之動(dòng)態(tài)規(guī)劃,可能很多小伙伴會(huì)覺得這個(gè)詞很陌生,覺得這是一種很復(fù)雜的思想,學(xué)習(xí)起來很困難,其實(shí)并不是這樣,動(dòng)態(tài)規(guī)劃所講述的知識(shí)與動(dòng)態(tài)與規(guī)劃并無太大關(guān)聯(lián),需要的朋友可以參考下
    2023-07-07
  • Python的Scrapy爬蟲框架簡(jiǎn)單學(xué)習(xí)筆記

    Python的Scrapy爬蟲框架簡(jiǎn)單學(xué)習(xí)筆記

    這篇文章主要介紹了Python的Scrapy爬蟲框架簡(jiǎn)單學(xué)習(xí)筆記,從基本的創(chuàng)建項(xiàng)目到CrawlSpider的使用等都有涉及,需要的朋友可以參考下
    2016-01-01

最新評(píng)論

安新县| 如东县| 南投市| 尉氏县| 昆山市| 阜阳市| 钦州市| 平原县| 闵行区| 吉木萨尔县| 通州区| 措勤县| 紫阳县| 广东省| 沧州市| 虹口区| 榕江县| 泰来县| 邹城市| 普兰县| 乌兰察布市| 犍为县| 阿勒泰市| 长葛市| 博白县| 习水县| 建湖县| 永城市| 彭山县| 邯郸县| 永和县| 阳城县| 阜康市| 镇原县| 南岸区| 连平县| 神农架林区| 简阳市| 乐山市| 衡东县| 孟连|