天商应用统计专硕数据挖掘及软件实现期末试题.docx
《天商应用统计专硕数据挖掘及软件实现期末试题.docx》由会员分享,可在线阅读,更多相关《天商应用统计专硕数据挖掘及软件实现期末试题.docx(16页珍藏版)》请在冰豆网上搜索。
天商应用统计专硕数据挖掘及软件实现期末试题
天津商业大学2017-2018学年第二学期期末考试
应用统计专业硕士2017级《数据挖掘与案例分析》试题
《数据挖掘与案例分析》(课程编码10923112
)学号姓名共1页第1页
说明:
简答与应用题答案标明题号写在答题纸上,写在试题纸上的无效。
一.简答题 (每小题10分,共30分)
1.简述你对数据挖掘领域的理解。
2.分类算法是数据挖掘的主要研究领域之一,对分类结果的评判指标有哪些?
请一一详细说明。
3.聚类算法是数据挖掘中的核心技术,聚类分析已被广泛应用于许多领域。
对聚类分析结果的评判指标有哪些?
请一一详细说明。
二.应用题(70分)
自愿分成两组(6人+5人),分别选取智能手机用户检测数据和美国航空数据,完成以下内容:
1.对数据进行描述统计分析(至少两个主题);
2.选取至少两种方法对数据进行聚类分析,比较聚类分析结果;
3.选取至少两种方法对数据进行分类,比较分析结果;
4.(选作)自选主题,进行异常点检测或关联分析。
注:
(1)简答题要求手写;应用题电子版、纸质版同时上交;
(2)应用题组内同学的主题不能重复;
(3)应用题可按以下顺序排版:
内容摘要:
1描述性统计
1.1
1.2
2聚类分析
2.1
2.2
3分类
3.1
3.2
4异常点检测(或关联分析)
附录:
程序代码
天津商业大学2017-2018学年第二学期期末考试
应用统计专业硕士2017级《数据挖掘与案例分析》考试答题纸
题目
一
二
三
总成绩
得分
阅卷
《数据挖掘与案例分析》(课程编码10923112)学号120179014姓名郭佳琦共13页第1页
说明:
答案标明题号写在答题纸上,写在试题纸上无效。
1.简述你对数据挖掘领域的理解。
2.分类算法是数据挖掘的主要研究领域之一,对分类结果的评判指标有哪些?
请一一详细说明。
3.聚类算法是数据挖掘中的核心技术,聚类分析已被广泛应用于许多领域。
对聚类分析结果的评判指标有哪些?
请一一详细说明。
1.描述性统计
本文定位于寻求因天气取消航班有关的的数据挖掘。
1.1截取2005-2008因天气导致取消航班数据,对应2005-2008日期-天气表,取消代码为1,取消原因为B的数据类进行数据分析。
图左上可知存在因天气航班取消天数远大于航班全部正常天数,说明不利天气是影响航班正常运营的重要因素。
1.2对于四年取消天数与年份关系,绘制棘状图,可以看出航班取消天数占年度比基本固定,浮动很小,可以推断随年代技术进步,航空公司仍然不能有效减弱因天气对航班正常起落带来的影响。
1.3对航班取消比率与年份作折线图,发现上年12月,当年1、2、6、7、8月航班取消率陡升,这恰恰是冬季与夏季,与此同时春秋两季航班取消率偏低,说明冬夏两季恶劣天气较为频发,雾霾、雨雪、雷电等天气严重影响正常航空运营。
1.4对能见度与航班正常起降比例作复合折线图,趋势上航班正常比例随平均能见度升高而升高。
最低能见度线可分析出其决定了航班何时不可起飞---最低能见度低于7.5以下绝对不可起飞。
最高能见度折线总趋势平均,而且最高能见度高不能代表满足现实飞行条件,因此该线不具有参考价值。
2聚类分析
2.1思路上,先对数据进行因子分析,降低维度,再进行聚类。
采用最大方差正交旋转法,由左图5因子累积方差基本达到85%。
此处虽然前五个可以代表85信息,但是为后续聚类的直观呈现来看暂且只取3因子并绘
图(解释原方差65%)。
载荷阵方向和因子代表元素客观方向(右上图),前2因子基本代表露点,气温,气压,湿度,能见度,F1:
高气温,低气压。
F2:
高湿度,高降水量,低能见度,回归原数据来看,只差风速和云量,基本涵盖原始信息,但是从图中可以看出二维聚类基本不可行,二维分布较为连续密集,图中易看出异常点特征明显,继续查看因素2,3的意义(左下图),F2:
高云量,F3:
高气压,低风速,因此选用3因素可以涵盖所有信息类别。
拖动3D图(右下图),从各个方向来看,数据像是密度下沉的球形,没有明显的聚类特征,不过为了作业,决定聚3类
采用k-means均值聚类,将三维数据聚成三类,分别是
Km-Data1:
低温低湿中风速:
DDZ
Km-Data2:
高温中湿高风速:
GZG
Km-Data3:
低温高湿低风速:
DGD
2.2同理,对上文因子分析后得出的三维因子数据进行聚类,采用EM聚类,仍然将原数据聚为3类。
由左下图,Em-Data1=低温高湿低风=DGD=Km-Data3
Em-Data2=低温低湿中风=DDZ=Km-Data1
Em-Data3=高温中湿高风=GZG=Km-Data2
聚类总结比较:
虽然采用两种不同方法,聚类中心点存在一定差异,但是从聚类结果的特点来看,EM聚类结果与先前K-means方法聚成的类特征上基本一致。
3分类
3.1Adaboost
将原始数据前1000作为训练集,后续作为测试集,所有列都参与训练。
训练集如上图所示,调用Rboosting包,进行预测,结果如下图。
整体预测准确率在64.54%,因为只考虑到起飞点的天气,没有对模型做整体航线的天气预测,即缺少落地点天气参与训练,因此效果不佳。
3.2随机森林
使用同样训练集,采用randomForest函数预测,准确率约为62.8%,略低于adaboost的训练结果。
其中实际航班取消准确率预测达到89.16%,但是将未取消航班预测错误率也高达87%,即极端恶劣天气是航班取消的必然因素,但是非极端天气不能仅仅靠天气数据准确预测航班的取消与否。
分类总结比较:
两者预测结果基本相近,预测准确率受限于数据的粗糙,模型原理过于简单,使精度很难通过改变分类器类型得到提高。
要获得更高精度的预测结果,应该致力于对影响航班更多方面信息的搜集以及构建更加复杂合理严谨的天气-航班取消模型。
4异常点检测
异常点监测先采用k-means聚类,对三类中元素与聚类中心点的欧氏距离进行衡量,通过比较距离是否超过某一阈值(距中心点欧氏距离>2.5)判断其是否为异常值。
结果如下图,标记出的红色点为满足条件的异常值点。
5附录:
程序代码
1.数据预处理
setwd("D:
/")
a=read.table("简码2005-2008属性简码.csv",sep=",",header=F)
b=read.table("简码weather.csv",sep=",",header=F)
head(a)
head(b)
nrow(a)
nrow(b)
a1=as.matrix(a)
b1=as.matrix(b)
a1[1,1]
b1[1,4]
b1[,1]=0
i=1
for(iini:
959){
c=which(b1[,4]==a1[i,1])
b1[c,1]=1}
print(b1[,1])
write.csv(b1,file="panbie.csv")
2.描述统计
setwd("D:
/1A保留文件/数据/航线")
library(splitstackshape)
a=read.table("简码2005-2008属性简码.csv",sep=",",header=F)
#所有出现取消航班的日期
b=read.table("简码weather.csv",sep=",",header=F)
#所有日期-天气组合
a1=as.matrix(a)
b1=as.matrix(b)
b1[,1]=0
i=1
for(iini:
959){
c=which(b1[,4]==a1[i,1])
b1[c,1]=1}
print(b1[,1])#套用循环将出现的日期标记为1,未出现航班取消标记为0
#write.csv(b1,file="panbie.csv")
air=read.csv("panbie.csv",sep=",",header=T)
dim(air)
c=cSplit(air,"日期代码","/")
dim(c)
head(c)
d=c[,c(1,21,22,23)]
head(d)
#将日期拆分,利于数据描述
pie(table(d[,1]),labels=c("航班未取消","航班取消"),main="2005-2008航班取消占比")
#1.取消和年度关系
library(vcd)
library(reshape2)
aiy=d[,c(1,2)]
bic=table(aiy)
spine(t(bic),main="航班取消年度图",xlab="年份",ylab="航班取消")#棘状图
#2.取消和月度关系
qx=table(d[,c(1,3)])
qxhbzb=qx[2,]/(qx[1,]+qx[2,])
plot(qxhbzb,xlab="月份",ylab="航班取消比例",col="blue",type="b",lwd=2.9)
#3.未取消航班和能见度关系
head(air)
qwe=air[,c(1,15,16,17)]
head(qwe)
max=table(qwe[,c(1,2)])
min=table(qwe[,c(1,4)])
mean=table(qwe[,c(1,3)])
#异常点修改
max[1,1]=0
max[2,1]=1
mean[1,2]=0
mean[2,2]=2
mx=max[1,]/(max[1,]+max[2,])
mn=min[1,]/(min[1,]+min[2,])
me=mean[1,]/(mean[1,]+mean[2,])
plot(mx,xlab="能见度",ylab="航班正常比例",col="blue",type="b",lwd=2.9,xlim=c(0,16),ylim=c(0,0.6))
lines(mn,col="red",lwd=2.9,type="o")
points(me,col="orange",lwd=3,type="l")
text(8.7,0,labels="最低能见度")
text(12.5,0.2,labels="平均能见度")
text(5,0.5,labels="最高能见度")
3.因子分析及聚类1
setwd("D:
/1A保留文件/数据/航线")
data=read.csv("panbie.csv",sep=",",header=T)
library(stats)
head(data)
dim(data)
X=data[,3:
21]#截取待分析数值数据
head(X)
library(mvstats)
Fac5=factpc(X,5,rot='varimax')#因子分析(最大方差正交旋转法),5个
Fac5$Vars#可看到5因子累积方差基本85%
cpve=Fac5$Vars[,3]/100#累积方差绘图
plot(cpve,xlab="因子个数",ylab="累积方差解释比例",ylim=c(0,1),type="b")
#由图,前五个可以代表85信息,但是作图直观与聚类来看暂且只取前2因子
Fac2=factpc(X,2,rot='varimax')
head(Fac2$loadings)#载荷阵
head(Fac2$scores)#因子得分
biplot(Fac2$scores,Fac2$loading)#绘图载荷阵方向和因子代表元素客观方向
#前2因子基本代表露点,气温,气压,湿度,能见度
#F1:
高气温,低气压。
F2:
高湿度,高降水量,低能见度
#回归原数据来看,只差风速和云量,基本涵盖原始信息,但是从图中可以看出二维聚类基本不可行
#二维分布连续,图中易看出异常点特征明显
library(rgl)
Fac3=factpc(X,3,rot='varimax')
head(Fac3$loadings)#载荷阵
head(Fac3$scores)#因子得分
biplot(Fac3$scores[,-1],Fac3$loadings[,-1])
#继续查看因素2,3的意义,F2:
高云量,F3:
高气压,低风速,因此选用3因素完全涵盖所有信息
colnames(Fac3$scores)=c("hightemp","highmoistshortsightseeing","slightwind")
#破函数不能显示中文坐标轴,采用英文代替
head(Fac3$scores)
plot3d(Fac3$scores)
#拖动3D图,从各个方向来看,数据像是密度下沉的球形,没有明显的聚类特征,不过为了作业,决定聚3类
Data=Fac3$scores
head(Data)
km=kmeans(Data,center=3,nstart=20)
print(km)
km$size/sum(km$size)
aaa=data.frame(Data,km$cluster)
Data1=Data[which(aaa$km.cluster==1),]
Data2=Data[which(aaa$km.cluster==2),]
Data3=Data[which(aaa$km.cluster==3),]
head(Data1)
summary(Data3)
par(mfrow=c(3,3))
plot(density(Data1[,1]),col="red",main="D1高温")
plot(density(Data2[,1]),col="red",main="D2低温")
plot(density(Data3[,1]),col="red",main="D3低温")
plot(density(Data1[,2]),col="red",main="D1低湿")
plot(density(Data2[,2]),col="red",main="D2高湿")
plot(density(Data3[,2]),col="red",main="D3低湿")
plot(density(Data1[,3]),col="red",main="D1高风速")
plot(density(Data2[,3]),col="red",main="D2低风速")
plot(density(Data3[,3]),col="red",main="D3中风速")
聚类2
setwd("D:
/1A保留文件/数据/航线")
data=read.csv("panbie.csv",sep=",",header=T)
library(stats)
head(data)
dim(data)
X=data[,3:
21]#截取待分析数值数据
library(mvstats)
Fac3=factpc(X,3,rot='varimax')
colnames(Fac3$scores)=c("温度","湿度","风速")
Data=Fac3$scores
library(mclust)
em=Mclust(Data,3)
summary(em,parameters=T)
plot.Mclust(em,what="classification")
plot.Mclust(em,what="density")
Adaboost和随机森林
setwd("D:
/1A保留文件/数据/航线")
air=read.csv("panbie.csv",sep=",",header=T)
library(adabag)
dim(air)
head(air)
air$判别=as.factor(air$判别)
air1=air[,-2]
train1=air[1:
1000,]
train=train1[,-2]
head(train)
class(train)
class(train$判别)
dim(train$判别)
train$判别=as.factor(train$判别)
airbomb=boosting(判别~.,data=train)
test1=air[1001:
1454,]
test=test1[,-2]
test$判别=as.factor(test$判别)
print(predict(airbomb,test)$confusion)
print(predict(airbomb,test)$error)
library(randomForest)
model.forest=randomForest(判别~.,data=train,ntree=500,mtry=2)
model.forest
4.异常点检测
setwd("D:
/1A保留文件/数据/航线")
data=read.csv("panbie.csv",sep=",",header=T)
library(stats)
library(mvstats)
Fac3=factpc(data[,3:
21],3,rot='varimax')
Data=scale(Fac3$scores)
km=kmeans(Data,center=3,nstart=20)
print(km)
km$centers
x1=matrix(km$centers[1,],nrow=1454,ncol=3,byrow=T)
juli1=sqrt(rowSums((Data-x1)^2))
x2=matrix(km$centers[2,],nrow=1454,ncol=3,byrow=T)
juli2=sqrt(rowSums((Data-x2)^2))
x3=matrix(km$centers[3,],nrow=1454,ncol=3,byrow=T)
juli3=sqrt(rowSums((Data-x3)^2))
dist=data.frame(juli1,juli2,juli3)
y=apply(dist,1,min)
plot(1:
1454,y,xlim=c(0,1454),xlab="样本点",ylab="欧氏距离")