【機器學習】自己手寫實現線性回歸,梯度下降 原理

導包

import numpy as npimport matplotlib.pyplot as plt
%matplotlib inlinefrom sklearn.linear_model import LinearRegression

創建數據

X = np.linspace(2,10,20).reshape(-1,1)# f(x) = wx + b
y = np.random.randint(1,6,size = 1)*X + np.random.randint(-5,5,size = 1)# 噪聲,加鹽
y += np.random.randn(20,1)*0.8plt.scatter(X,y,color =  'red')

在這里插入圖片描述

使用已有的線性回歸擬合函數

lr = LinearRegression()
lr.fit(X,y)w = lr.coef_[0,0]
b = lr.intercept_[0]
print(w,b)plt.scatter(X,y)x = np.linspace(1,11,50)plt.plot(x,w*x + b,color = 'green')

1.965481199093173 -4.644495936205775
在這里插入圖片描述

自己實現了線性回歸(簡版)

# 使用梯度下降解決一元一次的線性問題:w,b
class LinearModel(object):def __init__(self):self.w = np.random.randn(1)[0]self.b = np.random.randn(1)[0]
#     數學建模:將數據X和目標值關系用數學公式表達def model(self,x):#model 模型,f(x) = wx + breturn self.w*x + self.bdef loss(self,x,y):#最小二乘得到缺失值cost = (y - self.model(x))**2
#         梯度就是偏導數,求解兩個未知數:w,bgradient_w = 2*(y - self.model(x))*(-x)gradient_b = 2*(y - self.model(x))*(-1)return cost,gradient_w,gradient_b
#     梯度下降def gradient_descent(self,gradient_w,gradient_b,learning_rate = 0.1):
#         更新w,bself.w -= gradient_w*learning_rateself.b -= gradient_b*learning_rate
#     訓練fitdef fit(self,X,y):count = 0 #算法執行優化了3000次,退出tol = 0.0001last_w = self.w + 0.1last_b = self.b + 0.1length = len(X)while True:if count > 3000:#執行的次數到了break
#           求解的斜率和截距的精確度達到要求if (abs(last_w - self.w) < tol) and (abs(last_b - self.b) < tol):breakcost = 0gradient_w = 0gradient_b = 0for i in range(length):cost_,gradient_w_,gradient_b_ = self.loss(X[i,0],y[i,0])cost += cost_/lengthgradient_w += gradient_w_/lengthgradient_b += gradient_b_/length
#             print('---------------------執行次數:%d。損失值是:%0.2f'%(count,cost))last_w = self.wlast_b = self.b# 更新截距和斜率self.gradient_descent(gradient_w,gradient_b,0.01)count+=1def result(self):return self.w,self.b
取值的時候X 是二維的所以 取出X,y數據中的第一個數
self.loss(X[i,0],y[i,0])
在這里插入圖片描述

使用自己實現的線性回歸擬合函數

lm = LinearModel()lm.fit(X,y)w_,b_ = lm.result()plt.scatter(X,y,c = 'red')plt.plot(x,1.9649*x - 4.64088,color = 'green')plt.plot(x,w*x + b,color = 'blue')plt.title('自定義的算法擬合曲線',fontproperties = 'KaiTi')

Text(0.5, 1.0, ‘自定義的算法擬合曲線’)
在這里插入圖片描述

多元的線性回歸

import numpy as npimport matplotlib.pyplot as plt
%matplotlib inlinefrom sklearn.linear_model import LinearRegression

其實相似

# 一元二次
# f(x) = w1*x**2 + w2*x + b# 二元一次
# f(x1,x2) = w1*x1 + w2*x2 + bX = np.linspace(0,10,num = 500).reshape(-1,1)X = np.concatenate([X**2,X],axis = 1)
X.shape

(500, 2)

w = np.random.randint(1,10,size = 2)
b = np.random.randint(-5,5,size = 1)
# 矩陣乘法
y = X.dot(w) + b
plt.plot(X[:,1],y,color = 'r')plt.title('w1:%d.w2:%d.b:%d'%(w[0],w[1],b[0]))

Text(0.5, 1.0, ‘w1:1.w2:1.b:4’)
在這里插入圖片描述

使用sklearn自帶的算法,預測

lr = LinearRegression()lr.fit(X,y)print(lr.coef_,lr.intercept_)plt.scatter(X[:,1],y,marker = '*')x = np.linspace(-2,12,100)plt.plot(x,1*x**2 + 6*x + 1,color = 'green')

在這里插入圖片描述
[1. 1.] 3.999999999999993

自己手寫的線性回歸,擬合多屬性,多元方程

