【深度學習】圖形模型基礎(5):線性回歸模型第二部分:單變量線性回歸模型

1.引言

在統計學與機器學習的廣闊領域中,線性回歸作為一種基礎而強大的預測技術,其核心在于通過輸入變量(或稱預測器、自變量)來估計輸出變量(響應變量、因變量)的連續值。本章聚焦于線性回歸的一個基本但意義深遠的實例——單變量線性回歸,即僅使用一個連續型自變量x來預測另一個連續型因變量y。

具體而言,我們構建了一個線性模型,其形式為 y i = a + b x i + ε y_i = a + bx_i + ε yi?=a+bxi?+ε,其中 y i y_i yi?代表第i個觀測值的因變量, ξ \xi ξ是自變量的相應觀測值, a a a b b b是模型的參數(分別稱為截距和斜率),而 ξ \xi ξ代表誤差項,用于捕捉模型無法完全解釋的變異性。我們的目標是基于給定的數據集 ( x i , y i ) (x_i, y_i) (xi?,yi?)(其中 i i i從1到 n n n n n n為樣本數量),找到最佳的 a ‘ a` a b b b值,使得模型能夠最準確地預測或擬合數據。

為了深入理解這一過程,我們將通過一個實際案例來逐步展示:從數據準備、模型擬合、結果可視化(包括數據點和擬合線的展示),到模型解釋(解讀斜率和截距的含義)。此外,為了驗證模型的穩健性和擬合效果,我們還將采用模擬數據的方法,通過人為生成的數據集來重復模型擬合過程,以此檢查擬合流程的有效性和準確性。

尤為值得一提的是,單變量線性回歸不僅是復雜統計模型的基礎,而且它還隱含了簡單比較的邏輯。在某些特定情境下,當斜率 b b b接近或等于某一固定值時(如0或1),線性回歸模型就退化為一種更為直觀的比較分析,從而展示了其作為數據分析工具箱中通用而靈活的工具之一的重要地位。

2.單變量線性回歸的示例

本節以經濟增長與美國總體選舉的關系展示單變量回歸模型的基本特性。

在探討總統選舉中選票份額與經濟表現之間關系的統計模型時,我們聚焦于由著名政治學家道格拉斯·希布斯(Douglas Hibbs)提出的“面包與和平”理論框架。這一理論簡約而有力,其核心在于通過經濟增長這一單一變量來預測選舉結果,并巧妙地考慮了戰爭時期的特殊情況,如1952年史蒂文森(Stevenson)因戰爭而遭遇的選舉挫折,以及1968年漢弗萊(Humphrey)在越南戰爭陰影下的失利。盡管通過整合更多信息(如現任總統的執政狀態、民意調查結果等)能夠進一步提升預測精度,但這一基礎模型已展現出其非凡的預測能力。

為了具體實現這一模型,我們采用了線性回歸的方法,并將結果可視化于圖2.2中。此圖直觀地描繪了經濟增長(自變量x)與現任政黨選票份額(因變量y)之間的關系,通過一條擬合線展現了兩者之間的統計關聯。數據來源于精心整理的 h i b b s . d a t hibbs.dat hibbs.dat文件,其中包含了歷次選舉中現任政黨在兩黨制投票中的得票百分比( v o t e vote vote)以及前幾年的平均個人收入增長( g r o w t h growth growth),作為分析的關鍵指標。

在R環境中,我們首先讀取并繪制了這些數據,以便直觀感受經濟增長與選舉結果之間的潛在聯系。隨后,利用 s t a n g l m stan_glm stang?lm函數(來自 r s t a n a r m rstanarm rstanarm包,一個結合了貝葉斯統計與廣義線性模型的強大工具)擬合了線性模型 M 1 M1 M1,其中 v o t e vote vote被建模為 g r o w t h growth growth的函數。通過執行 p r i n t ( M 1 ) print(M1) print(M1),我們在R控制臺中獲得了模型的詳細輸出,這些輸出包括參數估計值(如斜率和截距,它們分別量化了經濟增長對選票份額的直接影響)、擬合優度指標(評估模型對數據解釋的充分程度)、以及殘差分析(揭示模型未能解釋的變異性)。

深入理解這些輸出結果,對于評估模型的有效性、識別潛在的數據模式以及探索經濟增長與選舉結果之間復雜關系的本質至關重要。盡管第8章將更深入地探討模型的擬合過程與細節,但當前階段的分析已為我們提供了關于這一重要社會現象的初步見解,揭示了經濟增長在塑造選舉結果方面不可忽視的力量。
在這里插入圖片描述
圖2.1 道格拉斯·希布斯的“面包與和平”投票與經濟模型。自1952年以來的總統選舉按前一屆政府任期末經濟表現(通過通貨膨脹調整后的平均個人收入增長來衡量)的順序列出。對決以現任政黨的候選人對陣其他政黨的候選人列出。經濟表現越好,現任政黨的候選人表現得越好,最大的例外是1952年(朝鮮戰爭)和1968年(越南戰爭)。
在這里插入圖片描述
圖2.2 (a)根據經濟預測選舉:圖7.1中的數據以散點圖的形式表示,每年有一個數據點,(b)帶有線性擬合的數據, y = 46.3 + 3.0 x y = 46.3 + 3.0x y=46.3+3.0x

3.利用經濟預測分析總統選舉投票

在探討如何通過經濟增長率來預測總統選舉投票份額的過程中,我們深入分析了投票結果與經濟狀況之間的關聯。本例中,投票份額作為結果變量,而經濟增長率則作為預測變量。值得注意的是,我們的模型默認包含了一個截距項,這意味著回歸線并非簡單地從原點出發,而是形式為 y = a + b x y = a + bx y=a+bx,其中 a a a 是截距, b b b 是斜率,而 x x x 代表經濟增長率。

3.1.截距項的意義與調整

在某些特定情境下,我們可能希望擬合一條截距為零的直線,即 y = b x y = bx y=bx。這可以通過在R中使用 s t a n g l m stan_glm stang?lm 函數時添加 ? 1 -1 ?1 參數來實現,如 s t a n g l m ( v o t e ? 1 + g r o w t h ) stan_glm(vote ~ -1 + growth) stang?lm(vote??1+growth)。然而,在本例中,由于我們希望模型能夠反映經濟增長為零時現任政黨可能遭受的懲罰性影響,因此保留截距項是有意義的。

3.2.模型系數解讀

模型擬合后,我們得到了兩個關鍵系數:截距和增長率的斜率,以及它們的不確定性度量(通過中位數和MAD_SD表示)和殘差標準差(sigma)。具體來說,擬合的直線方程為 y = 46.3 + 3.0 x y = 46.3 + 3.0x y=46.3+3.0x,這意味著:

  • 當經濟增長率為零時,現任政黨預計將獲得46.3%的選票,這通常預示著選舉的失利。
  • 經濟增長率每增加一個百分點,現任政黨的預期選票份額將增加3.0個百分點。

斜率的標準誤差較小(0.7),表明這一估計具有較高的可靠性,且95%置信區間為[1.6, 4.4],與零顯著分離,進一步支持了經濟增長對選舉結果的重要影響。

3.3.殘差標準差與模型預測能力

殘差標準差(σ=3.9)反映了模型預測與實際結果之間的平均差異,約68%的觀測值將落在擬合線±3.9個百分點之內。這表明模型雖然提供了有價值的預測信息,但并非完全準確,選舉結果仍受多種因素影響。

3.4案例分析

回顧2008年選舉,當時的經濟增長率約為0.1%,根據我們的模型,預測現任政黨(共和黨)將獲得約46.6%的選票,而奧巴馬(民主黨)則有望獲得53.4%的選票。這一預測與實際情況相符,展示了模型在特定條件下的有效性。

在2016年選舉前,我們基于約2%的經濟增長率進行了預測。根據模型,希拉里·克林頓的預期投票份額為52.3%。然而,這個預測值本身并不直接告訴我們希拉里獲勝的概率。為了評估這一預測的不確定性,我們構建了圖2.3,展示了以52.3為中心、標準差為3.9的正態分布圖,從而量化了預測的不確定性。
在這里插入圖片描述
圖2.3 基于2%的經濟增長率,對希拉里·克林頓在2016年兩黨投票中所占百分比的預測分布。曲線顯示了一個以預測點 46.3 + 3.0 × 2.0 = 52.3 為中心的正態分布,標準差為3.9,這是基于模型擬合的估計不確定性。陰影區域表示基于模型的克林頓獲勝的概率,即 1 - pnorm(50, 52.3, 3.9),或者0.72。

為了更直觀地解釋如何利用投票份額預測來估算希拉里·克林頓在2016年普選中的獲勝概率,我們可以進一步探討這一過程的邏輯和實用性。在圖7.3中,通過將預測的投票份額分布(以52.3%為中心,標準差為3.9%)與50%的獲勝閾值進行比較,我們得到了一個概率值,即希拉里贏得選舉的概率為72%。這一計算不僅展示了統計模型的應用,還揭示了概率分布在預測不確定性中的關鍵作用。

為什么預測投票份額而非直接預測獲勝者?

預測投票份額而非直接預測獲勝者的原因,根植于選舉復雜性和結果不確定性的本質。以下是通過分析三類選舉情況來闡述這一點的深度解析:

  1. 勢均力敵的選舉
    在勢均力敵的選舉中,如1960年的肯尼迪與尼克松對決,兩位候選人的支持率極為接近,使得直接預測獲勝者變得極為困難且不可靠。這種情況下,預測投票份額(即每位候選人可能獲得的選票百分比)比單純判斷誰將獲勝更加合理和科學。它提供了關于選舉結果可能性的更細致、更全面的信息,有助于理解選舉的緊張程度和潛在的不確定性。

  2. 具有競爭性的選舉
    對于像2008年奧巴馬與麥凱恩這樣的選舉,雖然一方被普遍認為是更有可能的獲勝者,但另一方仍保留著相當程度的競爭力。在這種情境下,預測投票差距(即兩位候選人之間的選票百分比差異)以及任何一方獲勝的概率,比簡單地宣布某位候選人將獲勝更為準確和有用。這不僅有助于評估選舉的緊張程度,還能為選民、媒體和政策制定者提供關于選舉結果可能性的重要參考。

  3. 概率視角的優越性
    通過預測投票份額并計算獲勝概率,我們能夠以更加量化和精確的方式理解選舉結果的不確定性。這種方法不僅有助于減少主觀臆斷和偏見的影響,還能為決策制定提供更加科學、客觀的依據。此外,概率分布還允許我們考慮極端情況的可能性(盡管它們可能較為罕見),從而進一步完善我們對選舉結果的理解。

預測投票份額而非直接預測獲勝者,是出于對選舉復雜性和結果不確定性的充分考慮。通過預測投票份額并計算獲勝概率,我們能夠以更加全面、細致和量化的方式理解選舉結果的可能性,為選民、媒體和政策制定者提供更加準確、有用的信息。這種方法不僅提高了預測的準確性和可靠性,還促進了對選舉結果更深入、更科學的理解和分析。

4.利用模擬數據檢驗模型擬合過程

雖然前一個例子簡單到可以通過繪圖直觀判斷直線是否穿過數據點,但更普遍地說,在已知真實情況的受控條件下進行擬合并檢查擬合效果是一種良好的實踐。本文將通過選舉模型來演示這一過程。

步驟1:構建虛擬世界
我們首先為模型中的所有參數設定真實的值。鑒于我們已經對數據進行了模型擬合,我們將假設這些特定的參數值是真實的。即,我們假設公式 y = a + b x + error y = a + bx + \text{error} y=a+bx+error 正確無誤,其中誤差來自均值為0、標準差為 σ \sigma σ 的正態分布。然后,我們使用數據集中已有的預測變量 x x x 來檢查這些預測變量是否能夠復現與我們觀察到的 y y y 一致的分布。

a <- 46.3
b <- 3.0
sigma <- 3.9
x <- hibbs$growth
n <- length(x)

步驟2:生成模擬數據
接下來,我們生成一個假數據向量 y y y 并將其放入數據框中:

y <- a + b*x + rnorm(n, 0, sigma)
fake <- data.frame(x, y)

步驟3:擬合模型并比較擬合值與預設值
然后,我們對這些數據執行回歸分析。在擬合過程中,不使用預設的真實值 α \alpha α β \beta β σ \sigma σ

it <- stan_glm(y ~ x, data=fake)
print(fit)

回歸分析的輸出結果如下:

Median MAD_SD
(Intercept) 44.4 1.7
x 3.2 0.7
Auxiliary parameter(s):
Median MAD_SD
sigma 4.0 0.8

將估計得到的系數與預設的真實值46.3和3.0進行比較,可以看出擬合結果是合理的:雖然估計值并不完全精確,但它們落在了可接受的誤差范圍內。

為了更正式地進行比較,我們可以從回歸對象中提取系數的估計值和標準誤差。為了編程簡便,這里我們僅提取斜率 b b b 的值:

b_hat <- coef(fit)["x"]
b_se <- se(fit)["x"]

接著,我們檢查 b b b 的真實值是否落在通過加減一個或兩個標準誤差得到的68%和95%置信區間內:

cover_68 <- abs(b - b_hat) < b_se
cover_95 <- abs(b - b_hat) < 2*b_se
cat(paste("68% coverage: ", cover_68, "\n"))
cat(paste("95% coverage: ", cover_95, "\n"))

步驟4:將模擬過程嵌入循環中
我們已經確認了置信區間在單次模擬中的有效性,但它們是否具有正確的覆蓋概率——也就是說,這些區間是否如預期那樣按照宣稱的百分比包含了真實值?為了驗證這一點,我們將模擬過程、模型擬合和覆蓋率檢查嵌入一個循環中,并重復執行1000次。這樣的循環也可以使用R語言中的 replicate 函數來隱式執行,如文檔中第72頁和74頁所示。這里我們選擇直接編寫循環代碼:

n_fake <- 1000
cover_68 <- rep(NA, n_fake)
cover_95 <- rep(NA, n_fake)
for (s in 1:n_fake){
y <- a + b*x + rnorm(n, 0, sigma)
fake <- data.frame(x, y)
fit <- stan_glm(y ~ x, data=fake, refresh=0) # suppress output on console
b_hat <- coef(fit)["x"]
b_se <- se(fit)["x"]
cover_68[s] <- abs(b - b_hat) < b_se
cover_95[s] <- abs(b - b_hat) < 2*b_se
}
cat(paste("68% coverage: ", mean(cover_68), "\n"))
cat(paste("95% coverage: ", mean(cover_95), "\n"))

這個過程需要幾分鐘來運行,完成后在控制臺上將顯示如下內容:

68% coverage: 0.628
95% coverage: 0.928

這表明平均而言,63%的68%置信區間和93%的95%置信區間包含了真實參數值,這與理論值0.68和0.95相差不遠。覆蓋率稍低,部分是因為我們使用的是正態分布的標準誤差界限,而實際上,鑒于樣本量只有16,我們應該使用具有14個自由度的t分布來進行更準確的推斷。為了謹慎起見,我們可以重新檢查適當t區間的覆蓋率:

n_fake <- 1000
cover_68 <- rep(NA, n_fake)
cover_95 <- rep(NA, n_fake)
t_68 <- qt(0.84, n - 2)
t_95 <- qt(0.975, n - 2)
for (s in 1:n_fake){
y <- a + b*x + rnorm(n, 0, sigma)
fake <- data.frame(x, y)
fit <- stan_glm(y ~ x, data=fake, refresh=0)
b_hat <- coef(fit)["x"]
b_se <- se(fit)["x"]
cover_68[s] <- abs(b - b_hat) < t_68 * b_se
cover_95[s] <- abs(b - b_hat) < t_95 * b_se
}
cat(paste("68% coverage: ", mean(cover_68), "\n"))
cat(paste("95% coverage: ", mean(cover_95), "\n"))

這次模擬給出了預期的結果,即大約68%的68%置信區間和大約95%的95%置信區間包含了真實的參數值。

5. 將比較轉化為回歸模型

為了與基本統計方法相銜接,本文將展示如何將簡單的平均值和比較操作視為線性回歸的特殊情況。這種更為通用的公式化方法不僅有助于在概念上統一這些看起來不同的概念,而且在實踐中,它將成為構建更復雜模型的一個關鍵部分,這將在后續章節中展示。

要將比較轉化為回歸模型,我們需要引入指標變量的概念。指標變量是一種特殊的預測變量,它可以取值為1或0,用于指示數據點是否屬于某個特定類別。例如,我們可以為性別創建一個指標變量,其中男性為1,女性為0;或者為種族創建多個指標變量,如“白人”、“黑人”和“西班牙裔”,每個指標變量對于屬于特定種族的個體取值為1,否則為0。

為了簡化說明,我們將使用模擬數據來展示比較操作與指標回歸之間的聯系。

5.1.估計均值等同于對常數項進行回歸

示例:假設我們從一個均值為2.0、標準差為5.0的總體中模擬20個觀測值:

n_0 <- 20
y_0 <- rnorm(n_0, mean = 2.0, sd = 5.0)
fake_0 <- data.frame(y_0)
print(y_0)

在一次特定的模擬中,生成的數字可能如下:

-0.3, 4.1, -4.9, 3.3, 6.4, 7.2, 10.7, -4.6, 4.7, 6.0, 1.1, -6.7, 10.2,
9.7, 5.6, 1.7, 1.3, 6.2, -2.1, 6.5

將這些數值視為一個隨機樣本,我們可以通過 mean(y_0) 來估計總體均值,其標準誤差為 sd(y_0)/sqrt(n_0)。例如,我們得到的估計值可能是3.3,標準誤差為1.1。

使用最小二乘回歸對常數項進行擬合,我們可以得到相同的結果:

fit_0 <- stan_glm(y_0 ~ 1, data = fake_0, prior_intercept = NULL, prior = NULL, prior_aux = NULL)
print(fit_0)

這將產生以下輸出:

Median MAD_SD
(Intercept) 3.3 1.1
Auxiliary parameter(s):
Median MAD_SD
sigma 5.3 0.9

上述設置分配了一個平坦的先驗,以便 stan_glm 能夠產生傳統的最小二乘回歸估計。在后續的討論中,我們將更詳細地討論先驗分布;在這里,我們使用簡單的最小二乘估計來證明簡單平均值和只有截距的回歸之間的等價性。

5.2.估計差異等同于對指標變量進行回歸

接下來,我們添加一個新的組別:來自均值為8.0、標準差為5.0的總體的30個觀測值:

n_1 <- 30
y_1 <- rnorm(n_1, mean = 8.0, sd = 5.0)

我們可以直接比較每組的平均值,并計算相應的標準誤差:

diff <- mean(y_1) - mean(y_0)
se_0 <- sd(y_0) / sqrt(n_0)
se_1 <- sd(y_1) / sqrt(n_1)
se <- sqrt(se_0^2 + se_1^2)

在特定的模擬中,這些計算返回的差異值為4.2,其標準誤差為1.3,這與模擬中構建的總體差異6.0一致。

或者,我們可以將問題構建為回歸問題,通過將數據合并到一個單獨的向量 y ‘ y` y中,并創建一個指標變量 x x x

