KNN算法分类回归树随机森林的优缺点及应用实例

如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。KNN算法的指导思想是“近朱者赤,近墨者黑”,由邻居来推断出类别。

「计算步骤如下:」

算距离:给定测试对象,计算它与训练集中的每个对象的距离。包括闵可夫斯基距离、欧氏距离、绝对距离、切比雪夫距离、夹角余弦距离;

找邻居:圈定距离最近的k个训练对象,作为测试对象的近邻;

做分类:根据这k个近邻归属的主要类别,来对测试对象分类

「K的含义」:来了一个样本x,要给它分类,即求出它的y,就从数据集中,在x附近找离它最近的K个数据点,这K个数据点,类别c占的个数最多,就把x的label设为c。K-近邻法中的邻近个数,即K的确定,是该方法的关键。

「优点:」

「缺点:」

主要的不足:当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。该算法只计算“最近的”邻居样本,某一类的样本数量很大,那么或者这类样本并不接近目标样本,或者这类样本很靠近目标样本。

计算量较大,因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点。

可理解性差,无法给出像决策树那样的规则。

R进行KNN的实例

输出结果:

「随机数据进行KNN分类:」

上图中,第一幅图为观测全体在特征空间中的分布,三角和圈分别表示输出变量的类别值分别为0和1;第二幅图是训练样本集和测试样本集的观测分布,其中有填充色的点属于测试样本集;

第三幅图黑线为全部观测进入训练样本集时的错判概率线,K=1时预测错误率一般为0;红色虚线为旁置法的错判概率曲线,K=9时达到最小;红色实线为留一法错判概率曲线,K=7时达到最小。「留一法的曲线基本在旁置法下方,应是较为客观的预测错误估计」。第四幅图是回归预测时测试样本集的均方误差随参数K变化的曲线。

KNN应用——天猫数据集

library(class)Tmall_train<-read.table(file="天猫_Train_1.txt",header=TRUE,sep=",")head(Tmall_train)#BuyOrNotBuyDNactDNActDNTotalDNBuyBBrandBuyHit#116.3851.092.831.57#218.9360.873.202.17#3116.1333.7011.636.36#4116.2240.2211.296.25#513.8556.521.891.45#614.0054.352.131.28Tmall_train$BuyOrNot<-as.factor(Tmall_train$BuyOrNot)Tmall_test<-read.table(file="天猫_Test_1.txt",header=TRUE,sep=",")head(Tmall_test)#BuyOrNotBuyDNactDNActDNTotalDNBuyBBrandBuyHit#100.0054.840.000.00#217.6983.872.360.83#3114.2990.324.763.89#4110.0032.267.694.00#5115.3841.948.706.98#600.0019.350.000.00Tmall_test$BuyOrNot<-as.factor(Tmall_test$BuyOrNot)

模型方法同上:

结合上图并兼顾KNN分析的稳健性等考虑,采用K=7的分析结论,错判率为3.3%。

基于变量重要性的加权KNN

KNN默认各输入变量在距离测度中有“同等重要”的贡献,但情况并不总是如此。因此需要采用基于变量重要性的加权KNN,计算加权距离,给重要变量赋予较高的权重,不需要的变量赋予较低的权重是必要的。

天猫数据KNN分类讨论变量的重要性

上图中第一幅图为普通KNN方法;

第二幅图为确定K=7后,逐个剔除变量,剔除后的错判率曲线("1:全体变量","2:消费活跃度","3:活跃度","4:成交有效度","5:活动有效度"),可见剔除消费活跃度后错判概率显著增加,说明消费活跃度对预测的影响巨大;剔除活跃度后错判概率大幅下降,说明该变量包含较强噪声,对预测性能有负面影响;剔除成交有效性后错判率也大幅上升,说明该变量对预测贡献较大;

根据FI定义计算各个输入变量的重要性,确定的权重如第三幅图;第四幅图是消费活跃度和成交有效度特征空间中观测点的分布情况,黑色圆圈表示无成交,红色三角表示有成交,可见所有无交易点均在消费活跃度和成交有效度等于0处,消费活跃度和成交有效度大于0则均为有成交。

综上,结论如下:

①在近邻数K=7时,普通KNN方法对测试样本集的错判率仅为3.3%,效果较好;

