【機器學習與R語言】6-線性回歸


1.理解回歸

  • 確定一個唯一的因變量(需預測的值)和一個或多個數值型的自變量(預測變量)之間的關系。
  • 回歸分析對數據間復雜關系建立模型,用來估計一種處理方法對結果影響和推斷未來。也可用於假設檢驗。
  • 線性回歸:直線回歸模型
  • 簡單線性回歸:單一自變量
  • 多元回歸:多變量

也可對分類變量做回歸:

  • 邏輯回歸:對二元分類的結果建模
  • 泊松回歸:對整型的計數數據建模

線性回歸、邏輯回歸、泊松回歸以及其他許多回歸都屬於廣義線性模型(GLM)。
image.png

1)簡單線性回歸

方程就是一條直線:

線性方程
做回歸分析時,設計對α和β尋找參數估計(一般用a和b來表示)。

2)普通最小二乘估計

普通最小二乘法(OLS):確定α和β的最優估計值,即斜率和截距的選擇要使得誤差(y的預測值與y的真實值之間的垂直距離,即殘差)的平方和最小。

示意圖
公式
通過演算,使得誤差平方最小的b值為:
image.png
即:協方差除以方差

a的最優值為:均值

3)相關系數

Pearson相關系數:

協方差除以標准差
經驗規則(大拇指規則)來解釋相關系數:
0.1-0.3弱相關;0.3-0.5中相關;0.5以上強相關,但必須根據上下文解釋。

4)多元線性回歸

image.png

多元回歸方程:
最后一項為誤差項
可表示為:
image.png
經過推導(略),可計算向量β最佳估計:
image.png

可編寫一個簡單回歸函數reg,輸入y和x,返回一個估計的β系數矩陣:

reg <- function(y,x){
  x <- as.matrix(x)
  x <- cbind(Intercept=1,x)
  #solve執行矩陣逆運算, %*%兩個矩陣相乘
  solve(t(x) %*% x) %*% t(x) %*% y 
}

簡單線性模型
多元回歸模型

2.線性回歸應用示例

預測醫療費用:利用病人的數據來預測他們的平均醫療費用,進而創建一個精算表來設定年度保費的價格。

1)收集數據

1338個案例,包括保險受益者,病人特點(年齡、性別、BMI、區域等)和歷年計划計入的總醫療費用的特征。

數據下載:

鏈接: https://pan.baidu.com/s/1Hgn5jad2O1HCgNSJrzT9MA 提取碼: vjr9

2)探索和准備數據

## Example: Predicting Medical Expenses ----
## Step 2: Exploring and preparing the data ----
insurance <- read.csv("insurance.csv", stringsAsFactors = TRUE)
str(insurance)

# summarize the charges variable
summary(insurance$expenses)

# histogram of insurance charges
hist(insurance$expenses)

# table of region
table(insurance$region)

# exploring relationships among features: correlation matrix
cor(insurance[c("age", "bmi", "children", "expenses")])

# visualing relationships among features: scatterplot matrix
pairs(insurance[c("age", "bmi", "children", "expenses")])

# more informative scatterplot matrix
library(psych)
pairs.panels(insurance[c("age", "bmi", "children", "expenses")])

image.png
兩個變量相關性由橢圓形狀表示:越拉伸相關性越強。每個變量的局部回歸平滑曲線表示x軸和y軸變量之間的一般關系。倒U形(如age和bmi)

3)訓練數據

## Step 3: Training a model on the data ----
ins_model <- lm(expenses ~ age + children + bmi + sex + smoker + region,
                data = insurance)
ins_model <- lm(expenses ~ ., data = insurance) # this is equivalent to above

# see the estimated beta coefficients
ins_model

image.png
截距很難解釋,沒有內在意義,在實際中常常被忽略。
指定6個變量,但輸出了10個系數:因為lm函數將虛擬編碼自動應用於因子類型的變量中。
估計的系數是相對於參照類別解釋的。

4)評估模型

## Step 4: Evaluating model performance ----
# see more detail about the estimated beta coefficients
summary(ins_model)

image.png

5)提高模型性能

①添加非線性關系
如添加一個高階項到回歸模型中,把模型當成多項式處理。比如年齡對醫療費用的影響可能不是恆定的,越老的人,治療費越高,考慮將age創建一個新的非線性變量age^2
②將一個數值型變量轉換為二進制指標
當一個特征的影響不是累積的,而是當特征的取值達到一個給定的閾值后才產生影響。比如BMI只有大於30時才有影響。
③加入相互作用的影響
當兩個特征存在共同影響時,可考慮相互作用,如肥胖指標bmi30和吸煙指標smoker可能存在相互作用。
④綜合以上三點一起改進

## Step 5: Improving model performance ----

# add a higher-order "age" term
insurance$age2 <- insurance$age^2

# add an indicator for BMI >= 30
insurance$bmi30 <- ifelse(insurance$bmi >= 30, 1, 0)

# create final model
ins_model2 <- lm(expenses ~ age + age2 + children + bmi + sex +
                   bmi30*smoker + region, data = insurance)

summary(ins_model2)

image.png

R方從0.75提高到了0.87,即模型現在能解釋醫療費用變化的87%。

https://www.sohu.com/a/228212348_349736


機器學習與R語言系列推文匯總:
【機器學習與R語言】1-機器學習簡介
【機器學習與R語言】2-K近鄰(kNN)
【機器學習與R語言】3-朴素貝葉斯(NB)
【機器學習與R語言】4-決策樹
【機器學習與R語言】5-規則學習
【機器學習與R語言】6-線性回歸
【機器學習與R語言】7-回歸樹和模型樹
【機器學習與R語言】8-神經網絡
【機器學習與R語言】9-支持向量機
【機器學習與R語言】10-關聯規則
【機器學習與R語言】11-Kmeans聚類
【機器學習與R語言】12-如何評估模型的性能?
【機器學習與R語言】13-如何提高模型的性能?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM