【学习笔记】The Analytics Edge 第二周:线性回归模型的建立与使用


  • cid:41:privileges:topics:read

    第二周的课程主要介绍了如何使用R语言中的线性回归函数来建立模型,并用模型去预测数据。这门课着重于展示如何使用R进行实际的数据分析,所以模型相关的理论介绍相对比较少。关于线性回归更基础的介绍可以在coursera的机器学习课程中找到。

    在R中应用机器学习的时候,我们主要使用一个名为R square(R^2) 的参数来表示一个模型的好坏。
    0_1471919238831_tu.jpg
    对于一组数据,我们假定有一个基准模型(baseline model, 如上图中的红线所示), 这个模型没有任何变量,对于任何输入变量都做出相同的预测。我们对基准模型对于每个数据预测的误差的平方求和,得到总平方和(SST, total sum of squares)。另外,对于我们使用的模型做出的预测误差求平方和,得到平方和(SSE, sum of squared error)。则R square的计算方式为:
    R^2 = 1 - SSE / SST
    R^2主要衡量了一个模型和基准模型之间的差距。当使用的模型的性能和基准模型差不多时,R^2就会接近于0。而模型远远好于基准模型时,R^2就会接近1。

    在R中构建和使用一个线性回归模型只需要几行代码,以课程中提到的红酒数据为例:
    导入数据:

    wine = read.csv(“wine.csv”)
    查看数据,选择变量:
    summary(wine)
    建立量模型,并将模型存到变量model1中:(基于变量AGST预测Price, 使用wine作为数据集)
    model1 = lm(Price ~ AGST, data = wine)
    查看建立的模型信息:
    summary(model1)
    查看模型的残差(Residual, 观测值与拟合值之间的差):
    model1$residuals
    手动计算SSE:
    SSE = sum(model1$residuals^2)

    建立多变量的模型:
    model2 = lm(Price ~ AGST + HarvestRain, data = wine)

    当我们使用多个变量来建立模型的时候,其中的某些变量可能对预测结果影响不大因而可以被去掉。如果我们使用summary()来查看模型,可以看到一张描述变量相关性的表,如下图:
    0_1471919290587_co.jpg
    简单来看,表的最右边的星号标注表明了一个变量是否重要。
    此外,多个参数之间可能存在着相关性,两个变量之间的相关度可以用cor函数来计算:

    cor(wine$Age, wine$FrancePop)
    整个数据集包含的变量间的相关性可以用同样的方式计算:
    cor(wine)
    当相关性的绝对值接近1的时候,可以认为两个变量高度相关。这种时候可以只选取其中的一个变量作为模型参数。选取的标准是,尽量选取直观的变量(intuitive),比如:当红酒的年份和法国的人口相关时,选取年份而非人口。

    当我们确定了要使用的模型之后,就可以将模型用于预测了。加入我们的模型存在变量“model4”中,并将测试数据“wine_test.csv”读入变量wineTest中:

    wineTest = read.csv(“wine_test.csv”)
    predictTest = predict(model4, newdata = wineTest)
    测试结果存在变量predictTest中,这时可以直接比较wineTest中的数据和预测结果,或者手动计算R^2:
    SSE = sum((wineTest$Price - predictTest)^2)
    SST = sum((wineTest$Price - mean(wine$Price))^2)
    1 - SSE / SST


登录后回复
 

与 BitTiger Community 的连接断开,我们正在尝试重连,请耐心等待