x_i <- ifelse(observation_i 在組 0, 0, 1)

在R中,我們可以這樣編寫:

n <- n_0 + n_1
y <- c(y_0, y_1)
x <- c(rep(0, n_0), rep(1, n_1))
fake <- data.frame(x, y)
fit <- stan_glm(y ~ x, data = fake, prior_intercept = NULL, prior = NULL, prior_aux = NULL)
print(fit)

這將產生:

Median MAD_SD
(Intercept) 3.3 1.1
x 4.2 1.2
Auxiliary parameter(s):
Median MAD_SD
sigma 4.7 0.5

斜率的估計值4.2與均值差異 y ˉ 1 ? y ˉ 0 \bar{y}_1 - \bar{y}_0 yˉ?1??yˉ?0? 相同,這是簡單模型的必然結果。我們將在第9章更全面地討論先驗。標準誤差幾乎相同,但略有差異,因為回歸模型估計了一個單一的殘差標準差參數,而差異計算使用了單獨的 s e 0 se_0 se0? s e 1 se_1 se1? 值。

在這里插入圖片描述
圖2.4 模擬數據示例,展示了對指標變量進行回歸分析與計算兩個組之間均值差異是相同的
圖2.4直觀地展示了兩種估計的等價性:對指標變量的回歸(由擬合線顯示)和兩種均值的比較(由兩條虛線之間的差異顯示)。在這個沒有其他預測變量的簡單設置中,最小二乘線將穿過點(0, y ˉ 0 \bar{y}_0 yˉ?0? )和(1, y ˉ 1 \bar{y}_1 yˉ?1? ),所以線的斜率就是差異 y ˉ 1 ? y ˉ 0 \bar{y}_1 - \bar{y}_0 yˉ?1??yˉ?0?