②大部分成交顾客处于消费活跃度和成交有效性取值水平较低的位置,在消费活跃度和成交有效性上取值较高处的成交顾客数量很少,可作为日后顾客营销策略的参考依据

基于观测相似性的加权KNN

决策树&随机森林

决策树的目标是建立分类预测模型或回归预测模型。决策树(decisiontree)也称判定树,它是由对象的若干属性、属性值和有关决策组成的一棵树。其中的节点为属性(一般为语言变量),分枝为相应的属性值(一般为语言值)。从同一节点出发的各个分枝之间是逻辑“或”关系;根节点为对象的某一个属性;从根节点到每一个叶子节点的所有节点和边,按顺序串连成一条分枝路径,位于同一条分枝路径上的各个“属性-值”对之间是逻辑“与”关系,叶子节点为这个与关系的对应结果,即决策属性。

「根节点」:决策树最上层的点,一棵决策树只有一个根节点;

「叶节点」:没有下层的节点称为叶节点;

「中间节点」:位于根节点下且自身有下层的节点。中间节点可分布在多个层中,同层节点称为兄弟节点。上层节点是下层节点的父节点,下层节点是上层节点的子节点。根节点没有父节点,叶节点没有子节点。

**2叉树和多叉树**:若树中每个节点最多只能长出两个分枝,即父节点只能有两个子节点,这样的决策树称为2叉树。若能长出不止两个分枝,即父节点有两个以上的子节点,这样的决策树称为多叉树。

决策树分为分类树和回归树,分别对应分类预测模型和回归预测模型,分别用于对分类型和数值型输出变量值的预测。

决策树主要围绕两个核心问题展开:

「决策树的生长」。即利用训练样本集完成决策树的建立过程。决策树一般不建立在全部观测样本上,通常需首先利用旁置法,将全部观测样本随机划分训练样本集和测试样本集。在训练样本集上建立决策树,利用测试样本集估计决策树模型的预测误差;

「决策树的剪枝」。即利用测试样本集对所形成的决策树进行精简。

分类回归树的R实现

设置预修剪等参数的R函数:

rpart.control(minsplit=20,maxcompete=4,xval=10,maxdepth=30,cp=0.01)#minsplit:指定节点最小样本量,默认为20#maxcompete:指定按变量重要性降序,输出当前最佳分组变量的前若干个候选变量,默认为4#xval:指定进行交叉验证剪枝时的交叉折数,默认为10#maxdepth:指定最大树深度,默认为30#cp:指定最小代价复杂度剪枝中的复杂度CP参数值,默认为0.01

当参数cp采用默认值0.01且R给出的决策树过小时(由于0.01过大的结果),可适当减小cp参数值。如可指定参数cp为0,此时的决策树是满足预修剪参数下的未经后修剪的最大树,实际应用中这棵树可能过于茂盛。再次基础上,R将依次给出CP值从0开始并逐渐增大过程中经过若干次修剪后的决策树。

可视化决策树的R函数:

rpart.plot(决策树结果对象名,type=编号,branch=外形编号,extra=1)#决策树对象名:rpart函数返回对象;#type:决策树展示方式。可取值:0~4;#branch:指定决策树外形,可取0(斜线连接)和1(垂线连接);#extra:指定在节点中显示哪些数据。可取1~9

复杂参数CP对预测误差的影响:

#复杂度参数CP是决策树剪枝的关键参数,其设置是否合理直接决定决策树是否过于复杂而出现过拟合,或是否过于简单而无法得到理想的预测精度。可通过函数printcp和plotcp浏览与可视化cp值:printcp(决策树结果对象名)plotcp(决策树结果对象名)

分类回归树的应用:提炼不同消费行为顾客的主要特征

1.初建分类树

#install.packages("rpart")#install.packages("rpart.plot")library(rpart)library(rpart.plot)BuyOrNot<-read.table(file="消费决策数据.txt",header=TRUE)BuyOrNot$Income<-as.factor(BuyOrNot$Income)#指定收入为因子BuyOrNot$Gender<-as.factor(BuyOrNot$Gender)#指定性别为因子#指定预修剪等参数,复杂度参数CP为0Ctl<-rpart.control(minsplit=2,maxcompete=4,xval=10,maxdepth=10,cp=0)set.seed(12345)TreeFit1<-rpart(Purchase~.,data=BuyOrNot,method="class",parms=list(split="gini"),control=Ctl)rpart.plot(TreeFit1,type=4,branch=0,extra=2)printcp(TreeFit1)#可视化CP值plotcp(TreeFit1)