# epoch 訓練的次數,梯度下降訓練多少
def gradient_descent(X,y,lr,epoch,w,b):
#     一批量多少,長度batch = len(X)for i in range(epoch):
#         d_loss:是損失的梯度d_loss = 0
#         梯度,斜率梯度dw = [0 for _ in range(len(w))]
#        截距梯度db = 0for j in range(batch):y_ = 0 #預測的值 預測方程 y_ = f(x) = w1*x1 + w2*x2 + b#求預測值y_,分開了 先*w 再加bfor n in range(len(w)):y_ += X[j][n]*w[n]y_ += b#再利用最小二乘法 求導 得出損失值 再求導得到梯度 d_loss #再將梯度求導 y_ = f(x) = w1*x1 + w2*x2 + b 來對w1求導結果為就為 X[j][n] 再乘 d_loss 求dw的值 可能有點亂。#db 一樣 根據b來對y_ 求導得1
#            平方中求導兩種情況相同 ,
#             (y - y_)**2 -----> 2*(y-y_)*(-1)
#             (y_- y)**2  -----> 2*(y_ - y)*(1)d_loss = -(y[j] - y_)#再求w的梯度  就是對y[j]求導 這個系數2 不影響結果#結果為 w1' =  X[j][n]*d_loss#cost = (y - (w1*X[j][0] + w2*X[j][1] +…… + b)**2          #w1梯度,導數# -2*(y - y_) * X[j][0]for n in range(len(w)):dw[n] += X[j][n]*d_loss/float(batch)db += 1*d_loss/float(batch)
#         更新一下系數和截距,梯度下降for n in range(len(w)):w[n] -= dw[n]*lr[n]b -= db*lr[0]return w,b
lr = [0.0001,0.0001]
w = np.random.randn(2)
b = np.random.randn(1)[0]
w_,b_ = gradient_descent(X,y,lr,5000,w,b)
print(w_,b_)

[1.00325157 1.22027686] 2.1550745865631895

plt.scatter(X[:,1],y,marker = '*')x = np.linspace(-2,12,100)f = lambda x:w_[0]*x**2 + w_[1]*x + b_plt.plot(x,f(x),color = 'green')

在這里插入圖片描述

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456124.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456124.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456124.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

跨站的藝術-XSS Fuzzing 的技巧

作者 | 張祖優(Fooying) 騰訊云 云鼎實驗室 對于XSS的漏洞挖掘過程&#xff0c;其實就是一個使用Payload不斷測試和調整再測試的過程&#xff0c;這個過程我們把它叫做Fuzzing&#xff1b;同樣是Fuzzing&#xff0c;有些人挖洞比較高效&#xff0c;有些人卻不那么容易挖出漏洞…

H.264/AVC視頻壓縮編碼標準的新進展

H .264/AVC是由ISO/IEC與ITU-T組成的聯合視頻組(JVT)制定的新一代視頻壓縮編碼標準&#xff0c;于2003年5月完成制訂。相對于先前的標準&#xff0c;H.264/AVC無論在壓縮效率、還是在網絡適應性方面都有明顯的提高&#xff0c;因此&#xff0c;業界普遍預測其將在未來的視頻應用…

python注釋及語句分類

注釋 注釋就是&#xff1a;注解&#xff0c;解釋。 主要用于在代碼中給代碼標識出相關的文字提示(提高代碼的可讀性) 或 調試程序。Python中注釋分為兩類&#xff1a; 1.單行注釋 &#xff1a; 單行注釋以 # 號開頭&#xff0c;在當前行內&#xff0c;# 號后面的內容就是注釋…

【機器學習】回歸誤差:MSE、RMSE、MAE、R2、Adjusted R2 +方差、協方差、標準差(標準偏差/均方差)、均方誤差、均方根誤差(標準誤差)、均方根解釋

我們通常采用MSE、RMSE、MAE、R2來評價回歸預測算法。 1、均方誤差&#xff1a;MSE&#xff08;Mean Squared Error&#xff09; 其中&#xff0c;為測試集上真實值-預測值。 def rms(y_test, y): return sp.mean((y_test - y) ** 2) 2、均方根誤差&#xff1a;RMSE&#xff…

大院大所合作對接會7天倒計時!亮點搶先看

為什么80%的碼農都做不了架構師&#xff1f;>>> 推動產業特色發展&#xff0c;提升企業自主創新能力&#xff0c;加快成果轉化落地&#xff0c;繼江蘇發展大會之后&#xff0c;圍繞“聚力創新”&#xff0c;7月5日-6日&#xff0c;中國江蘇大院大所合作對接會暨第六…

通過取父級for循環的i來理解閉包,iife,匿名函數

在使用for循環的時候&#xff0c;假如需要在循環體中添加一個匿名函數處理其他的事情&#xff0c;那么&#xff0c;在這個匿名函數內&#xff0c;如果需要用到對應的i&#xff0c;因為閉包的緣故&#xff0c;循環體循環結束后才返回i&#xff0c;所以i最終為最后一次的數值。閉…

H.264將普及 視頻編碼講壇之H.264前世今生

隨著HDTV等高清資源的興起&#xff0c;H.264這個規范頻頻出現在我們眼前&#xff0c;HD-DVD和藍光DVD均計劃采用這一標準進行節目制作。而且自2005年下半年以來&#xff0c;無論是NVIDIA還是ATI都把支持H.264硬件解碼加速作為自己最值得夸耀的視頻技術。而數碼播放器領域也吹來…