在更復雜的情況下,我們可以使用指標變量來比較群體,同時調整其他預測變量。

使用模擬假數據進行所有這些操作的目的是,首先,直接驗證直接比較和回歸是否給出相同的答案;其次,使用一個通用工具來理解統計擬合的特性,這個工具在更復雜的情況下將繼續有用。

6.參考文獻說明

在本文和接下來的探討中,我們深入探討了線性回歸的多個維度,這是一個在眾多書籍中從不同專業角度廣泛討論的主題。Harrell的著作(2001年)不僅深入挖掘了回歸分析的實際應用,還涉及了其背后的理論基礎。對于希望在R語言環境中開始他們的回歸分析之旅的讀者來說,Fox的教科書(2002年)提供了一個極好的起點,尤其是關于如何有效地擬合和呈現回歸模型。

當我們將視野轉向政治經濟學領域,特別是探究經濟狀況如何影響現任政黨在總統選舉中的得票率時,Hibbs、Rivers和Vasilatos在1982年的研究是一個重要的參考點。隨后,Hibbs在2000年和2012年對這一主題進行了進一步的更新和深入研究。此外,Rosenstone(1983年)、Fair(1978年)以及Wlezien和Erikson在2004年和2005年的連續研究,為理解經濟與政治投票行為之間的復雜關系提供了寶貴的視角和數據支持。