结果显示,根节点包括全部431个观测样本,其中「162个输出变量值为1的观测被误判为0,错判率为38%」。左图中,(不含序号)第1列为CP值,第2列nsplit为样本数据共经过的分组次数,第3列relerror是预测误差相对值的估计,第4列xerror是交叉验证的预测误差相对值,第5列xstd为预测误差的标准误。

需要注意的是,这里的第3~4列给出的是以根节点预测误差为单位1的相对值。例如:本例中根节点的预测错误率162/431为单位1,经2次分组得到3个叶节点的分类树,因错误相对值为0.944,所以该树总的预测错误率为153/431。

当复杂度参数CP取指定值0时,此时的分类树是经过51次分组的结果,包含52个叶节点,与右图对应。此时分类树的预测误差估计值为0.667。经过交叉验证,在CP参数增加至0.002过程中进行了若干次剪枝,此时决策树是36次分组后的结果,包含37个节点,预测误差相对值为0.698,增加了0.031个单位。

右图纵坐标为根节点的交叉验证预测误差为单位1时,当前决策树的交叉验证预测误差的单位数;横坐标从右往左是CP列表中8个CP值的典型代表值β,上方对应的是当前决策树所包含的叶节点个数。可以看出,「包含12个叶节点的决策树有最低的交叉验证预测误差」。

2.再建分类树

set.seed(12345)#默认参数(TreeFit2<-rpart(Purchase~.,data=BuyOrNot,method="class",parms=list(split="gini")))TreeFit2rpart.plot(TreeFit2,type=4,branch=0,extra=2)#可视化决策树printcp(TreeFit2)#显示复杂度CP参数列表#指定cp=0.008,建立前述包含12个叶节点的决策树TreeFit3<-prune(TreeFit1,cp=0.008)rpart.plot(TreeFit3,type=4,branch=0,extra=2)printcp(TreeFit3)plotcp(TreeFit3)

上图是按系统默认参数构建决策树,CP参数为默认初始值0.01,异质性指标采用Gini系数。节点2后的星号*标记表示为叶节点,其中所有观测的Income取1或2,样本量为276,其中88个输出变量为1的观测点被误判为0,置信度为0.68,错判率0.32。其余同理。

「分类回归树只能建立2叉树」

建立分类回归树的组合预测模型:给出稳健预测

分类回归树具有不稳定性,模型会随训练样本的变化而剧烈变动。组合预测模型是提高模型预测精度和稳健性的有效途径,其首要工作是基于样本数据建立一组模型而非单一模型;其次,预测时由这组模型同时提供各自的预测结果,通过类似“投票表决”的形式决定最终的预测结果。

组合预测中的单个模型称为「基础学习器(BaseLearner)」,通常有相同的模型形式,如决策树或其他预测模型等。多个预测模型是建立在多个样本集合上的。

如何获得多个样本集合,以及如何将多个模型组合起来实现更合理的“投票表决”,是组合模型预测中的两个重要方面。对此,常见的技术有「袋装(Bagging)技术」和「推进(Boosting)技术」。

1.袋装技术的R实现

2.袋装技术的应用:稳健定位目标客户

library(rpart)MailShot<-read.table(file='邮件营销数据.txt',header=T)MailShot<-MailShot[,-1]#剔除IDCtl<-rpart.control(minsplit=20,maxcompete=4,maxdepth=30,cp=0.01,xval=10)#rpart的默认参数set.seed(12345)TreeFit<-rpart(MAILSHOT~.,data=MailShot,method="class",parms=list(split="gini"))#建立单一分类树rpart.plot(TreeFit,type=4,branch=0,extra=1)CFit1<-predict(TreeFit,MailShot,type="class")#利用单个分类树对全部观测进行预测#CFit1<-predict(TreeFit,MailShot)ConfM1<-table(MailShot$MAILSHOT,CFit1)#计算单个分类树的混淆矩阵#CFit1#NOYES#NO11946#YES3996(E1<-(sum(ConfM1)-sum(diag(ConfM1)))/sum(ConfM1))#计算单个分类树的错判率#0.2833333

