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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

通过简单的线性回归理解机器学习的基本原理

發布時間:2025/3/20 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通过简单的线性回归理解机器学习的基本原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在本文中,我將使用一個簡單的線性回歸模型來解釋一些機器學習(ML)的基本原理。線性回歸雖然不是機器學習中最強大的模型,但由于容易熟悉并且可解釋性好,所以仍然被廣泛使用。簡單地說,線性回歸用于估計連續或分類數據之間的線性關系。

我將使用X和y來表示變量。如果你喜歡更具體的東西,可以想象y是銷售額,X是廣告支出,我們想估計廣告花費如何影響銷售額。我將展示一個線性回歸如何學習繪制最適合通過這些數據的線:

機器學到了什么?

機器學習最基礎的問題是:“機器(即統計模型)實際上學到了什么?”

這取決于不同的模型,但簡單來說,模型學習函數f,使f(X)映射到y。換句話說,模型學習如何采取X(即特征,或者說自變量(S)),預測y(目標,或者說因變量)。

在簡單的線性回歸的情況下(y ~ b0 + b1 * X,其中X是列)的模型“學習”兩個參數:

  • B0:偏置(或者說,截距)
  • b1:斜率

當X為0時的y水平坐標等于偏置(即廣告支出為零時的銷售額的值),斜率是X中每單位增長或減少對y預測增長或減少的比率(即,每英鎊花在廣告上會帶來多少銷售額的增長)。兩個參數都是標量。

一旦模型學習到這些參數,你就可以用給定X值來計算y的估計值。換句話說,當你不知道y是什么時候,你可以用這些它們來預測y的值,這是一個預測模型!

學習參數:成本函數

學習LR模型的參數有幾種方法,我將著重于最好說明統計學習的方法: 最小化成本函數。

請記住,機器學習的重點是從數據中學習。我們用一個簡單的比喻來說明。對于孩子,我們通常會通過告知他禁止做什么事情,或者因為做了不該做的事情而讓他受到懲罰的方式,教會他理解正確的行為。例如,你可以想象一個四歲的孩子坐在火旁保暖,但因為他不知道火的危險,她把手指放了進去燒傷了。下一次他坐在火旁,他就不會因為玩火導致燒傷,但是也許他會因為坐得離火太近,太熱,不得不離開。第三次他坐在火旁邊,發現有一個距離讓她既可以保持溫暖,也不會讓她受到任何危險。換句話說,通過經驗和反饋,孩子掌握了與火的最佳距離。這個例子中的火的熱量是一個成本函數。

在機器學習中,使用成本函數來估計模型的表現。簡而言之,成本函數是衡量模型在估計X和Y之間關系方面的錯誤程度的度量。成本函數(你也可以參考損失函數或誤差函數)可以通過迭代地運行模型來估計的對“地面真值”(即y的已知值)的預測。

因此,ML模型的目標是找到使成本函數最小化的參數,權重或結構。

最小化成本函數:梯度下降

既然我們知道模型是通過最小化成本函數來學習的,那么你可能想知道成本函數是如何最小化的,那么讓我們開始介紹梯度下降。梯度下降是一種有效的優化算法,試圖找到函數的局部或全局最小值。

梯度下降使模型能夠學習模型應該采取的梯度或方向,以減少誤差(實際y與預測y之間的差異)。簡單線性回歸示例中的方向是指如何調整或修正模型參數b0和b1以進一步降低成本函數。隨著模型迭代,它逐漸收斂到最小值,繼續對參數做更進一步的調整只能產生很小(甚至沒有)的損失變化。

這個過程是整個ML過程不可或缺的一部分,它極大地加快了學習過程。梯度下降過程的替代方案可能是粗暴地窮舉所有可能的參數組合,直到確定使成本最小化的組為止。顯而易見,這是不可行的。因此,梯度下降使得學習過程能夠對所學習的估計進行糾正更新,將模型導向最佳參數組合。

在線性回歸模型中觀察學習

為了在線性回歸中觀察學習,我手動設置參數b0和b1并使用模型從數據中學習這些參數。換句話說,我們知道X與y之間關系的地面真值,并且可以通過參數迭代校正對成本的回應來觀察學習這種關系的模型。

01 library(dplyr) 02 library(ggplot2) 0304 n <- 200 # number of observations 05 bias <- 4 06 slope <- 3.5 07 dot <- `%*%` # defined for personal preference 0809 x <- rnorm(n) * 2 10 x_b <- cbind(x, rep(1, n)) 11 y <- bias + slope * x + rnorm(n) 12 df <- data_frame(x = x, y = y) 1314 learning_rate <- 0.05 15 n_iterations <- 100 16 theta <- matrix(c(20, 20)) 1718 b0 <- vector("numeric", length = n_iterations) 19 b1 <- vector("numeric", length = n_iterations) 20 sse_i <- vector("numeric", length = n_iterations)

