7章分类指标建模:分类分析
决策树分裂
信息增益:信息熵;信息增益
gain(X)=info(S)-info1(S)=熵-条件熵
CART算法:二分支,Gini系数
C4.5:多分支,连续/离散变量,信息增益比率(info gain ratio)
C4.5如何停止分裂:剩余样本数小于某个给定阈值Minimun_Support,则返回一个叶节点,停止分裂。这是前剪枝(preprune)的实施方式。
后剪枝(postprune):置信度和减少-误差两种算法。
(1)置信度(俗称:可信度)(取值为0-1,典型值为0.75)。设置最小置信度阈值min_confidence,
然后从底部(接近底层,叶节点)依次比较,小于的节点剪枝。可见min_confidence设置得越大(接近1,反之接近0),剪枝强度越大,树越小。
(2)减少-误差剪枝:通过测试集数据,计算每个节点的误差。先计算待剪子树的父决策节点的误差,然后计算待剪字数内所有叶节点的加权误差之和,
然后比较,加权误差之和大于父决策节点的误差,剪枝,否则不能剪除。实际操作:把训练集数据折成N(默认为3)份,取1份作为计算误差的训练集数据,其他用于建立决策树模型。
ID3:多分支,不支持连续变量,信息增益(info Gain)
建立自定义函数来划分训练集和测试集:train.data.persent是训练集占data的比例,默认为0.7(一般划分比例为1:1或7:3)
apart.data<-function(data,train.data.persent=0.7){
train.index<-sample(c(1:nrow(data)),round(nrow(data)*train.data.persent))
data.train<-data[train.index,]
data.train<-data[-c(train.index),]
result<-list(train=data.train,test=data.test)
result
}
p.data<-apart.data(data)
data.train<-p.data$train
data.test<-p.data$test
在R语言中实现C4.5算法:
RWeka包中的J48函数调用weka的C4.5算法:J48(formula,data,subset,na.action,control=Weka_control()):
注意:目标变量只能是分类型,必须是factor因子类型
7.1.3 P255
CART算法:Classification And Regression Tree即分类回归树。分类型目标变量建模(分类分析),连续型目标变量建模(回归分析)
CART算法使用目标变量的纯度来分裂决策节点,分裂度量是Gini增益。注意注意注意:CART内部只支持二分支树。
Gini增益的本质也是对目标变量的纯度进行度量。
CART的剪枝算法采用的是最小代价复杂度剪枝法(Minimal Cost Complexity Pruning)MCCP。
CART算法:
R语言rpart包,rpart(formula,data,subset,na.action=na.rpart,method,parms,controls,..)
formula:目标变量Y只能是分类型,即因子factor对象
method:变量分割方法,该参数有4种取值:连续性对应anova;分类型(因子)对应class;计数型对应possion(泊松);生存分析型对应exp。
control:模型建立时用于停止分裂的一些参数,其值是rpart.control,其主要参数是:
剪枝:prune函数:通过设置cp(复杂度系数)参数来进行剪枝prune(***,cp=0.0102) 263页,需与第6章的1-标准差规则相结合。
预测:predict函数:predict(训练集,测试集)有时候只给概率,需要用type=‘class’实现。
7.1.4 P265
7.1.4条件推理决策树算法
条件推理决策树算法(Conditional inference trees)
R语言party包ctree函数
ctree函数跟上雷同:ctree(formula,data,subset,na.action=na.rpart,method,controls,...)
7.1.5随机森林算法
随机森林算法(random forest):基于固定概率分布,从原始训练集中可重复选取N个样本形成t个子训练集,然后产生t棵决策树,最后组成一棵决策树。
R语言中,基于CART算法的随机森林算法:
rpart包的randomForest函数
基于条件推理决策树算法的随机森林算法:party包的cforest函数。
一般来说,随机森林算法的效果要比一般的决策树均好很多。
7.2贝叶斯分类 P268
贝叶斯分类器(Bayesian classifiers)是基于贝叶斯定力计算目标条件概率P{Y|X}(自变量在不同取值下,目标变量各分类取值的概率)的一种建模方法。
朴素贝叶斯算法:
e1071包的naiveBayes函数
贝叶斯定理:P{X,Y}=P{Y|X}*P{X}=P{X|Y}*P{Y}
多元:P{Y|X1,X2,X3}=P{X1,X2,X3|Y}*P{Y}/P{X1,X2,X3}
P{Y|X1,X2,X3}=P{X1|Y}*P{X2|Y}*P{X2|Y}*P{Y}/P{X1,X2,X3}
朴素贝叶斯分类器基本公式:P{Y|X1,...,Xn}=(∏nP{Xi|Y})*P{Y}/P{X1,...,X3} ∏:积
7.3支持向量机SVM P271
分类器y=f(x1,x2)划分规则
R语言e1071包的svm函数进行非线性svm分析
svm(y~x1+x2,data=data,probability=TRUE)
7.4人工神经网络 P275
7.4.1神经元
神经元是网络中的基本单元,主要分为:权重系数、加法器、激活函数3个部分
P275理论有空再次细看
7.4.3反向传播算法(backpropagetion)是神经网络中的经典算法
R语言nnet包的nnet函数,nnet函数的参数(与rpart公式类似)如下:
7.4.5隐藏层中神经单元数目的确定:即size参数的个数
7.5分类器的性能评估
7.5.1混淆矩阵
混淆矩阵(Confusion Matrix)用于把样本实际值(true class)和模型预测值(predicted class)进行联列表分析。
TP,TN,FP,FN含义:
查全率也叫灵敏度和召回率
7.5.2 ROC曲线和AUC:受试者特征曲线ROC和曲线下面积AUC
P287
看原pdf文档,认真看
ROC曲线
横坐标是假正率(FPR)=1-特指度(1-Specicity)
纵坐标是真正率(TPR)=灵敏度(Sensitivity)
ROCR包:先加载,然后使用prediction函数对数据格式进行转化,得到一个可被ROCR包的核心函数preformance使用的数据对象,最后使用preformance函数计算各种数据指标,并用plot函数绘制相关曲线。
AUC的面积越大,该模型ROC曲线表现越好,模型越可用
AUC:ROCR包中,把preformance函数中的measure参数设置为auc可以得到AUC数值。
灵敏度sens、特指度spec都是通过preformance函数计算灵敏度,流程:设置measure=‘’;
例如:preformance(predictions,measure=‘sens’)@y.values
输出结果:[[1]]
[1] 0.0000 0.73031 1.0000
解释:由于prediction函数是模型预测出的分类数值(只能取0和1),所以计算出的灵敏度只有3个数值,其中第二个为实际的灵敏度。
7.5.3提升度和提升曲线 P291
1.提升度的定义和含义
提升度lift的定义是:lift=TPR/((TP+FP)/C),即提升度lift等于TPR(真正率)除以预测正例的比例,这里把(TP+FP)/C称为深度depth。
例如:1000个有100个潜在用户,群发短信的效率是10%(即响应率是10%),通过研究用户,建分类模型从而得到比较积极的100名(通过预测正例的概率进行排序呢,取前100个样本)。
如果此时100个用户中有30个潜在客户,则命中率为30%=TPR.此时的提升度lift=30%/10%=3,客户的响应率提升至原来的3倍,提高了投入产出比。
提升度:ROCR包,把performance函数中的measure参数设置为lift;measure设置为rpp可以得到深度数值
performance(predictions,measure=‘’)@y.values[[1]]
2.提升曲线
plot(depth,lift,type='l',main='lift图',ylab='提升度(lift)',xlab='深度(depth)')
当阈值为0时,所有的样本都被预测为正例,因此depth=1,TPR=1,于是lift=1,模型未起提升作用。
lift曲线凸向(0,1)点。模型lift曲线的右半部分应该尽量陡峭。
7.5.4洛伦兹(lorenz)曲线
1.洛伦兹曲线定义
纵轴是TPR,横轴是深度depth=(TP+FP)/C
代码如下:继续用preformance函数,修改measure为tpr或rpp,后面再加上@y.values[[1]]
作图:plot(depth,tpr,type='l',main='lorenz图',ylab='查全率(tpr)',xlab='深度(depth)')
洛伦兹曲线和ROC曲线类似,是一个凸向(0,1)点的曲线
2.洛伦兹曲线和提升曲线、ROC曲线的区别:
信用评分问题:需要考虑尽量增大TPR(查全率),同时减小FPR(减少误判),因此选择ROC和AUC作为指标
精准营销问题:尽量提高lift(提升度),同时depth不能调小(如果只给一个消费者发放宣传信息,虽然响应率较大,却无法得到足够多的响应),因此选择提升曲线或洛伦兹曲线作为指标。
P.S:TPR(查全率或灵敏度)=TP/(TP+FN);FPR(1-特指度)=FP/(TN+FP)
lift=TPR/((TP+FP)/C) ;depth=(TP+FP)/C