首先建立单个分类树,并利用单个分类树对全部观测做预测,错判率为0.28。

##利用ipred包中的bagging建立组合分类树library(ipred)set.seed(12345)MailShot$MAILSHOT<-as.factor(MailShot$MAILSHOT)#不转换数据类型一直报错(BagM1<-bagging(MAILSHOT~.,data=MailShot,nbagg=25,coob=TRUE,control=Ctl))#bagging建立分类组合树CFit2<-predict(BagM1,MailShot,type="class")#利用组合分类树对全部观测进行预测ConfM2<-table(MailShot$MAILSHOT,CFit2)#计算组合分类树的混淆矩阵(E2<-(sum(ConfM2)-sum(diag(ConfM2)))/sum(ConfM2))#计算组合分类树的错判率#0.196667

利用ipred包中的bagging函数建立组合分类树,袋装过程默认进行28次重抽样自举,生成25颗分类树。基于袋外观测(OOB)的预测误差为0.457。利用组合分类树并对全部观测做预测,错判率为0.197。「预测精度较单一分类树有一定提高」

predict函数type指定为class时,给出的预测结果时分类值。不指定参数,默认给出的预测结果是各类别的概率值(预测置信度)。

##利用adabag包中的bagging函数detach("package:ipred")library(adabag)MailShot<-read.table(file="邮件营销数据.txt",header=TRUE)MailShot<-MailShot[,-1]Ctl<-rpart.control(minsplit=20,maxcompete=4,maxdepth=30,cp=0.01,xval=10)set.seed(12345)BagM2<-bagging(MAILSHOT~.,data=MailShot,control=Ctl,mfinal=25)BagM2$importance#AGECARGENDERINCOMEMARRIEDMORTGAGEREGIONSAVE#17.7613373.2028056.12677949.2173487.5398295.3982848.4256302.327989CFit3<-predict.bagging(BagM2,MailShot)#利用组合分类树对全部观测进行预测CFit3$confusionCFit3$error

adabag包中的bagging函数建立组合分类树,参数设置同前。函数自动计算了输入变量重要性的测度结果,并进行了归一化处理。输出变量重要性为归一化后的百分比。本例中较为重要的两个输入变量依次为收入(INCOME)和年龄(AGE)。

用组合分类树对全部观测做预测的错判率为,预测精度较单一分类树有一定提高。

3.推进技术的R实现

袋装技术中,自举样本的生成完全是随机的。多个模型在预测投票中的地位也都相同,未考虑不同模型预测精度的差异性。推进技术在这两方面进行了调整,其中的AdaBoost(AdaptiveBoosting)策略已有较为广泛的应用。

与袋装技术不同的是,AdaBoost采用的是加权投票方式,不同的模型具有不同的权重,权重大小与模型的预测误差成反比。预测误差较小的模型有较高的投票权重,预测误差较大的模型投票权重较低。可见,「权重越高的模型,对决策结果的影响越大」。

#adabag包中的boosting函数boosting(输出变量名~输入变量名,data=数据框,mfinal=重复次数,boos=TRUE,coeflearn=模型权重调整方法,control=参数对象名)#指定重复自举次数,默认100#boos=TRUE表示每次自举过程均调整各观测进入训练样本集的权重#coeflearn:指定预测时各模型的权重设置方法。可取值Breiman或Freund或zhu#boosting函数的基础学习器为分类树,control参数应为rpart的默认参数

bagging函数返回值是列表。tree成分中存储k颗分类树的结果;votes中存储k个模型的投票情况;prob中存储预测类别的概率值;class为预测类别;importance为输入变量对输出变量预测重要性的得分;weight为各个模型的预测权重。

4.推进技术的应用:文件定位目标客户

library(adabag)MailShot<-read.table(file="邮件营销数据.txt",header=T)MailShot<-MailShot[,-1]MailShot$MAILSHOT<-as.factor(MailShot$MAILSHOT)Ctl<-rpart.control(minsplit=20,maxcompete=4,maxdepth=30,cp=0.01,xval=10)set.seed(12345)BoostM<-boosting(MAILSHOT~.,data=MailShot,boos=TRUE,mfinal=25,coeflearn="Breiman",control=Ctl)BoostM$importance#AGECARGENDERINCOMEMARRIEDMORTGAGEREGIONSAVE#23.6661033.8211413.59749943.1188055.4246184.78297611.0573694.531490ConfM4<-table(MailShot$MAILSHOT,BoostM$class)E4<-(sum(ConfM4)-sum(diag(ConfM4)))/sum(ConfM4)E4#0.02666667

