線性回歸的原理不再贅述,本文給出了乙個簡單的使用梯度下降的線性回歸模擬。
import numpy as np
def weightsupdate(data,w,b,learning_rate=0.01):
for x0,y0 in data:
y=np.dot(x0,w)+b
w_gradient = (y - y0) * x0.t#求w的梯度
b_gradient=(y-y0)[0];#求b的梯度;取標量
w-=w_gradient*learning_rate#權值更新
b-=b_gradient
loss=0.5*np.square(y-y0)
return [w,b,loss[0][0]]
def generatedata(w,b,datanum=10):#根據w,b生成資料
data =
for i in range(datanum):
noise = np.random.randn(1) * 0.01
x0 = np.random.randn(1,w.shape[0])
y0 = np.dot(x0, w) + b+noise
x = [x0, y0]
return data
def linearregressiontrain(data):
w0=np.random.randn(data[0][0].shape[1],1)
b0=np.random.randn(1)
for i in range(1000):
w0, b0,loss = weightsupdate(data, w0, b0,0.01)
if(i%100==0):
print(loss)
return [w0,b0]
#y=2*x1+3*x2+1
w=np.array([[2],[3],[4],[5]])
b=np.array([1])
data=generatedata(w,b)
w0,b0=linearregressiontrain(data)
print(" w=", w,'\n',"w0=", w0, '\n',"b=", b, '\n',"b0=", b0)
實現的比較簡單,效果還不錯
如何使用python numpy中的陣列複製
在使用python時我們經常會處理陣列,有的時候是複製有的時候不是,這裡也是初學者最容易誤解的地方,簡單講,可以分為下面三種情況 import numpy as np a np.arange 12 a為乙個序列 b a 沒有建立新的物件 print a的shape為 a.shape 輸出a的尺寸 p...
對python numpy陣列中冒號的使用方法詳解
python中冒號實際上有兩個意思 1.預設全部選擇程式設計客棧 2.指定範圍。下面看例子 定義陣列 x array 1,2,www.cppcns.com3,4 5,6,7,8 9,10,11,12 程式設計客棧13,14,15,16 17,18,19,20 輸出為5x4二維陣列 第一種意思,預設全...
Python Numpy陣列儲存
numpy提供了幾種資料儲存的方法。以3 4陣列a為例 這種方法只能儲存為二進位制檔案,且不能儲存當前資料的行列資訊,檔案字尾不一定非要是bin,也可以為txt,但不影響儲存格式,都是二進位制。這種儲存方法對資料讀取有要求,需要手動指定讀出來的資料的的dtype,如果指定的格式與儲存時的不一致,則讀...