成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

牛頓法、梯度下降法、最小二乘法的原理以及利用它們解決實(shí)際問題的python編程

牛頓法、梯度下降法、最小二乘法的原理以及利用它們解決實(shí)際問題的python編程

馬關(guān)ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!

一、牛頓法原理

1、產(chǎn)生背景

牛頓法、梯度下降法、最小二乘法的原理以及利用它們解決實(shí)際問題的python編程

2、牛頓迭代公式

二、梯度下降法原理

根據(jù)計(jì)算梯度時(shí)所用數(shù)據(jù)量不同,可以分為三種基本方法:批量梯度下降法(Batch Gradient Descent, BGD)、小批量梯度下降法(Mini-batch Gradient Descent, MBGD)以及隨機(jī)梯度下降法(Stochastic Gradient Descent, SGD)。

梯度下降法的一般求解框架

三、最小二乘法原理

最小二乘法(又稱最小平方法)是一種數(shù)學(xué)優(yōu)化技術(shù)。它通過最小化誤差的平方和尋找數(shù)據(jù)的最佳函數(shù)匹配。利用最小二乘法可以簡(jiǎn)便地求得未知的數(shù)據(jù),并使得這些求得的數(shù)據(jù)與實(shí)際數(shù)據(jù)之間誤差的平方和為最小。最小二乘法還可用于曲線擬合。其他一些優(yōu)化問題也可通過最小化能量或最大化熵用最小二乘法來表達(dá)。

詳細(xì)原理請(qǐng)參考:https://baike.baidu.com/item/%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%98%E6%B3%95/2522346#4

四、運(yùn)用梯度下降法原理解決實(shí)際問題的python編程舉例

1、問題如下

牛頓法、梯度下降法、最小二乘法的原理以及利用它們解決實(shí)際問題的python編程

2、導(dǎo)入所需要的包

import numpy as np

import matplotlib.pyplot as plt

import matplotlib as mpl

import math

from mpl_toolkits.mplot3d import Axes3D

import warnings

3、畫出函數(shù)圖像

def f2(x1,x2):

return x1 ** 2 + 2 * x2 ** 2 -4*x1- 2 * x1*x2

X1 = np.arange(-4,4,0.2)

X2 = np.arange(-4,4,0.2)

X1, X2 = np.meshgrid(X1, X2) # 生成xv、yv,將X1、X2變成n*m的矩陣,方便后面繪圖

Y = np.array(list(map(lambda t : f2(t[0],t[1]),zip(X1.flatten(),X2.flatten()))))

Y.shape = X1.shape # 1600的Y圖還原成原來的(40,40)

%matplotlib inline

#作圖

fig = plt.figure(facecolor='w')

ax = Axes3D(fig)

ax.plot_surface(X1,X2,Y,rstride=1,cstride=1,cmap=plt.cm.jet)

ax.set_title(u'$ x1 ** 2 + 2 * x2 ** 2 -4*x1- 2 * x1*x2 $')

plt.show()

4、求極小點(diǎn)和極值點(diǎn)

# 解決中文顯示問題

mpl.rcParams['font.sans-serif'] = [u'SimHei']

mpl.rcParams['axes.unicode_minus'] = False

%matplotlib inline

# 二維原始圖像

def f2(x, y):

return x ** 2 + 2 * y ** 2 -4*x- 2 * x*y

## 偏函數(shù)

def hx1(x, y):

return 2*x-4-2*y

def hx2(x, y):

return 4*y-2*x

x1 = 4

x2 = 4

alpha = 0.001

#保存梯度下降經(jīng)過的點(diǎn)

GD_X1 = [x1]

GD_X2 = [x2]

GD_Y = [f2(x1,x2)]

# 定義y的變化量和迭代次數(shù)

y_change = f2(x1,x2)

iter_num = 0

while(iter_num < 10000) :

tmp_x1 = x1 - alpha * hx1(x1,x2)

tmp_x2 = x2 - alpha * hx2(x1,x2)

tmp_y = f2(tmp_x1,tmp_x2)

f_change = np.absolute(tmp_y - f2(x1,x2))

x1 = tmp_x1

x2 = tmp_x2

GD_X1.append(x1)

GD_X2.append(x2)

GD_Y.append(tmp_y)

iter_num += 1