本例中,较为重要的两个输入变量依次为收入和年龄。用组合分类树对全部观测做预测的错判率为0.027,较单一分类树有显著提高。

袋装技术与推进技术有类似的研究目标,但两者训练样本集的生成方式不同,组合预测方式也不同。两者均可有效地提高预测准确性。「在大多数数据集中,推进技术的准确性一般高于袋装技术,但也可能导致过拟合问题。」

随机森林:具有随机性的组合预测

随机森林的内嵌模型,即基础学习器是分类回归树,其特色在于随机,表现在两个方面:

训练样本是对原始样本的重抽样自举,训练样本具有随机性;

在每颗决策树的建立过程中,称为当前最佳分组变量的输入变量,是输出变量全体的一个随机候选变量子集中的竞争获胜者。分组变量具有随机性

「Bagging方法的主要过程:」

训练分类器。从整体样本集合中,抽样n*

分类器进行投票,最终的结果是分类器投票的优胜结果

随机森林是以决策树为基本分类器的一个集成学习模型,它包含多个由Bagging集成学习技术训练得到的决策树。前面描述了原始的树的bagging算法。RandomForests不同的是:在Bagging的基础上,他们使用一种改进的树学习算法,这种树学习算法在每个候选分裂的学习过程中,选择特征值的一个随机子集。这个过程有时被称为“「featurebagging」”。

以决策树为基本模型的bagging在每次bootstrap放回抽样之后,产生一棵决策树,抽多少样本就生成多少棵树,在生成这些树的时候没有进行更多的干预。而随机森林也是进行bootstrap抽样,但它与bagging的区别是在生成每棵树的时候,每个节点变量都仅仅在随机选出的少数变量中产生。因此,不但样本是随机的,连每个节点变量(Features)的产生都是随机的。

「随机森林分类性能的主要因素:」

森林中单颗树的分类强度(Strength):每颗树的分类强度越大,则随机森林的分类性能越好。

「随机森林的几个理论要点:」

收敛定理。它度量了随机森林对给定样本集的分类错误率。

袋外估计。Breiman在论文中指出袋外估计是无偏估计,袋外估计与用同训练集一样大小的测试集进行估计的精度是一样的。

「随机森林的优点:」

它可以处理大量的输入变量。

它可以在决定类别时,评估变量的重要性。

在建造随机森林时,它可以在内部对于一般化后的误差产生无偏差的估计。

它包含一个好方法可以估计遗失的资料,并且,如果有很大一部分的资料遗失,仍可以维持准确度。

它提供一个实验方法,可以去侦测variableinteractions。

它计算各例中的亲近度,对于数据挖掘、侦测偏离者(outlier)和将资料视觉化非常有用。

使用上述。它可被延伸应用在未标记的资料上,这类资料通常是使用非监督式聚类。也可侦测偏离者和观看资料。

学习过程是很快速的。

可以实现并行运行

「随机森林的缺点:」

随机森林已经被证明在某些噪音较大的分类或回归问题上会过拟

对于有不同级别的属性的数据,级别划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的。

由于随机选择属性,得单棵决策树的的预测效果很差

投票机制中,并不是所有的树都能够准确地标记出所有的对象。

「随机森林的应用:」

随机森林是现在研究较多一种数据挖掘算法,由于其良好的性能表现,在现实生活中也获得了广泛的应用。随机森林主要应用于回归和分类。

随机森林的R实现

#randomForest包中的randomForst函数randomForest(输出变量名~输入变量名,data=数据框名,mtyr=k,ntree=M,importance=TRUE)#mtry:指定决策树各节点的输入变量个数k。若输出变量为因子,随机森林中的基础学习器为分类树;若为数值型变量,则基础学习器为回归树;#ntree:指定随机森林包含M颗决策树,默认为500;#importance=TRUE:表示计算输入变量对输出变量重要性的测度值

randomForets函数的返回值为列表,包含以下成分:

