線回與非線回 梯度下降法的一元線性回歸

2021-10-03 00:15:08 字數 2771 閱讀 6051

對於線性回歸問題,通常有兩種方法可以解決,即梯度下降法和標準方程法,兩者各有優缺點

梯度下降法對於引數多的回歸方程仍然適用,但並不是每次都能達到最優解,神經網路也需要梯度下降法來解決

標準方程法適用於引數少的回歸方程,但是時間複雜度較高

首先來看一下梯度下降法的**

import numpy as np

import matplotlib.pyplot as plt

#這兩個資料庫是經常在機器學習中使用的,numpy通常用於科學計算等

#matplotlib是畫圖工具,簡寫為np和plt

#載入資料

data = np.genfromtxt(

"data.csv"

,delimiter=

",")

#使用genfromtxt函式載入data資料,使用逗號","來進行資料分隔

x_data = data[:,

0]#將資料進行切割,x軸的資料取每一行的第一列

y_data = data[:,

1]#將資料進行切割,y軸的資料取每一行的第二列

plt.scatter(x_data,y_data)

#使用scatter函式進行描點

plt.show(

)#展示描點結果

展示結果如下:

#學習率,學習率越大步長越大,越小步長也越小

lr=0.0001

#截距b=

0#斜率k=0

#最大迭代次數

epochs =

50#最小二乘法

defcompute_error

(b,k,x_data,y_data)

:#定義了4個引數

totalerror =

0for i in

range(0

,len

(x_data)):

totalerror+=

(y_data[i]

-(k*x_data[i]

+b))**2

#這一步在計算j(theta)的值

return totalerror/

float

(len

(x_data))/

2.0def

gradient_descent_runner

(x_data,y_data,b,k,lr,epochs)

:#算出一共有多少個資料

m=float

(len

(x_data)

)#迴圈epochs次來進行訓練

for i in

range

(epochs)

: b_grad =

0 k_grad =

0#計算梯度的總和再求平均

for j in

range(0

,len

(x_data)):

b_grad +=(1

/m)*((

(k*x_data[j]

)+ b)

-y_data[j]

k_grad +=(1

/m)*x_data[j]*(

((k*x_data[j]

)+b)

-y_data[j]

)#以上兩步都是求導後的結果,即對j(thta)進行求導

#求導過程就不展示了

#同步更新b和k

b=b-

(lr*b_grad)

k=k-

(lr*k_grad)

#下面這一步是為了展示更新過程,如果不需要也可以注釋掉

if i%5==

0:print

("epochs:"

,i) plt.plot(x_data,y_data,

'b.'

) plt.plot(x_data,k*x_data + b,

'r')

plt.show(

)return b,k

#下面操作利用format(格式化)函式來列印出結果

print

("strating b=,k=,error = "

.format

(b,k,compute_error(b,k,x_data,y_data)))

#列印一元線性回歸的引數初始值

print

("running..."

)#呼叫更新函式進行同步更新,並將b,k的值弄好

b,k=gradient_descent_runner(x_data,y_data,b,k,lr,epochs)

#列印出最終結果

print

("afteriterations b = ,k=,error = "

.format

(epochs,b,k,compute_error(b,k,x_data,y_data)))

#畫圖plt.plot(x_data,y_data,

最後的效果還是比較滿意!

線回與非線回 sklearn 多元線性回歸

前面用自寫函式解決了多元問題,現在用sklearn庫來解決多元線性問題 老朋友,不介紹了 import numpy as np from numpy import genfromtxt 把線性回歸模型庫單獨匯出來 from sklearn import linear model 把畫圖工具庫匯出來 ...

1 回歸 一元線性回歸 代價函式 梯度下降法

1 回歸是達爾文表弟發現的,就是說人類總體有乙個平均身高。那個高個子生的孩子都個高,矮的孩子生的矮。但是他們的下一代大部分都往平均身高長,也就是說特別高的人,他們的孩子會很高,但是往往比他們自己矮。特別矮的人他們生的孩子會矮一些,但是會比自己的父母高,他們都有這種趨勢。表弟管這個叫做回歸。2 一元線...

計算機小碩 留在一線城市還是回安逸的小城?

秋招的序幕已經微微拉開,又到了畢業生每年最煎熬的時刻,讓我們舉起酒杯,為這個時刻的到來發自內心地祝賀,祝賀,祝賀!每年到了這個時刻,相信很多人都會糾結乙個問題,到底是應該留在一線城市過著狗一樣的生活,還是回到家鄉的小城像豬一樣地生活呢?這也是最近特別困擾我的問題,但人的成長就是這樣的吧,我們總是在無...