這些文獻不僅為我們提供了豐富的歷史數據和實證分析,而且還展示了如何將統計方法應用于解釋現實世界的經濟和政治現象。通過這些作品,讀者可以更深入地理解線性回歸模型在社會科學研究中的應用,并掌握如何通過這些技術來揭示和預測社會行為模式。

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

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

相關文章

Spring-@Component和@Configuration的區別

前言 在Spring框架中&#xff0c;Configuration和Component注解都是用于組件掃描和管理Bean的生命周期&#xff0c;但它們有著不同的用途和應用場景 Component 注解 Component是一個通用的 stereotype 注解&#xff0c;表明一個Java類為Spring框架中的一個Bean組件。Spring會自…

【C++】相機標定源碼筆記- 立體視覺相機的校準和圖像矯正類

類主要用于雙目相機的標定和矯正。它包含了讀取和保存相機模型、計算標定參數以及矯正圖像的功能。通過這些功能&#xff0c;可以實現雙目相機的標定和矯正&#xff0c;從而提高雙目相機的精度和穩定性。 公有函數&#xff1a; 構造函數、帶參構造函數、析構函數、讀取雙目相機…

摩斯邀您參加“WAIC 2024世界人工智能大會”

2024世界人工智能大會暨人工智能全球治理高級別會議&#xff08;簡稱“WAIC 2024”&#xff09;將于7月在上海世博中心、世博展覽館舉行&#xff0c;論壇時間為7月4日-6日&#xff0c;展覽時間為7月5日-7日。大會展覽面積超5.2萬平方米&#xff0c;重點圍繞核心技術、智能終端、…