predicted:基于袋外观测OOB的预测类别或预测值;confusion:基于袋外观测OOB的混淆矩阵;votes:适用于分类树。给出各预测类别的概率值,即随机森林中有多少臂力的分类树投票给第i个类别;oob.times:各个观测值作为OOB的次数,即在重抽样自举中有多少次未进入自举样本,其会影响基于袋外观测OOB的预测误差结果;err.rate:随机森林中各个决策树基于OOB的整体预测错误率,以及对各个类别的预测错误率;importance:输入变量重要性测度矩阵。

随机森林的应用:文件定位客户目标

library(randomForest)MailShot<-read.table(file="邮件营销数据.txt",header=T)MailShot<-MailShot[,-1]set.seed(12345)(rFM<-randomForest(MAILSHOT~.,data=MailShot,importance=TRUE,proximity=TRUE))head(rFM$votes)#各观测的各类别预测概率head(rFM$oob.times)#各观测作为OOB的次数

随机森林共建了500颗决策树,每个节点的候选输入变量个数为2。基于袋外观测OOB的预测错判率为45%。从袋外观测的混淆矩阵看,模型对两个类别的预测精度均不理想。对NO类的预测错误率为36.4%,对YES类的预测错误率为55.6%。

以第一个观测为例:有62.8%的决策树投票给NO,37.2%的决策树投票给YES。有183次作为OOB未进入训练样本集。

DrawL<-par(mfrow=c(2,1),mar=c(5,5,3,1))plot(rFM,main="随机森林的OOB错判率和决策树颗数")plot(margin(rFM),type="h",main="边界点探测",xlab="观测序列",ylab="比率差")#探测边界点par(DrawL)Fit<-predict(rFM,MailShot)#随机森林对全部观测做预测ConfM5<-table(MailShot$MAILSHOT,Fit)#随机森林对全部观测做预测的混淆矩阵(E5<-(sum(ConfM5)-sum(diag(ConfM5)))/sum(ConfM5))#随机森林的整体错判率#0.03

对OOB错判率随随机森林中决策树数量的变化特点进行可视化,plot的绘图数据为err.rate。图中黑色线为整体错判率,红色线为对NO类预测的错判率,绿色线为对YES类预测的错判率。可见,模型对NO类的预测效果好于对整体和YES类的。当决策树达到380以后,各类错判率基本保持稳定。所以本例中参数ntree可设置为380。

下面的图为使用margin函数考察处于分类边界附近的点的错判情况。该函数以差的升序返回所有观测的比率差。其中,比率差近似等于0的观测红色类(NO类)居多,多蓝类(YES类)的预测错误较多。

treesize函数可用于显示随机森林中各决策树的大小。treesize(随机森林结果对象名,terminal=TRUE/FALSE),参数terminal取TRUE时仅统计决策树的叶节点个数,取FALSE表示统计所有节点的个数。

本例中,第1颗决策树包含88个叶节点。可利用getTree函数抽取随机森林中的某颗树并浏览其结构。

barplot(rFM$importance[,3],main="输入变量重要性测度(预测精度变化)指标柱形图")box()

可调用randomForest包中的importance函数,importance(随机森林结果对象名,type=类型编号)。

importance(rFM,type=1)

varImpPlot(x=rFM,sort=TRUE,n.var=nrow(rFM$importance),main="输入变量重要性测度散点图")

由上图可知,从对输出变量预测精度影响的角度看,收入、是否有债务、婚姻状况较为重要;从对输出变量异质性下降程度看,收入、年龄和居住地较为重要,即收入不同,年龄不同,居住地不同的人群对快递邮件的反应有较大差异。

练习

将上述数据分成70%训练集,训练随机森林模型,并对剩下30%预测,计算预测准确率。并且评价变量重要性。

