本案例使用回归模型预测互联网排名前1000的网站在2011年的访问量。数据由 NeilKodner提供。
数据描述
我们的数据有很多特征,在这里,主要考虑五列;
rank | site | category | unique-visitors | Page-Views | hasad | inEnglisth |
---|---|---|---|---|---|---|
1 | social Networks | 88000000 | 9.1e+11 | yes | yes | |
2 | youtube | Online Vieo | 80000000 | 1.0e+11 | yes | yes |
...
rank 表示网站排名
site 表示站点
category 表示类型
unique-visitors 表示Ip访问量
page-views 表示站点浏览量
isenglish 站点是否是英文
hashad 是否有广告
基本分析
使用图形直观的认识一下数据
作出pageViews 和 uniquevisitors关联的散点图。
library(ggplot2)
top.1000.sites <- read.csv('ML_for_Hackers/05-Regression/data/top_1000_sites.tsv',sep = '\t',stringsAsFactors = F)
ggplot(top.1000.sites,aes(x=PageViews,y=UniqueVisitors))+
geom_point()
image.png
看上去十分糟糕,数据都集中在一个地方。尺度不适合,可以对数据进行变换。
观察Pageviews的密度图。
变换前
完全不可理会。
尝试观察进行变换后的密度图
ggplot(top.1000.sites,aes(x = log(PageViews))) +
geom_density()
变换后
耶耶耶,好像非常不错!
作出变换后的散点图。并作出预测曲线。
ggplot(top.1000.sites,aes(x = log(PageViews),y = log(UniqueVisitors))) +
geom_point() +
geom_smooth(method = 'lm',se = F)
变换后的散点图
这样的结果还是不错的,我们可以拟合具体的直线。
建立线性模型
lm.fit <- lm(log(PageViews)~log(UniqueVisitors),data = top.1000.sites)
summary(lm.fit)
Call:
lm(formula = log(PageViews) ~ log(UniqueVisitors), data = top.1000.sites)
Residuals:
Min 1Q Median 3Q Max
-2.1825 -0.7986 -0.0741 0.6467 5.1549
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -2.83441 0.75201 -3.769 0.000173 ***
log(UniqueVisitors) 1.33628 0.04568 29.251 < 2e-16 ***
Signif. codes: 0 ‘’ 0.001 ‘’ 0.01 ‘’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.084 on 998 degrees of freedom
Multiple R-squared: 0.4616, Adjusted R-squared: 0.4611
F-statistic: 855.6 on 1 and 998 DF, p-value: < 2.2e-16
得到的结果 斜率和截距的t检验通过,回归方程的F检验通过,R 0.4616,相关系数有点低。
增加变量个数:
lm.fit- lm(log(PageViews)~HasAdvertising + log(UniqueVisitors)+ InEnglish,
data = top.1000.sites)
结论
注意对数据的尺度进行变换。
网友评论