STM32要學到什么程度才算合格?

在開始前剛好我有一些資料&#xff0c;是我根據網友給的問題精心整理了一份「嵌入式的資料從專業入門到高級教程」&#xff0c; 點個關注在評論區回復“888”之后私信回復“888”&#xff0c;全部無償共享給大家&#xff01;&#xff01;&#xff01; STM32 這玩意兒要學到啥…

今天聊聊AI

AI是在幫助開發者還是取代他們&#xff1f; 在軟件開發領域&#xff0c;生成式人工智能&#xff08;AIGC&#xff09;正在改變開發者的工作方式。無論是代碼生成、錯誤檢測還是自動化測試&#xff0c;AI工具正在成為開發者的得力助手。然而&#xff0c;這也引發了對開發者職業…

vscode 前行復制到下一行

目錄 這個技巧也比較多 選擇 python解釋器 F1 Ctrl Shift P 跳轉上一次編輯 下一次編輯 Ctrl d 會把當前行復制到下一行 步驟1&#xff1a;打開鍵綁定設置 使用VS Code設置換行 這個技巧也比較多 VS Code技巧匯總_vs code反縮進-CSDN博客 選擇 python解釋器 F1 Ctrl Shi…

Java中如何使用 tesseract-ocr 進行圖片文字提取(tesseract、tesseract訓練自己的字庫)