library(randomForest)MailShot<-read.table(file="邮件营销数据.txt",header=T)MailShot<-MailShot[,-1]MailShot$MAILSHOT<-as.factor(MailShot$MAILSHOT)nrow(MailShot)n<-sample(c(1:300),300*0.70,replace=F)MailShot_train<-MailShot[n,]MailShot_test<-MailShot[-n,]set.seed(12345)(rFM<-randomForest(MAILSHOT~.,data=MailShot_train,importance=TRUE,proximity=TRUE))head(rFM$votes)#各观测的各类别预测概率head(rFM$oob.times)#各观测作为OOB的次数DrawL<-par(mfrow=c(2,1),mar=c(5,5,3,1))plot(rFM,main="随机森林的OOB错判率和决策树颗数")plot(margin(rFM),type="h",main="边界点探测",xlab="观测序列",ylab="比率差")#探测边界点par(DrawL)Fit<-predict(rFM,MailShot_test)#随机森林对测试数据做预测ConfM<-table(MailShot_test$MAILSHOT,Fit)#随机森林对测试数据做预测的混淆矩阵(E<-(sum(ConfM)-sum(diag(ConfM)))/sum(ConfM))#随机森林的整体错判率#0.4222222

审核编辑:郭婷

原文标题:机器学习方法——KNN、分类回归树、随机森林

长沙市望城经济技术开发区航空路6号手机智能终端产业园2号厂房3层(0731-88081133)

