当前位置:文档之家› 数据挖掘实验报告

数据挖掘实验报告

数据挖掘实验报告——加权K-近邻法一、 数据源说明1. 数据理解数据来自于天猫对顾客的BuyOrNot(买与不买),BuyDNactDN(消费活跃度),ActDNTotalDN(活跃度),BuyBBrand(成交有效度),BuyHit(活动有效度)这五个变量的统计。

数据分成两类数据,一类作为训练数据集,一类为测试数据集。

2.数据清理现实世界的数据一般是不完整的、有噪声的和不一致的。

数据清理例程试图填充缺失的值,光滑噪声并识别离群点,并纠正数据中的不一致。

a) 缺失值:当数据中存在缺失值是,忽略该元组 b) 噪声数据:本文暂没考虑。

二、 基于变量重要性的加权K-近邻法[1]由于我们计算K-近邻法默认输入变量在距离测度中有“同等重要”的贡献,但情况并不总是如此。

我们知道不同的变量对我们所要预测的变量的作用是不一定一样的,所以找出对输出变量分类预测有意义的重要变量对数据预测具有重要作用。

同时也可以减少那些对输出变量分类预测无意义的输入变量,减少模型的变量。

为此,采用基于变量重要性的K-近邻法,计算加权距离,给重要的变量赋予较高的权重,不重要的变量赋予较低的权重是必要的。