tesseract下載鏈接&#xff1a; github&#xff1a;https://github.com/tesseract-ocr/ db&#xff1a;https://digi.bib.uni-mannheim.de/tesseract/ 文字識別技術在許多領域都有廣泛的應用&#xff0c;例如文檔處理、自動化辦公、移動設備上的文本輸入等。而Tesseract-OCR作…

Python推導式寫出簡潔高效的代碼方法詳解

概要 推導式是Python中一種非常強大的語法特性,允許你用簡潔的語法創建列表、字典、集合等數據結構。使用推導式不僅可以讓代碼更加簡潔和易讀,還能提高代碼的執行效率。本文將詳細介紹Python中的各種推導式,并提供相應的示例代碼,幫助全面掌握這一強大的工具。 列表推導式…

【前端項目筆記】9 數據報表

數據報表 效果展示&#xff1a; 在開發代碼之前新建分支 git checkout -b report 新建分支report git branch 查看分支 git push -u origin report 將本地report分支推送到云端origin并命名為report 通過路由的形式將數據報表加載到頁面中 渲染數據報表基本布局 面包屑導航…

數據洞察:從零到一的數據倉庫與Navicat連接全攻略【實訓Day04】[完結篇]

一、數據分析 1 實現數據倉庫(在hadoop101上) 1) 創建jobdata數據庫 # cd $HIVE_HOME # bin/hive hive>create database jobdata; hive>use jobdata; 2) 創建原始職位數據事實表ods_jobdata_orgin(在hadoop101上) create table ods_jobdata_origin( city string CO…

