数据挖掘——使用R软件预测海藻数量
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
14
4.4 通过案例的相关性填补缺失值
1. 度量相似性时,最常用的指标是欧式距离。我们可通过使用这种度量 来寻找与任何含有缺失值的案例最相似的10个水样,并用它们填补缺 失值。
方法一:简单计算这10个最近的案例的中位数并用中位数填补缺失值; 若缺失值是名义变量则采用众数。
方法二:采用这些最相似数据的加权均值。这里用高斯核函数从距离 获得权重。命令如下:
使用 R 软件预测海藻数量
李强强 2013.11
R软件
• R是一套完整的数据处理、计算和制图软件系统。其功能包括:数据 存储和处理系统;数组运算工具(其向量、矩阵运算方面功能尤其强 大);完整连贯的统计分析工具;优秀的统计制图功能;简便而强大 的编程语言:可操纵数据的输入和输出,可实现分支、循环,用户可 自定义功能。 • R在语义上是函数设计语言。它允许在“语言上计算”。这使得它可 以把表达式作为函数的输入参数,而这种做法对统计模拟和绘图非常 有用。 • R是一个免费的自由软件。本案例使用的是R的3.0.1版。
apply(algae, 1, function(x) sum(is.na(x)))
函数apply()是元函数,可在某些条件下对对象应用其他函数。第二个 参数“1”表示第一个参数algae中的对象的第一个维度,即行数据。 第三个参数是临时函数,功能是计算对象x中NA的数量。(注:R中有 TRUE=1, FALSE=0)
• 多元线性回归模型是最常用的统计数据分析方法,该方法给出了一个 有关目标变量与一组解释变量关系的线性函数。由于多元线性回归模 型中没有处理缺失值的方法,因此,我们可以做如下的数据预处理:
data(algae) algae<-algae[-manyNAs(algae),] clean.algae<-knnImputation(algae,k=10)
data(algae) algae<-algae[-manyNAs(algae), ] algae<-centralImputation(algae)
上述方法特别适用于大数据集,但是这种方法可能导致较大的数据偏 差,影响后期的数据分析。但使用复杂的无偏方法寻找最佳数据填补 对大型数据集可能也不适用。
4/8/2014 4:50 PM 8
4 数据清理
数据缺失的情形在实际问题中非常普遍。处理含有缺失值的数据时常 用的几种策略: – 将含有缺失值的案例剔除。 – 用中心趋势值来填补缺失值。 – 根据变量之间的相关关系填补缺失值。 – 根据案例之间的相似性填补缺失值。 – 使用能够处理缺失值数据的工具(见下一节)。
我们得到线性模型:PO4=42.897+1.293*oPO4. 4. 剔除样本62和样本199后,仅样本28在PO4上有缺失值,我们用上面 的线性关系来填补:
algae[28,"PO4"]<-42.897+1.293*algae[28,"oPO4"]
查看填补的记录:
algae[28,]
4/8/2014 4:50 PM
plot(rt.a1)
text(rt.a1)
或
prettyTree(rt.a1)
建立回归树通常分两步。最初,生成一棵较大的树,然后通过统计估
计删除底部的一些结点来对树进行修剪。这样是为了防止过度拟合。
4/8/2014 4:50 PM 7
3 数据可视化(2)
3. 绘制变量oPO4的箱图:
boxplot(algae$oPO4, ylab="oPO4") rug(algae$oPO4, side=4) abline(h=mean(algae$oPO4, na.rm=T), lty=2)
ylab为设置y轴标题; rug函数绘制变量的实际值,side=4表示绘制在图的右侧(1在下方,2 在左侧,3在上方); abline函数绘制水平线,mean表示均值,na.rm=T指计算时不考虑NA 值,lty=2设置线型为虚线。
manyNAs(algae)
6. 我们利用上面的函数来剔除缺失值较多的记录:
algae<-algae[-manyNAs(algae),]
这里第二个参数的默认值为0.2。
4/8/2014 4:50 PM 11
4.2 用中心趋势值填补缺失值
代表中心趋势的值反映了变量分布的最常见值,这种方法也最自然、 简便和快捷。对于接近正态的分布来说,均值是最佳选择;对偏态分 布或有离群值的分布而言,中位数通常是更好的代表数据中心趋势的 指标;对于名义变量,通常采用众数。可用以下函数完成填补所有缺 失值:
4/8/2014 4:50 PM
9
4.1 剔除缺失值(1)
1. 适用范围:含缺失值的记录在整个数据集中比例很小时。 2. 检查含缺失值的记录:
algae[!complete.cases(algae), ]
3. 剔除所有含缺失值的记录:
algae<-na.omit(algae)
4. 找出每个记录中缺失值的个数:
4/8/2014 4:50 PM
2
背景描述
• 某些高浓度的有害藻类严重破坏着河流的生态环境,因此,能够监测 并及早对海藻的繁殖进行预测对提高河流的质量是很有必要的。 • 在约一年时间内,在不同的时间收集了多条不同河流的水样。每个水 样测定了它们不同的化学性质和7种有害藻类的存在频率。还记录了 如收集的季节、河流大小和水流速度。
• 案例研究动机:1. 化学监测相对人工检测价格便宜,且易于自动化。
2. 更好地了解藻类的频率和水样的某些化学性质以及其他特性(如季 节、河流类型等)是如何相关的。
4/8/2014 4:50 PM
3
0 海藻数据
• 第一个数据集:包含200个水样。每条记录是一条河流在该年的同一 季节的三个月内收集的水样的平均值。 • 其中,每条记录由11个变量组成。其中3个名义变量:水样收集的季 节、河流大小和河水速度。8个变量是水样的不同化学参数:最大pH 值、最小含氧量、平均氯化物含量、平均硝酸盐含量、平均氨含量、 平均正磷酸盐含量、平均磷酸盐含量和平均叶绿素含量。与之相关的 是7种不同的有害藻类的频率数目。 • 第二个数据集:140个不含7种藻类频率数目的测试集。
4/8/2014 4:50 PM 10
4.1 剔除缺失值(2)
5. 可根据4编写一个找出algae中含有给定数目缺失值的行。以下函数的 功能是找出缺失值个数大于列数20%的行:
library(DMwR) manyNAs(algae, 0.2)
第二个参数如不指定,默认为0.2,下面的命令与上一条等价:
4/8/2014 4:50 PM 12
4.3 通过变量的相关性填补缺失值(1)
1. 用以下命令获取变量之间的相关矩阵:
data(algae) symnum(cor(algae[,4:18], use="complete.obs"))
其中,函数cor()产生相关值矩阵(忽略前3个名义变量),use参数指计 算相关值时忽略含有NA的记录。 2. 结果显示,有两个相关性较大的值:NH4和NO3之间,PO4和oPO4之 间。 前者相关性不是特别明显(0.6~0.8),考虑到只样本62和样本199含有过 多的缺失值,若剔除它们,样本中NH4和NO3就不存在缺失值了。后 者相关值很高(大于0.9)*,可用变量的相关性填补缺失值。
通过下面的代码,我们可以获取更多线性模型的信息:
summary(lm.a1)
首先,给出数据拟合的残差(residuals)。残差应该是均值为0且为正态 分布的。 其次,对于每个多元线性回归方程的系数(变量),给出它的估计值和 标准误差,并使用t检验来验证系数为0的假设检验。
再者,给出模型与数据的吻合度,即模型所能解释的数据变差的比例。 R-squared越接近于1说明模型拟合得越好,越小则代表模型拟合得越 差。
hist(algae$mxPH) hist(algae$mxPH, prob=T)
区别在于前者给出的是频数,后者是区间的概率。 2. 绘制mxPH的Q-Q图:
library(car) qqPlot(algae$mxPH, main='Normal QQ plot of maximum pH')
Q-Q图绘制变量值和正态分布的理论分位数的散点图。同时,它给出 正态分布的95%置信区间的带状图(虚线)。main为设置图形的标题。
数形式。这个函数的形式是用数据中的其他所有变量来预测变量a1, 第一个参数中的点“.”代表数据框中的所有除a1外的变量。如需要 用变量mxPH和NH4来预测变量a1,就要定义模型为 "a1~mxPH+NH4"。参数data是用来设定建模所用的数据集。
4/8/2014 4:50 PM
Βιβλιοθήκη Baidu
17
5.1 线性回归模型(2)
* 根据领域专家的解释,总的磷酸盐值包含正磷酸盐值。
4/8/2014 4:50 PM 13
4.3 通过变量的相关性填补缺失值(2)
3. 寻找PO4和oPO4之间的线性关系的方法:
algae<-algae[-manyNAs(algae), ] lm(formula=PO4~oPO4, data=algae)
• 这里还是先移除缺失值较多的记录,然后根据训练集数据个案的相似
性来填补缺失值。
4/8/2014 4:50 PM 16
5.1 线性回归模型(1)
建立用于预测海藻频率的线性回归模型:
lm.a1<-lm(a1~.,data=clean.algae[,1:12])
函数lm()建立一个线性回归模型,其中,第一个参数给出了模型的函
4/8/2014 4:50 PM
4
1 数据加载
1. 点击文件菜单下的"改变工作目录"来设定当前工作目录。 2. 输入以下命令把文件中的数据读入:
algae<-read.table('Analysis.txt', col.names=c('season', 'size', 'speed', 'mxPH', 'mnO2', 'Cl', 'NO3', 'NH4', 'oPO4', 'PO4', 'Chla', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7'), na.strings=c('XXXXXXX'))
最后,还可以检验任何解释变量与目标变量的依赖关系。
4/8/2014 4:50 PM
18
5.2 回归树模型(1)
• 因模型解释的方差比例太低,才约32%,故实际验证结果表明:对海 藻案例应用线性模型是不合适的。用线性思维去考虑非线性问题,得 不到理想的结果。
• 我们考虑使用回归树预测。建立回归树:
library(rpart) data(algae)
clean.algae<-knnImputation(algae,k=10)
2. 这种方法看起来更合理,但也可能存在不相关的变量扭曲相似性,甚 至造成大型数据集的计算特别复杂等问题。因此,填补缺失值时,大 多应根据分析领域的知识来确定。
4/8/2014 4:50 PM 15
5 获取预测模型
用于预测海藻的两种模型:多元线性回归模型和回归树模型。线性回 归不能使用有缺失值的数据集,而回归树模型可以很自然地处理带缺 失值的数据。
algae<-algae[-manyNAs(algae),]
rt.a1<-rpart(a1~.,data=algae[ ,1:12])
• 函数的形式是用数据中其他所有变量来预测a1,data是用来设定建模 所用的数据集。
4/8/2014 4:50 PM 19
5.2 回归树模型(2)
回归树rt.a1的图形表示的两种方法:
3. 点击文件菜单下的“保存工作空间”,输入文件名,退出,下次打开 R后可通过拖拽的方式直接打开。
4/8/2014 4:50 PM 5
2 数据摘要
• 鉴于没有该问题领域足够的信息,首先了解一些数据的统计特性是一 种较好的方式,它方便我们更好地理解问题。 • 获取数据统计特性的方法之一是获取其描述性的统计摘要。命令如下:
summary(algae)
• 对于名义变量,它给出了每个可能取值的频数。 • 对于数值变量,它提供了均值、中位数、四分位数和极值等一系列统
计信息。NA's表示缺失值的个数。
• 通过观察这些值,我们可以了解到数据分布的偏度和分散情况。
4/8/2014 4:50 PM 6
3 数据可视化(1)
1. 绘制变量mxPH的直方图的两种方式: