R语言机器学习理论和实战 第一章 线性回归模型

《R语言机器学习理论和实战》系列重点为大家介绍利用R 语言进行机器学习实战。《R语言机器学习理论和实战 》,《Python机器学习理论与实战》《TensorFlow机器学习理论与实战》3 个系列分别介绍用不同的语言方法实现同一个机器学习模型,然后使用同一数据集来比较评价模型。

线性回归模型的理论

理论部分之前已经有过详细的介绍,在此不再赘述,感兴趣的读者,可以阅读文章《Python机器学习理论与实战 第一章 线性回归模型》了解更多。

本章就直接从模型实战开始吧。

获取数据集—波士顿房价预测

#从网站读取数据bostondata = read.table("https://archie.ics.uci.edu/ml/machine-learning-databases/housing/housing.data",header = FALSE) #对属性重命名names(bostondata) = c("CRIM","ZN","INDUS", "CHAS", "NOX", "RM", "AGE", "DIS", "RAD", "TAX", "PTRATIO", "B", "LSTAT", "MED")#查看数据的头几行head(bostondata)

数据集的头几行

每一个字段的含义,之前也都详细介绍过。预测的目标主要就是通过多个属性建立模型来预测MED(自住房屋房价的中位数)

数据可视化

这里简单的做一个散点图矩阵看看目标变量与自变量的关系,关于散点图矩阵的更多信息可以查看文章《R语言数据可视化系列(6)散点图矩阵(相关分析利器)》

散点图矩阵

可以看到目标变量MED(自住房屋房价的中位数)与很多变量之间还是存在较强的相关性,先用最简单的线性模型来拟合变量之间的关系。

数据标准化

避免数据受单位的影响较大,需要进行无量纲化,利用scale( )函数进行Z-Score 标准化

数据划分

分为训练集测试集75%作为训练集,25%作为测试集。

#分割数据集set.seed(33)trainindex = sample(1:nrow(boston),0.75*nrow(boston))trainset = boston[trainindex,]testset = boston[-trainindex,]

模型拟合

#利用训练数据建立预测模型lr_fit = lm(trainset$MED~., data = trainset)# . 包含除因变量以外的所有变量summary(lr_fit)

模型拟合结果摘要

利用模型进行回归预测

利用拟合好的模型在测试集上测试模型的性能。

#对测试数据进行回归预测lr_y_predict = predict(lr_fit,newdata = testset[,-ncol(testset)])

模型评估

评估方式和之前讲的一样,依然使用判定系数R2,均方误差 MSE平均绝对误差 MAE三个指标,具体的含义和计算公式可以参考之前的文章。

#计算R2的值R2 =1- sum((lr_y_predict- testset$MED)^2)/sum((testset$MED - mean(testset$MED))^2)cat('The alue of R-squared of LinearRegression is', R2, " ")#还原标准化之前的值,计算MSE和MAEy_predict = lr_y_predict*sd(bostondata$MED) + mean(bostondata$MED)y_test = testset$MED*sd(bostondata$MED) + mean(bostondata$MED)#MSE的计算MSE = mean((y_predict - y_test)^2)#MAE的计算MAE = mean(abs(y_predict - y_test))cat('The mean squared error of LinearRegression is', MSE, " ") cat('The mean absoluate error of LinearRegression is',MAE)

The alue of R-squared of LinearRegression is0.7480295

The mean squared error of LinearRegression is23.21717

The mean absoluate error of LinearRegression is3.05202

注:标准化逆标准化的过程中还存在一定缺陷,最好的做法应该是根据训练集的均值和标准差来对训练集和测试集进行标准化和逆标准化操作,但是为了方便,直接根据所有数据的均值和标准差来做标准化。

Scikit-Learn结果(具体计算过程可以查看《Python机器学习理论与实战 第一章 线性回归模型》)

The mean squared error of LinearRegression is25.0969856921

The mean absoluate error of LinearRegression is3.5261239964

TensorFlow 结果(具体计算过程可以查看《TensorFlow机器学习理论与实战 第一章 线性回归模型》)

The mean squared error of LinearRegression is25.2440032605

The mean absoluate error of LinearRegression is3.55180931128

关于结果我就不做过多解释了,理论上R语言的结果应该是和Scikit-Learn的结果一致的,但是因为在划分训练集和测试集时随机种子的区别,导致最后结果略有区别。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180228A0DPN700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券