Keepalived+LVS實現負責均衡,高可用的集群

Keepalived的設計目標是構建高可用的LVS負載均衡群集&#xff0c;可以調用ipvsadm工具來創建虛擬服務器&#xff0c;管理服務器池&#xff0c;而不僅僅用作雙機熱備。使用Keepalived構建LVS群集更加簡便易用&#xff0c;主要優勢體現在&#xff1a;對LVS負責調度器實現熱備切換…

配置并調試后端程序(sql)

1.環境準備 安裝VS Code和Node.js插件&#xff1a;確保你已經安裝了VS Code和Node.js插件。創建launch.json文件&#xff1a;在你的項目中創建一個.vscode文件夾&#xff0c;并在其中創建launch.json文件。添加以下內容&#xff1a; {"version": "0.2.0"…

uniapp 數據父傳子

文章目錄 可能出現的問題 在uni-app中&#xff0c;父組件向子組件傳遞數據主要通過屬性綁定的方式實現。這里提供一個簡單的示例來說明如何進行父傳子的數據傳遞&#xff1a; 父組件 準備數據: 在父組件的data中定義要傳遞的數據。 export default {data() {return {parentMe…

@ControllerAdice統一返回值類型【Spring源碼學習】

我們可以通過在ControllerAdvice注解類上實現ResponseBodyAdvice注解來實現統一返回值類型&#xff1b; 例如統一接口的返回類型為Result類 ControllerAdvice static class MyControllerAdvice implements ResponseBodyAdvice<Object> {Overridepublic boolean supports…