print(u"最終結(jié)果為:(%.5f, %.5f, %.5f)" % (x1, x2, f2(x1,x2)))

print(u"迭代過程中X的取值,迭代次數(shù):%d" % iter_num)

print(GD_X1)

# 作圖

fig = plt.figure(facecolor='w',figsize=(20,18))

ax = Axes3D(fig)

ax.plot_surface(X1,X2,Y,rstride=1,cstride=1,cmap=plt.cm.jet)

ax.plot(GD_X1,GD_X2,GD_Y,'ko-')

ax.set_xlabel('x')

ax.set_ylabel('y')

ax.set_zlabel('z')

ax.set_title(u'函數(shù);\n學(xué)習(xí)率:%.3f; 最終解:(%.3f, %.3f, %.3f);迭代次數(shù):%d' % (alpha, x1, x2, f2(x1,x2), iter_num))

plt.show()

最終結(jié)果為:(4.00043, 2.00027, -8.00000)

迭代過程中X的取值,迭代次數(shù):10000

從上面求出的結(jié)果可以得到極小點(diǎn)為(4,2),極小值為-8

5、用Excel求上個(gè)函數(shù)的極小點(diǎn)和極小值

實(shí)驗(yàn)結(jié)果如下圖:

依舊可以清晰地看出該函數(shù)的極小點(diǎn)為(4,2),極值點(diǎn)為-8

五、使用梯度下降法和最小二乘法求解多元函數(shù)python編程舉例

1、問題如下

用梯度下降法和最小二乘法根據(jù)以下圖片的數(shù)據(jù)進(jìn)行多元線性回歸并求解相關(guān)系數(shù)

將數(shù)據(jù)寫入Excel中

2、使用梯度下降法求解多元函數(shù)

代碼如下:

import matplotlib.pyplot as plt

import numpy as np

from numpy import array

import pandas as pd

# 讀取數(shù)據(jù)文件

df=pd.read_csv("C:/Users/LOL/Desktop/店鋪多元回歸.csv")

%matplotlib notebook

df=df.values

x_data=df[:,:2]

y_data=df[:,2]

#定義學(xué)習(xí)率、斜率、截?fù)?jù)

#設(shè)方程為y=theta1*x1+theta2*x2+theta0

lr=0.00001

theta0=0

theta1=0

theta2=0

#定義最大迭代次數(shù)

epochs=10000

#定義最小二乘法函數(shù)-損失函數(shù)(代價(jià)函數(shù))

def compute_error(theta0,theta1,theta2,x_data,y_data):

totalerror=0

for i in range(0,len(x_data)):#定義一共有多少樣本點(diǎn)

totalerror=totalerror+(y_data[i]-(theta1*x_data[i,0]+theta2*x_data[i,1]+theta0))**2

return totalerror/float(len(x_data))/2

#梯度下降算法求解參數(shù)

def gradient_descent_runner(x_data,y_data,theta0,theta1,theta2,lr,epochs):

m=len(x_data)

for i in range(epochs):

theta0_grad=0

theta1_grad=0

theta2_grad=0

for j in range(0,m):

theta0_grad-=(1/m)*(-(theta1*x_data[j,0]+theta2*x_data[j,1]+theta2)+y_data[j])

theta1_grad-=(1/m)*x_data[j,0]*(-(theta1*x_data[j,0]+theta2*x_data[j,1]+theta0)+y_data[j])

theta2_grad-=(1/m)*x_data[j,1]*(-(theta1*x_data[j,0]+theta2*x_data[j,1]+theta0)+y_data[j])

theta0=theta0-lr*theta0_grad

theta1=theta1-lr*theta1_grad

theta2=theta2-lr*theta2_grad

return theta0,theta1,theta2

#進(jìn)行迭代求解 鄭州婦科醫(yī)院 http://www.120zzkd.com/

theta0,theta1,theta2=gradient_descent_runner(x_data,y_data,theta0,theta1,theta2,lr,epochs)

print('迭代次數(shù):{0} 學(xué)習(xí)率:{1}之后 a0={2},a1={3},a2={4},代價(jià)函數(shù)為{5}'.format(epochs,lr,theta0,theta1,theta2,compute_error(theta0,theta1,theta2,x_data,y_data)))

print("多元線性回歸方程為:y=",theta1,"X1+",theta2,"X2+",theta0)