THE END
1.knn图mob64ca1419e0cc的技术博客【图像处理】-034 knn算法 在读matting文献的时候,读到了knn matting,该算法在抠图之后的效果还可以,在后面的深度抠图时常用语制作训练样本的mask。这里,先对knn进行简单介绍。 文章目录 【图像处理】-034 knn算法 1 原理 2 优劣势 3 实现步骤 https://blog.51cto.com/u_16213723/12865064
2.KNN算法及其优缺点knn算法优缺点KNN算法及其优缺点 K-最近邻算法(K-Nearest Neighbors, KNN)是一种基本的分类和回归算法。它的工作原理是通过在训练样本中找到距离待分类样本最近的K个样本,并根据这K个样本的标签来确定待分类样本的标签。KNN算法具有以下优点和缺点。 优点: 简单易懂:KNN算法是一种直观的算法,易于理解和实现。https://blog.csdn.net/m0_72249799/article/details/135163174
3.KNN算法原理KNN算法缺点 对内存要求较高,因为该算法存储了所有训练数据 预测阶段可能很慢 对不相关的功能和数据规模敏感 至于什么时候应该选择使用KNN算法,sklearn的这张图给了我们一个答案。 简单得说,当需要使用分类算法,且数据比较大的时候就可以尝试使用KNN算法进行分类了。 https://mp.weixin.qq.com/s?__biz=MzAxMjY5NDU2Ng==&mid=2651864063&idx=1&sn=2525ff7727ae11c28f9ead0bbcc3a106&chksm=80497eb6b73ef7a0e4f69f3edd8488d905ac7cac4f8e7ce78a98dc933e566358fd51cf59df02&scene=27
4.AI产品经理必懂算法:k近邻(KNN)算法简单,易于理解,易于实现,无需估计参数,无需训练;特别适合于多分类问题(multi-modal,对象具有多个类别标签), kNN比SVM的表现要好。缺点: 计算复杂度高、空间复杂度高;样本严重不平衡时,如果一个类的样本容量很大,而其他类很小,有可能导致输入一个新样本时,被误判为该分类的概率会很大。了解了算法的优势和局限性https://baijiahao.baidu.com/s?id=1621093032596013290&wfr=spider&for=pc
5.K近邻(KNN)算法:优缺点及算法变种K近邻(KNN)算法是一种简单直观的有监督学习方法,广泛应用于分类和回归任务中。本文将详细介绍KNN算法的基本原理、优缺点以及几种常见的算法变种。 KNN算法的基本原理 定义 K近邻算法是一种基于实例的学习方法,它不需要显式的训练过程。对于给定的输入样本,KNN算法会计算其与训练集中所有样本的距离,并选取距离最近的https://open.alipay.com/portal/forum/post/181001059
6.kNN算法python实现和简单数字识别的方法python这篇文章主要介绍了kNN算法python实现和简单数字识别的方法,详细讲述了kNN算法的优缺点及原理,并给出了应用实例,需要的朋友可以参考下 本文实例讲述了kNN算法python实现和简单数字识别的方法。分享给大家供大家参考。具体如下: kNN算法算法优缺点: 优点:精度高、对异常值不敏感、无输入数据假定 https://www.jb51.net/article/57553.htm
7.KNN算法的三要素及优缺点是什么?评论(0)发表评论 暂无数据 https://www.cda.cn/discuss/post/details/5bcf142afd09f85f7909befd
8.机器学习KNN算法原理&&Spark实现3. KNN算法优缺点 优点:易于理解,实现起了很方便,无需预估参数,无需训练 缺点:数据集中如果某个类的数据量很大,那么势必导致测试集合跑到这个类的更多,因为离这些点较近的概率也较大 4.KNN算法Spark实现 4.1 数据下载和说明 链接:pan.baidu.com/s/1FmFxSrPIynO3udernLU0yQ 提取码:hell https://www.imooc.com/article/314671
9.各类聚类算法的特点和优缺点算法特点: 需要提前预知类的数量; 基于距离聚类。 优点: 速度快,计算简便 缺点: K-means需要用初始随机种子点来启动优化,这个随机种子点太重要,不同随机种子点会得到完全不同的结果 变体: K-medians是k-means的一种变体,使用数据集的中位数而不是均值来计算中心点; https://zhuanlan.zhihu.com/p/607987678
10.MLK机器学习常见算法优缺点了解一下腾讯云开发者社区MLK | 机器学习常见算法优缺点了解一下 MLK,即Machine Learning Knowledge,本专栏在于对机器学习的重点知识做一次梳理,便于日后温习,这篇文章很久之前在本公众号发过,现在拿回来整理下,也算是一种温故而知新了。 ? 前情回顾 MLK | 那些常见的特征工程https://cloud.tencent.com/developer/article/1485883
11.KNN算法惰性:同样是分类算法,逻辑回归需要先对数据进行大量训练,最后才会得到一个算法模型。而KNN算法却不需要,它没有明确的训练数据的过程,或者说这个过程很快。 5.算法优缺点 优点: (1)模型训练时间快(因为KNN算法是惰性的)。时间复杂度为O(n)。 (2)可用于非线性分类。 https://www.jianshu.com/p/374e599faf4b
12.KNN算法及改进论文.doc1.3本文的组织结构本文的其余部分的安排如下:木文第二节介绍了分类算法以及KNN算法的一些概念及优缺点,第三节介绍了三 种方法的实例实现过程,第四节是对数据分类的总结与展望。分类算法分析与实现 2.1分类概念与分类方法分类是数据挖掘中应用领域极其广泛的重要技术之一,至今己经提出很多算法。分类 是根据数据集的特点https://max.book118.com/html/2019/1217/6111154225002132.shtm
13.Python用KNN(KKNN算法的优缺点 优点 实现简单 它是一种惰性学习算法,因此不需要对所有数据点进行训练(仅使用K个最近邻来预测)。这使得KNN算法比其他需要使用整个数据集进行训练的算法(如支持向量机和线性回归等)要快得多。 由于KNN在进行预测之前不需要训练,因此可以无缝添加新数据。 https://developer.aliyun.com/article/1498971
14.机器学习(一)2万多字的监督学习模型总结? KNN 算法可以说是最简单的机器学习算法,构建和预测都非常简单。构建模型只需要保存训练数据集即可。想要对新数据点做出预测,算法会在训练数据集中找到最近的数据点,也就是它的“最近邻”。 ?一个邻居:KNN算法最简单的就是一个最近邻,也就是与我们想要预测的数据点最近的训练数据点。预测结果就是这个训练数https://www.flyai.com/article/515
15.清华大学出版社图书详情第3章简单分类算法 3.1朴素贝叶斯分类算法 3.2KNN分类算法 3.2.1KNN算法实现原理 3.2.2KNN算法实现步骤 3.2.3KNN算法优缺点 3.3应用案例: KNN分类 3.3.1数据集 3.3.2构建KNN分类器 3.3.3案例结果及分析 第4章决策树 4.1决策树模型 4.2特征选择 4.2.1特征和数据划分 http://www.tup.tsinghua.edu.cn/booksCenter/book_09409501.html
16.融合信息增益比和遗传算法的混合式特征选择算法?虽然混合式算法可以有效地克服过滤式和封装式的缺点. 然而, 过滤式阶段的阈值设定以及遗传算法的 局部最优解等问题仍然需要解决[12?14,18]. 基于上述描述, 本文提出一种融合信息增益比排序分组和分组进化遗传算法的混合式特征选择算法 (GRRGA). 该算法主要分为 3 部分: 首先, 使用基于信息增益比的过滤式算法https://jos.org.cn/jos/article/pdf/6099