zoukankan      html  css  js  c++  java
  • 【机器学习与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-如何提高模型的性能?

  • 相关阅读:
    word count
    第三周作业:Visual Studio 2013
    第三周作业:读程序
    只有动手才能发现问题
    软件工程
    final个人阅读作业
    个人阅读作业7
    第一次个人项目修改
    结对编程项目总结(王开207, 唐彬170)
    个人博客作业3
  • 原文地址:https://www.cnblogs.com/jessepeng/p/13605146.html
Copyright © 2011-2022 走看看