迭代次數(shù):10000 學(xué)習(xí)率:1e-05之后 a0=5.3774162274868,a1=45.0533119768975,a2=-0.19626929358281256,代價(jià)函數(shù)為366.7314528822914

多元線性回歸方程為:y= 45.0533119768975 X1+ -0.19626929358281256 X2+ 5.3774162274868

3、用最小二乘法求解

代碼如下:

import numpy as np

import pandas as pd

#變量初始化

X=[]

Y=[]

B=[]

Q_e=0

Q_E=0

#從csv文件中讀取數(shù)據(jù)

def get_data(file_name):

data=pd.read_csv(file_name,header=0)

data=np.array(data)

Y=data[:,data.shape[1]-1]#預(yù)測(cè)對(duì)象位于最后一列

X=data[:,0:data.shape[1]-1]

print(X.shape)

return X,Y

return X,Y

X,Y=get_data('C:/Users/LOL/Desktop/店鋪多元回歸.csv')

X=np.mat(np.c_[np.ones(X.shape[0]),X])#為系數(shù)矩陣增加常數(shù)項(xiàng)系數(shù)

Y=np.mat(Y)#數(shù)組轉(zhuǎn)化為矩陣

B=np.linalg.inv(X.T*X)*(X.T)*(Y.T)

print("第一項(xiàng)為常數(shù)項(xiàng),其他為回歸系數(shù)",B)#輸出系數(shù),第一項(xiàng)為常數(shù)項(xiàng),其他為回歸系數(shù)

print("輸入店鋪面積,距離最近的車站距離,預(yù)測(cè)營(yíng)業(yè)額:",np.mat([1,10,80])*B ,"萬日元")#預(yù)測(cè)結(jié)果

#相關(guān)系數(shù)

Y_mean=np.mean(Y)

for i in range(Y.size):

Q_e+=pow(np.array((Y.T)[i]-X[i]*B),2)

Q_E+=pow(np.array(X[i]*B)-Y_mean,2)

R2=Q_E/(Q_e+Q_E)

print("R2的值:",R2)

(10, 2)

第一項(xiàng)為常數(shù)項(xiàng),其他為回歸系數(shù) [[65.32391639]

[41.51347826]

[-0.34088269]]

輸入店鋪面積,距離最近的車站距離,預(yù)測(cè)營(yíng)業(yè)額: [[453.1880841]] 萬日元

R2的值: [[0.94523585]]

4、使用Excel求解

由上面三種方法求到的結(jié)果對(duì)比,可以清晰地看出用最小二乘法和Excel求出的結(jié)果一致,而用梯度下降法求解有一定的誤差

六、總結(jié)

最小二乘法:能通過最小化誤差的平方和尋找數(shù)據(jù)的最佳函數(shù)匹配,但是使用有一定局限性,在回歸過程中,回歸的關(guān)聯(lián)式不可能全部通過每個(gè)回歸數(shù)據(jù)點(diǎn)。

梯度下降法:是通過梯度方向和步長(zhǎng),直接求解目標(biāo)函數(shù)的最小值時(shí)的參數(shù),越接近最優(yōu)值時(shí),步長(zhǎng)應(yīng)該不斷減小,否則會(huì)在最優(yōu)值附近來回震蕩。

網(wǎng)頁標(biāo)題:牛頓法、梯度下降法、最小二乘法的原理以及利用它們解決實(shí)際問題的python編程
轉(zhuǎn)載注明:http://jinyejixie.com/article32/pgggsc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、營(yíng)銷型網(wǎng)站建設(shè)網(wǎng)站制作、搜索引擎優(yōu)化、商城網(wǎng)站、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計(jì)公司
黄冈市| 九台市| 雅安市| 清丰县| 明水县| 湾仔区| 察雅县| 海盐县| 陆丰市| 华池县| 民乐县| 新竹县| 高陵县| 华池县| 德州市| 永州市| 古丈县| 兴文县| 安溪县| 同心县| 旺苍县| 玉环县| 古浪县| 磐安县| 岐山县| 温州市| 泌阳县| 紫阳县| 巴林右旗| 巨鹿县| 雷州市| 穆棱市| 吐鲁番市| 都昌县| 剑阁县| 阳泉市| 胶州市| 襄城县| 青岛市| 龙海市| 介休市|