日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

利用梯度下降法求解一元线性回归和多元线性回归

發(fā)布時間:2023/12/1 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用梯度下降法求解一元线性回归和多元线性回归 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 原理以及公式
    • 【1】一元線性回歸問題
    • 【2】多元線性回歸問題
    • 【3】學習率
    • 【4】流程分析(一元線性回歸)
    • 【5】流程分析(多元線性回歸)
      • 歸一化原理以及每種歸一化適用的場合
  • 一元線性回歸代碼以及可視化結果
  • 多元線性回歸代碼以及可視化結果
  • 總結


原理以及公式

【1】一元線性回歸問題

原函數(shù)是一元函數(shù)(關于x),它的損失函數(shù)是二元函數(shù)(關于w和b)

這里介紹兩種損失函數(shù):平方損失函數(shù)和均方差損失函數(shù)

【2】多元線性回歸問題

X和W都是m+1維的向量,損失函數(shù)是高維空間中的凸函數(shù)

【3】學習率

學習率屬于超參數(shù)(超參數(shù):在開始學習之前設置,不是通過訓練得到的)
可以選擇在迭代次數(shù)增加時減少學習率大小.
下圖是學習率正常或較小、稍大、過大的迭代圖。

【4】流程分析(一元線性回歸)

過程分析:

1、加載樣本數(shù)據(jù)x,y
2、設置超參數(shù)學習率,迭代次數(shù)
3、設置模型參數(shù)初值w0, b0
4、訓練模型w, b
5、結果可視化

流程圖:

【5】流程分析(多元線性回歸)

歸一化原理以及每種歸一化適用的場合

線性歸一化:適用于樣本分布均勻且集中的情況,如果最大值(或者最小值)不穩(wěn)定,和絕大數(shù)樣本數(shù)據(jù)相差較大,使用這種方法得到的結果也不穩(wěn)定.為了抑制這個問題,在實際問題中可以用經(jīng)驗值來代替最大值和最小值
標準差歸一化適用于樣本近似正態(tài)分布,或者最大最小值未知的情況,有時當最大最小值處于孤立點時也可以使用標準差歸一化
非線性映射歸一化,通常用于數(shù)據(jù)分化較大的情況(有的很大有的很小)
總結:樣本屬性歸一化需要根據(jù)屬性樣本分布規(guī)律定制

過程分析:

加載樣本數(shù)據(jù)area,room,price
數(shù)據(jù)處理歸一化,X,Y
設置超參數(shù)學習率,迭代次數(shù)
設置模型參數(shù)初值W0(w0,w1,w2)
訓練模型W
結果可視化

一元線性回歸代碼以及可視化結果

#解析法實現(xiàn)一元線性回歸 # #Realization of one variable linear regression by analytic method #導入庫 import numpy as np import matplotlib.pyplot as plt #設置字體 plt.rcParams['font.sans-serif'] =['SimHei'] #加載樣本數(shù)據(jù) x=np.array([137.97,104.50,100.00,124.32,79.20,99.00,124.00,114.00,106.69,138.05,53.75,46.91,68.00,63.02,81.26,86.21]) y=np.array([145.00,110.00,93.00,116.00,65.32,104.00,118.00,91.00,62.00,133.00,51.00,45.00,78.50,69.65,75.69,95.30]) #設置超參數(shù),學習率 learn_rate=0.00001 #迭代次數(shù) iter=100 #每10次迭代顯示一下效果 display_step=10 #設置模型參數(shù)初值 np.random.seed(612) w=np.random.randn() b=np.random.randn() #訓練模型 #存放每次迭代的損失值 mse=[] for i in range(0,iter+1):#求偏導dL_dw=np.mean(x*(w*x+b-y))dL_db=np.mean(w*x+b-y)#更新模型參數(shù)w=w-learn_rate*dL_dwb=b-learn_rate*dL_db#得到估計值pred=w*x+b#計算損失(均方誤差)Loss=np.mean(np.square(y-pred))/2mse.append(Loss)#顯示模型#plt.plot(x,pred)if i%display_step==0:print("i:%i,Loss:%f,w:%f,b:%f"%(i,mse[i],w,b)) #模型和數(shù)據(jù)可視化 plt.figure(figsize=(20,4)) plt.subplot(1,3,1) #繪制散點圖 #張量和數(shù)組都可以作為散點函數(shù)的輸入提供點坐標 plt.scatter(x,y,color="red",label="銷售記錄") plt.scatter(x,pred,color="blue",label="梯度下降法") plt.plot(x,pred,color="blue")#設置坐標軸的標簽文字和字號 plt.xlabel("面積(平方米)",fontsize=14) plt.xlabel("價格(萬元)",fontsize=14)#在左上方顯示圖例 plt.legend(loc="upper left")#損失變化可視化 plt.subplot(1,3,2) plt.plot(mse) plt.xlabel("迭代次數(shù)",fontsize=14) plt.ylabel("損失值",fontsize=14) #估計值與標簽值比較可視化 plt.subplot(1,3,3) plt.plot(y,color="red",marker="o",label="銷售記錄") plt.plot(pred,color="blue",marker="o",label="梯度下降法") plt.legend() plt.xlabel("sample",fontsize=14) plt.ylabel("price",fontsize=14) #顯示整個繪圖 plt.show()

多元線性回歸代碼以及可視化結果

#解析法實現(xiàn)多元線性回歸 #Realization of multiple linear regression by analytic method #導入庫與模塊 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D #=======================【1】加載樣本數(shù)據(jù)=============================================== area=np.array([137.97,104.50,100.00,124.32,79.20,99.00,124.00,114.00,106.69,138.05,53.75,46.91,68.00,63.02,81.26,86.21]) room=np.array([3,2,2,3,1,2,3,2,2,3,1,1,1,1,2,2]) price=np.array([145.00,110.00,93.00,116.00,65.32,104.00,118.00,91.00,62.00,133.00,51.00,45.00,78.50,69.65,75.69,95.30]) num=len(area) #樣本數(shù)量 #=======================【2】數(shù)據(jù)處理=============================================== x0=np.ones(num) #歸一化處理,這里使用線性歸一化 x1=(area-area.min())/(area.max()-area.min()) x2=(room-room.min())/(room.max()-room.min()) #堆疊屬性數(shù)組,構造屬性矩陣 #從(16,)到(16,3),因為新出現(xiàn)的軸是第二個軸所以axis為1 X=np.stack((x0,x1,x2),axis=1) print(X) #得到形狀為一列的數(shù)組 Y=price.reshape(-1,1) print(Y) #=======================【3】設置超參數(shù)=============================================== learn_rate=0.001 #迭代次數(shù) iter=500 #每10次迭代顯示一下效果 display_step=50 #=======================【4】設置模型參數(shù)初始值=============================================== np.random.seed(612) W=np.random.randn(3,1) #=======================【4】訓練模型============================================= mse=[] for i in range(0,iter+1):#求偏導dL_dW=np.matmul(np.transpose(X),np.matmul(X,W)-Y) #XT(XW-Y)#更新模型參數(shù)W=W-learn_rate*dL_dW#得到估計值PRED=np.matmul(X,W)#計算損失(均方誤差)Loss=np.mean(np.square(Y-PRED))/2mse.append(Loss)#顯示模型#plt.plot(x,pred)if i % display_step==0:print("i:%i,Loss:%f"%(i,mse[i])) #=======================【5】結果可視化============================================ plt.rcParams['font.sans-serif'] =['SimHei'] plt.figure(figsize=(12,4)) #損失變化可視化 plt.subplot(1,2,1) plt.plot(mse) plt.xlabel("迭代次數(shù)",fontsize=14) plt.ylabel("損失值",fontsize=14) #估計值與標簽值比較可視化 plt.subplot(1,2,2) PRED=PRED.reshape(-1) plt.plot(price,color="red",marker="o",label="銷售記錄") plt.plot(PRED,color="blue",marker="o",label="預測房價") plt.xlabel("sample",fontsize=14) plt.ylabel("price",fontsize=14) plt.legend() plt.show()

總結

注意點:選擇歸一化方式


喜歡的話點個贊和關注唄!

總結

以上是生活随笔為你收集整理的利用梯度下降法求解一元线性回归和多元线性回归的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。