PLC基礎知識

1.PLC中的數據寄存器地址D表示存數據的地方。 2.PLC的物理存儲器的規定&#xff1a;PLC存儲器以字節為單位&#xff08;Byte&#xff09;&#xff0c;存儲單元以位&#xff08;Bit&#xff09;、字節&#xff08;B&#xff0c;8Bit&#xff09;、字&#xff08;W&#xff0c;1…

谷歌優化師招聘網站:夢想啟航的舞臺,實現職業理想的起點

尊敬的夢想實踐者們&#xff0c;歡迎您走進谷歌優化師招聘網站這個充滿魔力的領域。這里不僅是一個招聘平臺&#xff0c;更是您實現職業理想的起點&#xff0c;激發熱情的舞臺。現在&#xff0c;請做好準備&#xff0c;與我們共同揭開這個神秘世界的面紗&#xff01; 夢想啟航…

電子行業MES系統解決方案

工業4.0時代的工業自動化&#xff0c;將在原有自動化技術和架構下&#xff0c;實現集中式控制向分散式增強型控制的基本模式轉變&#xff0c;讓設備從傳感器到因特網的通訊能夠無縫對接&#xff0c;從而建立一個高度靈活的、個性化和數字化、融合了產品與服務的生產模式。在這種…

上海市計算機學會競賽平臺2022年11月月賽丙組染色問題

題目描述 &#x1d45b;n 個點排成一列&#xff0c;需要給每個點一個顏色&#xff0c;顏色有 &#x1d45a;m 種。請問有多少種方法&#xff0c;能使任意相鄰兩個點的顏色均不相同&#xff1f; 輸入格式 兩個整數&#xff1a;表示 &#x1d45b;n 與 &#x1d45a;m 輸出格…

【控制Android.bp的編譯】

1.首先Android.bp的語法是不支持if 條件語句的 2.查到可以用enabled來控制Android.bp中的模塊是否參與編譯&#xff0c;但是并不能實現動態的控制&#xff0c;比如你需要根據獲取到的安卓版本來控制一個Android.bp是否編譯&#xff0c;是無法做到的。enabled只能是固定的true或…

spark shuffle寫操作——BypassMergeSortShuffleWriter

創建分區文件writer 每一個分區都生成一個臨時文件&#xff0c;創建DiskBlockObjectWriter對象&#xff0c;放入partitionWriters 分區writer寫入消息 遍歷所有消息&#xff0c;每一條消息都使用分區器選擇對應分區的writer然后寫入 生成分區文件 將分區writer的數據flu…