這里我定義了偏置和斜率(分別等于4和3.5)。我也為X添加了一個列(用于支持矩陣乘法)。我也給y添加了一些高斯噪聲來掩蓋真正的參數,即創建完全隨機的誤差。現在我們有一個包含兩個變量X和y的dataframe,這個變量似乎有一個正的線性趨勢(即y隨著增加X值而增加)。

接下來我定義了學習率,它控制每個梯度的步驟大小。如果這太大,模型可能會錯過函數的局部最小值。如果太小,模型會需要很長時間才能收斂。Theta存儲參數b0和b1,它們用隨機值初始化。n_iterations控制模型迭代和更新值的次數。最后,在模型的每次迭代中,我創建了一些占位符來捕獲b0,b1的值和誤差平方和(SSE)。

這里的SSE是成本函數,它僅僅是預測y和實際y之間的平方差的和(即殘差)。

現在,我們運行循環。在每次迭代中,模型將根據Theta值預測y,計算殘差,然后應用梯度下降估計校正梯度,然后使用這些梯度更新theta的值,重復此過程100次。當循環結束時,我創建一個dataframe來存儲學習的參數和每次迭代的損失。

01 for (iteration in seq_len(n_iterations)) { 0203residuals_b <- dot(x_b, theta) - y 04gradients <- 2/n * dot(t(x_b), residuals_b) 05theta <- theta - learning_rate * gradients 0607sse_i[[iteration]] <- sum((y - dot(x_b, theta))**2) 08b0[[iteration]] <- theta[2] 09b1[[iteration]] <- theta[1] 1011 } 1213 model_i <- data.frame(model_iter = 1:n_iterations, 14sse = sse_i, 15b0 = b0, 16b1 = b1)

當迭代完成后,我們可以繪制超過模型估計的線。

01 p1 <- df %>% 02ggplot(aes(x=x, y=y)) + 03geom_abline(aes(intercept = b0, 04slope = b1, 05colour = -sse, 06frame = model_iter), 07data = model_i, 08alpha = .50 09) + 10geom_point(alpha = 0.4) + 11geom_abline(aes(intercept = b0, 12slope = b1), 13data = model_i[100, ], 14alpha = 0.5, 15size = 2, 16colour = "dodger blue") + 17geom_abline(aes(intercept = b0, 18slope = b1), 19data = model_i[1, ], 20colour = "red", 21alpha = 0.5, 22size = 2) + 23scale_color_continuous(low = "red", high = "grey") + 24guides(colour = FALSE) + 25theme_minimal() 2627 p2 <- model_i[1:30,] %>% 28ggplot(aes(model_iter, sse, colour = -sse)) + 29geom_point(alpha = 0.4) + 30theme_minimal() + 31labs(x = "Model iteration", 32y = "Sum of Sqaured errors") + 33scale_color_continuous(low = "red", high = "dodger blue") + 34guides(colour = FALSE)

首先要注意的是粗的紅線。這是從b0和b1的初始值估計的線。你可以看到,這并不適合數據點,正因為如此,它有最高的SSE。但是,你會看到逐漸向數據點移動的線,直到找到最適合的線(粗藍線)。換句話說,在每次迭代時,模型為b0和b1學習了更好的值,直到找到最小化成本函數的值為止。模型學習b0和b1的最終值分別是3.96和3.51,因此非常接近我們設置的參數4和3.5。

我們還可以在模型的迭代中看到SSE的減少。在收斂和穩定之前,它在早期迭代中急劇下降。

我們現在可以使用的B0和B1存儲在theta的學習值為新的X值預測y值。

01 predict_from_theta < - function(x){ 0203x < - cbind(x,rep(1,length(x))) 04點(x,theta) 0506 } 0708 predict_from_theta(rnorm(10)) 09[,1 ] 10 [ 1,] - 1.530065 11 [ 2,] 8.036859 12 [ 3,] 6.895680 13 [ 4,] 3.170026 14 [ 5,] 4.905467 15 [ 6,] 2.644702 16 [ 7,] 12.555390 17 [ 8,] 1.172425 18 [ 9,] 3.776509 19 [ 10,] 4.849211

總結

本文介紹了一種簡要理解機器學習的方法。毫無疑問,機器學習還有很多知識本文中沒有被提到,但是了解“底層”的基本原理獲得初步的直覺可以大大提高你對更復雜模型的理解。

本文由AiTechYun編譯,轉載請注明出處。更多內容關注微信公眾號atyun_com 或訪問www.atyun.com

總結

以上是生活随笔為你收集整理的通过简单的线性回归理解机器学习的基本原理的全部內容,希望文章能夠幫你解決所遇到的問題。

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