(1)算法思路:我们引进1w 为第i 个输入变量的权重,是输入变量重要性(也称特征重要性),FI 函数,定义为:∑==pji FI FI 1)i ()((i)w 。

其中(i)FI 为第i 个输入变量的特征重要性,∑=<1,1w )((i)i w 这里,(i)FI 依第i 个输入变量对预测误差的影响定义。

设输入变量集合包含p 个变量:p x x x x ,...,,,321。

剔除第i 个变量后计算输入变量p i i x x x x x x ,...,,,...,,,11321+-的误判率,记为)(i e 。

若第i 个变量对预测有重要作用,剔除变量后的预测误差)(i e 应较大。

于是,第i 个变量的重要性定义为:pe FI i 1)i (+=。

可见,变量越重要,在计算距离时的权重越高。

(2)算法步骤:step.1---求解出错判率最低的K 值 step.2---求解出第i 个变量的(i)FI(3)算法源代码library("class")Tmall_train<-read.csv("D:\\Documents\\Rword\\第一章\\Train_tmall.csv") Tmall_test<-read.csv("D:\\Documents\\Rword\\第一章\\天猫_Test_1.csv") par(mfrow=c(2,2)) set.seed(123456) errRatio<-vector() for(i in 1:30){KnnFit<-knn(train=Tmall_train[,-1],test=Tmall_test[,-1],cl=Tmall_train[,1],k=i,prob=FALSE) CT<-table(Tmall_test[,1],KnnFit)errRatio<-c(errRatio,(1-sum(diag(CT))/sum(CT))*100) }plot(errRatio,type="l",xlab="近邻个数k",ylab="错判率(%)",main="近邻数K 与错判率")从右边近邻数K 与错判率的图可明显看出,近邻个数为7时,误判率和稳健性最好errDelteX<-errRatio[7] for(i in -2:-5){fit<-knn(train=Tmall_train[,c(-1,i)],test=Tmall_test[,c(-1,i)],cl=Tmall_train[,1],k=7)CT<-table(Tmall_test[,1],fit)errDelteX<-c(errDelteX,(1-sum(diag(CT))/sum(CT))*100) }plot(errDelteX,type ="l",xlab="剔除变量",ylab="剔除错判率(%)",main="剔除变量与剔除错判率",cex.main=0.8)xTitle=c("1:全体变量","2:消费活跃度","3:活跃度","4:成交有效度","5:活动有效度") legend("topright",legend=xTitle,title="变量说明",lty=1,cex=0.6) FI<-errDelteX[-1]+1/4 wi<-FI/sum(FI)Glabs<-paste(c("度","活跃度","成交有效度","活动有效度"),round(wi,2),sep=":") pie(wi,labels = Glabs,clockwise = T,main="输入变量权重",cex.main=0.8)从上面两个图我们可以明显得出,消费活跃度、成交有效度及活动有效度在预测消费者买与不买中占的权重比较大,其中消费者消费活跃度在预测消费者买与不买的重要性最大,达到45%,是预测消费者消费的一个关键变量。

三、基于观测相似性的加权K-近邻法[2](1)核心思想:K-近邻法预测时,默认K 个近邻对观测结果又“同等力度“的影响。

事实上,据0X 的远近观测对预测贡献的大小是有影响的,距离越近对预测的贡献大于距离较远的预测贡献。

将相似性定义为各观测与0X 距离的某种非线性函数,且距离越近,相似性越强,权重越高,预测时的重要性越大。

设观测X 与0X 的距离为),0(∂∈≥d d d 。

若采用函数)(⋅K 将距离d 转换成X 与0X 的相似性,则函数K(d)应有如下特性:越远,相似性越小。

的单调减函数,即距离是)(近时相似性最大。

获得最大值,即距离最)(时,0。

,0)(d d K d K d d d K •=•∂∈≥• 通常,核函数是符合上述特征的函数。

若函数I 为示例函数,⎪⎩⎪⎨⎧≥<=1,01,1)(d d d I 通常核函数有:...。

)1().2exp(π21)():高斯核(。

)1()1()(:)(三角形核。

)1(.21)(:)均匀核(2<-=•<⋅-=•<=•d I dd K Kernel Gauss d I d d K Kernel Triangular d I d K Kernel Uniform(2)步骤第一步:求解误判率最低的k 值;第二步:加权K-近邻法与K-近邻法比较;(3)代码:○1求解误判率最低的k 值; Tmall_train<-read.csv("Train_tmall.csv")Tmall_train$BuyOrNot<-factor(Tmall_train$BuyOrNot)fit<-train.kknn(BuyOrNot~.,data=Tmall_train,kmax=11,distance=2,kernel=c("triangular","rectang ular","epanechnikov"),na.action=na.omit())plot(fit$MISCLASS[,1]*100,type="l",main="不同核函数和近邻个数K 下的错判率曲线图",cex.main=0.8,xlab = "近邻个数",ylab="误判率(%)") lines(fit$MISCLASS[,2]*100,lty=2,col=1) lines(fit$MISCLASS[,3]*100,lty=3,col=2) legend("topleft",legend = c("triangular","rectangular","epanechnikov"),lty=c(1,2,3),col=c(1,1,2),cex=0.7)基于稳健性我们选择了K=7时的误判率○2加权K-近邻法Tmall_test<-read.csv("天猫_Test_1.csv")Tmall_test$BuyOrNot<-as.factor(Tmall_test$BuyOrNot)fit<-kknn(BuyOrNot~.,train=Tmall_train,test=Tmall_test,k=7,distance=2,kernel="gaussian",na.ac tion=na.omit())CT<-table(Tmall_test[,1],fit$fitted.values)errRatio<-(1-sum(diag(CT))/sum(CT))*100K-近邻法Tmall_test<-read.csv("天猫_Test_1.csv")Tmall_test$BuyOrNot<-factor(Tmall_test$BuyOrNot)fit<-knn(train=Tmall_train[,-1],test=Tmall_test[,-1],cl=Tmall_train$BuyOrNot,k=7)CT<-table(Tmall_test[,1],fit)errRatio<-c(errRatio,(1-sum(diag(CT))/sum(CT))*100)errGraph<-barplot(errRatio,main=("加权K-近邻法与K-近邻法错判率对比图"),cex.main=0.8,xlab="分类方法",ylab="错判率(%)",axes=FALSE)axis(side=1,at=c(0,errGraph,3),labels=c("","加权K-近邻法","K-近邻法",""),tcl=0.25)axis(side=2,tcl=0.25)由上图可知,加权K-近邻法错判率比K-近邻法的错判率低,对数据的预测更准确。

相关主题