python 還原梯度下降算法實(shí)現(xiàn)一維線性回歸
首先我們看公式:
這個(gè)是要擬合的函數(shù)
然后我們求出它的損失函數(shù), 注意:這里的n和m均為數(shù)據(jù)集的長(zhǎng)度,寫(xiě)的時(shí)候忘了
注意,前面的theta0-theta1x是實(shí)際值,后面的y是期望值
接著我們求出損失函數(shù)的偏導(dǎo)數(shù):
最終,梯度下降的算法:
學(xué)習(xí)率一般小于1,當(dāng)損失函數(shù)是0時(shí),我們輸出theta0和theta1.
接下來(lái)上代碼!
class LinearRegression(): def __init__(self, data, theta0, theta1, learning_rate): self.data = data self.theta0 = theta0 self.theta1 = theta1 self.learning_rate = learning_rate self.length = len(data) # hypothesis def h_theta(self, x): return self.theta0 + self.theta1 * x # cost function def J(self): temp = 0 for i in range(self.length): temp += pow(self.h_theta(self.data[i][0]) - self.data[i][1], 2) return 1 / (2 * self.m) * temp # partial derivative def pd_theta0_J(self): temp = 0 for i in range(self.length): temp += self.h_theta(self.data[i][0]) - self.data[i][1] return 1 / self.m * temp def pd_theta1_J(self): temp = 0 for i in range(self.length): temp += (self.h_theta(data[i][0]) - self.data[i][1]) * self.data[i][0] return 1 / self.m * temp # gradient descent def gd(self): min_cost = 0.00001 round = 1 max_round = 10000 while min_cost < abs(self.J()) and round <= max_round: self.theta0 = self.theta0 - self.learning_rate * self.pd_theta0_J() self.theta1 = self.theta1 - self.learning_rate * self.pd_theta1_J() print('round', round, ':\t theta0=%.16f' % self.theta0, '\t theta1=%.16f' % self.theta1) round += 1 return self.theta0, self.theta1 def main(): data = [[1, 2], [2, 5], [4, 8], [5, 9], [8, 15]] # 這里換成你想擬合的數(shù)[x, y] # plot scatter x = [] y = [] for i in range(len(data)): x.append(data[i][0]) y.append(data[i][1]) plt.scatter(x, y) # gradient descent linear_regression = LinearRegression(data, theta0, theta1, learning_rate) theta0, theta1 = linear_regression.gd() # plot returned linear x = np.arange(0, 10, 0.01) y = theta0 + theta1 * x plt.plot(x, y) plt.show()
到此這篇關(guān)于python 還原梯度下降算法實(shí)現(xiàn)一維線性回歸 的文章就介紹到這了,更多相關(guān)python 一維線性回歸 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python 機(jī)器學(xué)習(xí)之支持向量機(jī)非線性回歸SVR模型
- python實(shí)現(xiàn)機(jī)器學(xué)習(xí)之多元線性回歸
- python實(shí)現(xiàn)機(jī)器學(xué)習(xí)之元線性回歸
- 如何用Python徒手寫(xiě)線性回歸
- python 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的線性回歸案例
- 如何在python中實(shí)現(xiàn)線性回歸
- python 線性回歸分析模型檢驗(yàn)標(biāo)準(zhǔn)--擬合優(yōu)度詳解
- 8種用Python實(shí)現(xiàn)線性回歸的方法對(duì)比詳解
- python機(jī)器學(xué)習(xí)之線性回歸詳解
相關(guān)文章
pip matplotlib報(bào)錯(cuò)equired packages can not be built解決
這篇文章主要介紹了pip matplotlib報(bào)錯(cuò)equired packages can not be built解決,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01Python常用驗(yàn)證碼標(biāo)注和識(shí)別(需求分析和實(shí)現(xiàn)思路)
通過(guò)本文的介紹,我們了解了Python在常用驗(yàn)證碼標(biāo)注和識(shí)別方面的應(yīng)用,在實(shí)際項(xiàng)目中,我們可以根據(jù)具體需求選擇合適的模型和工具,實(shí)現(xiàn)高效、準(zhǔn)確的驗(yàn)證碼標(biāo)注和識(shí)別,感興趣的朋友跟隨小編一起看看吧2024-03-03Python調(diào)用各大機(jī)器翻譯API的實(shí)現(xiàn)示例
本文主要介紹了Python調(diào)用各大機(jī)器翻譯API的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07python把數(shù)組中的數(shù)字每行打印3個(gè)并保存在文檔中的方法
今天小編就為大家分享一篇python把數(shù)組中的數(shù)字每行打印3個(gè)并保存在文檔中的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07Python三十行代碼實(shí)現(xiàn)簡(jiǎn)單人臉識(shí)別的示例代碼
這篇文章主要介紹了Python三十行代碼實(shí)現(xiàn)簡(jiǎn)單人臉識(shí)別的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03在交互式環(huán)境中執(zhí)行Python程序過(guò)程詳解
這篇文章主要介紹了在交互式環(huán)境中執(zhí)行Python程序過(guò)程詳解,運(yùn)行Python腳本程序的方式有多種,目前主要的方式有:交互式環(huán)境運(yùn)行、命令行窗口運(yùn)行、開(kāi)發(fā)工具上運(yùn)行等,其中在不同的操作平臺(tái)上還互不相同,需要的朋友可以參考下2019-07-07Python數(shù)組并集交集補(bǔ)集代碼實(shí)例
這篇文章主要介紹了Python數(shù)組并集交集補(bǔ)集代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02pyecharts如何旋轉(zhuǎn)折線圖的X軸標(biāo)簽
這篇文章主要介紹了pyecharts如何旋轉(zhuǎn)折線圖的X軸標(biāo)簽,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11