[读书笔记]机器学习:实用案例解析(5)

第5章  回归模型:预测网页访问量

回归模型:用已知数据集预测另外一个数据集,已知数据集称为输入,也叫预测变量或特征,想要预测的数据称为输出。回归模型与分类模型的不同之处在于回归模型的输出是有意义的数值。

基准模型:用均值作为预测

#machine learing for heckers
#chapter 5

library(ggplot2)

ages <- read.csv(‘ML_for_Hackers/05-Regression/data/longevity.csv‘)
#密度图
ggplot(ages, aes(x = AgeAtDeath, fill = factor(Smokes))) + geom_density() + facet_grid(Smokes ~ .)

  

#采用均值作为估计时的均方误差与采用其他结果作为估计时的均方误差比较

guess <- 73
with(ages, mean((AgeAtDeath - guess) ^ 2))
guess.accuracy <- data.frame()
for(guess in seq(63, 83, by = 1)){
  prediction.error <- with(ages, mean((AgeAtDeath - guess) ^ 2))
  guess.accuracy <- rbind(guess.accuracy, data.frame(Guess = guess, Error = prediction.error))
}
ggplot(guess.accuracy, aes(x = Guess, y = Error)) + geom_point() + geom_line()

  

#对是否吸烟分组后,分别估计年龄均值,计算均方根误差

constant.guess <- with(ages, mean(AgeAtDeath))
with(ages, sqrt(mean((AgeAtDeath - constant.guess) ^ 2)))
smokers.guess <- with(subset(ages, Smokes == 1), mean(AgeAtDeath))
non.smokers.guess <- with(subset(ages, Smokes == 0), mean(AgeAtDeath))
ages <- transform(ages, NewPrediction = ifelse(Smokes == 0, non.smokers.guess, smokers.guess))
with(ages, sqrt(mean((AgeAtDeath - NewPrediction) ^ 2)))

  

线性回归简介:

用到的假设:可加性;线性

一般性系统问题:回归擅长内推插值(interpolation),不擅长外推归纳(extrapolation). 也就是说,输入数据偏离观测数据太远,会造成预测不准确

模型如何才算有效?一个模型应该把真实世界的信号(预测值给出的)和噪声(残差给出的)区分开来,如果残差中除了真正的噪声外还存在信号,就说明模型没有强大到足以提取所有信号。

评价方法:

均方误差(MSE):可以评价预测的平均偏离,但是MSE是平均偏离值的平方

均方根误差(RMSE):MSE的开方值,但是不能让人直观清楚地看出模型不合理,即只能比较两个模型哪个更好,而不能单独评价一个模型的表现

R2:评价单独一个模型的好坏,以均值预测作为评估标准,值为0~1. 计算方式,分别计算以模型预测的RMSE1和均值预测的RMSE2,则R2 = 1-(RMSE1/RMSE2)

###################################
#预测网页流量
###################################

观察访问量和访问用户之间的关系,先绘制散点图和密度图

top.1000.sites <- read.csv(‘ML_for_Hackers/05-Regression/data/top_1000_sites.tsv‘, sep = ‘\t‘,
                           stringsAsFactors = FALSE)
ggplot(top.1000.sites, aes(x = PageViews, y = UniqueVisitors)) + geom_point()
ggplot(top.1000.sites, aes(x = PageViews)) + geom_density()

  

首先绘制的散点图都挤在了一起,所以考虑先看密度分布,但是密度分布也毫无意义,效果并不直观。这时要考虑先将数据对数变换,再绘制密度图和散点图。

ggplot(top.1000.sites, aes(x = log(PageViews))) + geom_density()
ggplot(top.1000.sites, aes(x = log(PageViews), y = log(UniqueVisitors))) + geom_point()
#也可以用ggplot2内置的scale_x_log10()和scale_y_log10()直接转换刻度,效果相同

  

进行线性回归并解释结果:

lm.fit <- lm(log(PageViews) ~ log(UniqueVisitors), data = top.1000.sites)
summary(lm.fit)

  

Call:调用函数

Risiduals:残差的分位数

Coefficients:回归模型的系数信息

Signif.codes:t-value有多大或者p-value有多小,t-value的意义就是系数估计值距离0的标准差个数,一般3个以上表示显著

Residual standard error:即RMSE。自由度:样本中独立或能自由变化的自变量的个数。由于已经确定了两个系数,而确定这两个系数至少需要2个自变量的值,因此该统计量的自由度是1000-2=998。自由度越大,RMSE越小,证明这个模型效果越好,越具有普遍性

Multiple R-squared:标准的R2

Adjusted R-squared:根据使用的系数个数调整后的R2值,系数使用的越多,R2值得到的惩罚越大

F-statistic:表征了模型相对于仅使用均值预测所获得效果的提升度量,是R2的替代方案,可以用来计算p-value

(注:书中提到,p-value和F-statistic在模型预测问题上具有一定欺骗性,这两个指标更为合理的用法是用于拟合问题)

#########################################

#引入更多信息并进行回归

lm.fit <- lm(log(PageViews) ~ HasAdvertising + log(UniqueVisitors) + InEnglish, data = top.1000.sites)
summary(lm.fit)

  

分析:

对于因子HasAdvertising:两种因子:‘YES‘和‘NO‘。  ‘YES‘从截距里分出来,‘NO‘包含在了截距(Intersept)中

对于因子InEnglish:三种因子:‘NA‘、‘YES‘和‘NO‘.  ‘NA‘被包含在了截距里,‘YES‘和‘NO‘分别拟合系数

想要比较单独使用一个输入时,哪个输入具有更强的预测能力,可以提取每个summary函数的R2

InEnglish应该解释了30%,应该是书上有误。这也解释了书上为什么提到1%的HasAdvertising可以舍去而不提3%的InEnglish

分析:因为HasAdvertising只解释了结果的1%,因此实践中,如果输入容易获得,值得将所有输入都包含进一个预测模型中,如果难以获得,可以从模型里去掉

#################################

相关性简述:

相关性可以衡量线性回归模型对两个变量之间关系建模的好坏:值为0时表明不存在直线能将两个变量联系起来;值为1时表明有一条完美正向直线可以将两个变量联系起来;值为-1时表明有一条完美的负向直线。

在R语言中,可以用函数cor()来计算相关性;

另一种计算方式是:用lm()函数对刻度变换后的两个变量进行拟合,得到的系数即是相关性。刻度变换方式是:先减去两个变量的均值,再除以标准差,在R语言中可以用scale()函数直接得到结果。

需要注意的是,相关性只能度量两个变量之间线性关系有多强,但是并不能说明两个变量之间是否有因果关系。而即使没有逻辑上的因果关系,对于预测问题来说,知道两个变量之间是否有相关性仍然十分重要。

时间: 2024-10-10 05:51:37

[读书笔记]机器学习:实用案例解析(5)的相关文章

分享《机器学习:实用案例解析》中文版PDF+英文版PDF+源代码

下载:https://pan.baidu.com/s/1-TzAIfMvJosL9-vk5Ft5kQ 更多资料分享:http://blog.51cto.com/3215120 <机器学习:实用案例解析>中文版PDF+英文版PDF+源代码R语言版的机器学习:中文版PDF,302页,带目录和书签:英文版PDF,322页,带目录和书签:配套源代码. 中文版如图所示: 原文地址:http://blog.51cto.com/3215120/2313183

[读书笔记]机器学习:实用案例解析(4)

第4章  排序:智能收件箱 有监督学习与无监督学习:有监督学习已有明确的输出实例:无监督学习在开始处理数据时预先并没有已知的输出实例. 理论上邮件的优先级特征: 社交特征:收件人与发件人之间的交互程度 内容特征:收件人对邮件采取行为(回复.标记等)与某些特征词之间相关 线程特征:记录用户在当前线程下的交互行为 标签特征:检查用户通过过滤器给邮件赋予的标签(标记) 由于数据量不足,本文用于替代的优先级特征:(需要抽取的元素) 社交特征:来自某一发件人的邮件量(发件人地址) 时间量度:(接受时间日期

[读书笔记]机器学习:实用案例解析(7)

第7章  优化:密码破译 优化简介:最优点(optimum),优化(optimization) 本章研究的问题:构建一个简单的密码破译系统,把解密一串密文当做一个优化问题. 优化方法:网格搜索(grid search),主要问题是1.步长的选择:2.维度灾难(Curse of Dimensionality):问题规模过大 optim函数:比网格搜索更快,可以通过已经计算出的信息推断出下一步的方向,同时对所有变量一起优化.(根据书中后文,可能的原理是根据导数得出下一步的进行方向,因为该函数对于不可

[读书笔记]机器学习:实用案例解析(2)

第2章  数据分析 #machine learing for heckers #chapter 2 library(ggplot2) heights.weights <- read.csv("ML_for_Hackers/02-Exploration/data/01_heights_weights_genders.csv", header = TRUE, sep = ",") #不同区间宽度的直方图 ggplot(heights.weights, aes(x

[读书笔记]机器学习:实用案例解析(1)

第1章  使用R语言 #machine learing for heckers #chapter 1 library(ggplot2) library(plyr) #.tsv文件用制表符进行分割#字符串默认为factor类型,因此stringsAsFactors置FALSE防止转换#header置FALSE防止将第一行当做表头#定义空字符串为NA:na.strings = "" ufo <- read.delim("ML_for_Hackers/01-Introduct

[读书笔记]机器学习:实用案例解析(3)

第3章  分类:垃圾过滤 #machine learing for heckers #chapter 3 library(tm) library(ggplot2) #设置路径变量 spam.path <- "ML_for_Hackers/03-Classification/data/spam/" spam2.path <- "ML_for_Hackers/03-Classification/data/spam_2/" easyham.path <-

[读书笔记]机器学习:实用案例解析(9)

第9章 MDS:可视化地研究参议员相似性 基于相似性聚类:本章的主旨是,对不同的观测记录,如何理解用距离的概念来阐明它们之间的相似性和相异性. 多维定标技术(multidimensional scaling, MDS),目的是基于观察值之间的距离度量进行聚类.只通过所有点之间的距离度量对数据进行可视化. MDS处理过程:输入一个包含数据集中任意两点之间距离的距离矩阵,返回一个坐标集合,这个集合可以近似反映每对数据点之间的距离(维度低时信息会有缺失,只能说近似) 下面是一个简单的例子: #距离度量

[读书笔记]机器学习:实用案例解析(8)

第8章 PCA:构建股票市场指数 有监督学习:发掘数据中的结构,并使用一个信号量评价我们在探索真实情况这项工作是否进行得很好. 无监督学习:发掘数据中的结构,但没有任何已知答案指导 主成分分析(Principle Components Analysis, PCA):根据每一列包含原始数据信息的多少,对源数据进行排序,排在第一列的成为第一主成分(主成分),总是包含了整个数据集的绝大部分结构. 本章通过构建股市指数来讨论主成分分析问题. prices <- read.csv('ML_for_Hack

数据挖掘与运营化实战读书笔记-机器学习案例技巧实战