python命令方式和關鍵字

常用命名方式 不管是文件&#xff0c;變量&#xff0c;函數或類名等等&#xff0c;命名都要遵守一個基本規范&#xff0c;就是&#xff0c;命名要有意義&#xff0c;易讀易懂。因此&#xff0c;兩種主流的命名方式出現了&#xff0c;他們分別是駝峰命名方法 和 使用下劃線分隔…

【機器學習】嶺回歸

import numpy as npimport matplotlib.pyplot as plt %matplotlib inlinefrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import mean_squared_error,r2_score from sklearn import datasets# CV crosss validation &#xff1a;交叉驗證 from skl…

P1057 傳球游戲

題目描述 上體育課的時候&#xff0c;小蠻的老師經常帶著同學們一起做游戲。這次&#xff0c;老師帶著同學們一起做傳球游戲。 游戲規則是這樣的&#xff1a;n個同學站成一個圓圈&#xff0c;其中的一個同學手里拿著一個球&#xff0c;當老師吹哨子時開始傳球&#xff0c;每個同…

Keepalived 添加腳本配置監控haproxy方案

作者&#xff1a;風過無痕-唐出處&#xff1a;http://www.cnblogs.com/tangyanbo/ 上一篇文章已經講到了keepalived實現雙機熱備&#xff0c;且遺留了一個問題 master的網絡不通的時候&#xff0c;可以立即切換到slave&#xff0c;但是如果只是master上的應用出現問題的時候&am…

H.264編解碼標準的核心技術(提供相關流程圖)

最近在學習H.264編解碼知識&#xff0c;上網搜了不少資料看&#xff0c;發現大多數中文資料中都缺少相應的圖片&#xff0c;例如編解碼流程圖、編碼模板等&#xff0c;這對加深理解是很有幫助 的。木有辦法&#xff0c;只好回去潛心閱讀《H.264_MPEG-4_Part_10_White_Paper》&a…

【機器學習】總結:線性回歸求解中梯度下降法與最小二乘法的比較

在線性回歸算法求解中&#xff0c;常用的是最小二乘法與梯度下降法&#xff0c;其中梯度下降法是最小二乘法求解方法的優化&#xff0c;但這并不說明梯度下降法好于最小二乘法&#xff0c;實際應用過程中&#xff0c;二者各有特點&#xff0c;需結合實際案例具體分析。 最后有…

struts2學習(3)struts2核心知識II

一、struts.xml配置&#xff1a;                                                   1.分模塊配置方法&#xff1a; 比如某個系統多個模塊&#xff0c;我們把資產管理模塊和車輛管理模塊&#xff0c;分開&#xff0c;在總…

【機器學習】邏輯斯蒂回歸概率計算和手動計算對比

二分類&#xff0c;邏輯斯蒂回歸概率計算 import numpy as np from sklearn import datasets from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_splitX,y datasets.load_iris(True)cond y!2X X[cond] y y[cond]resul…

WPF快速指導2:模板

WPF快速指導2&#xff1a;模板 本文摘要&#xff1a; 1&#xff1a;模板作用&#xff1b; 2&#xff1a;樣式模板&#xff1b; 3&#xff1a;數據模板&#xff1b; 4&#xff1a;如何使用ControlTemplate&#xff1b; 5&#xff1a;如何使用DataTempla…

五個最佳媒體格式轉換器

我們經常會遇到下載的視頻文件格式不對&#xff0c;無法在其他播放設備&#xff08;如手機、DVD&#xff09;中使用的問題&#xff0c;現在&#xff0c;我們介紹五個功能強大且易于使用的媒體轉換器&#xff0c;用于轉換不同類型的視頻文件。   Super (Windows) Super是一個免…

【機器學習】六種算法在人臉補全中的應用比較(K緊鄰,線性,決策樹,嶺回歸,套索回歸,ElasticNet)

需求&#xff1a; 根據人的上半邊臉預測下半邊臉&#xff0c;用各種算法取得的結果與原圖比較 思考&#xff1a; 這是一個回歸問題&#xff0c;不是分類問題&#xff08;人臉數據不固定&#xff09; 數據集一共包含40個人&#xff0c;每一個人10張照片&#xff0c;分布規律 每…

性能優化之NSDateFormatter

為什么要優化NSDateFormatter&#xff1f;首先&#xff0c;過度的創建NSDateFormatter用于NSDate與NSString之間轉換&#xff0c;會導致App卡頓&#xff0c;打開Profile工具查一下性能&#xff0c;你會發現這種操作占CPU比例是非常高的。據官方說法&#xff0c;創建NSDateForma…

QuickTime文件格式解析

QuickTime文件格式解析Peter Lee 2008-06-14 一、簡介 QuickTime是Apple公司開發的一套完整的多媒體平臺架構&#xff0c;可以用來進行多種媒體的創建&#xff0c;生產&#xff0c;和分發&#xff0c;并為這一過程提供端到端的支持&#xff1a;包括媒體的實時捕捉&#xff0c;…