全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
9021 10
2016-10-23
背景:
我使用的是"randomForest"包的随机森林算法。
描述:
我最近在做用户异常检测的问题,按照常理来讲,这是一个分类问题,最终预测用户是否异常,即0、1问题。但是问题要求最终预测的是用户异常的可能性,这就又类似于一个回归问题。
目前我以分类问题考虑来做,主要代码有:
rf<- randomForest(mark~.,train)
rf.predict<- predict(rf,test)
其中train 和 test 分别是训练集和测试集,而mark是需要预测的属性。
问题:
1、首先问一个关于训练的问题:
rf<- randomForest(mark~.,train)是训练train中除了mark属性外所有属性对mark属性的影响,但是我如果有这样的需求:
比如train中有n个属性,分别为a1~an,其中an列为mark属性,假设我只想要训练前10维属性对mark属性的影响,代码应该如何修改,是否有不枚举属性列名称的方法?

2、据我所知,随机森林会生出多棵决策树(假设100棵树),并按照一定权重来进行综合,(假设平均分配的话,100课树每棵树的全重是0.1),最终得到结果。那么我想知道是否可以根据每棵树最后预测的0或1结果再乘上权重来得到一个数值作为可能性?而不是直接0或者1的分类结果?

3、如果问题1的思路可行,那么该怎么实现?最好有代码?

4、如果作为回归问题考虑,由于mark属性只有0,1,调试会有如下的警告信息:

Warning message:
In randomForest.default(m, y, ...) :
  The response has five or fewer unique values.  Are you sure you want to do regression?


这样是否会对结果有比较大的影响?

并且得到预测结果后如何进行优劣判断?比如分类问题可以使用confusionMatrix函数进行交叉验证。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2016-10-23 22:54:03
本人是个菜鸟  如果上述描述有什么不对的地方  请指正。一定虚心学习
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-10-24 14:30:46
1、首先问一个关于训练的问题:
rf<- randomForest(mark~.,train)是训练train中除了mark属性外所有属性对mark属性的影响,但是我如果有这样的需求:
比如train中有n个属性,分别为a1~an,其中an列为mark属性,假设我只想要训练前10维属性对mark属性的影响,代码应该如何修改,是否有不枚举属性列名称的方法?
--------------------------------------------------------------------------------------------------
建议你先看一下各个属性的importance.  你可以取importance 前十10的属性来预测。
这是一个重要的feature selection 的方法。  用了这个方法, 你的逼格马上上一个档次。
写法  mark~a1+a2+a3......
如果方便,你直接另作一个数据集,只含你需要的列。 减少内存的需求。


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-10-24 14:37:44
据我所知,随机森林会生出多棵决策树(假设100棵树),并按照一定权重来进行综合,(假设平均分配的话,100课树每棵树的全重是0.1),最终得到结果。那么我想知道是否可以根据每棵树最后预测的0或1结果再乘上权重来得到一个数值作为可能性?而不是直接0或者1的分类结果?
--------------------------------------------------------------------------------------------------------
predict  函数 有个参数叫做   type  
type one of response, prob. or votes, indicating the type of output: predicted values,
matrix of class probabilities, or matrix of vote counts. class is allowed,
but automatically converted to "response", for backward compatibility.
如果选votes 或者prob.  会返回一个矩阵,每个预测类的概率或者投票数。
强烈建议你,自己先看randomForest的文档。 CRAN 上就有。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-10-24 14:38:46
如果问题1的思路可行,那么该怎么实现?最好有代码?
-----------------------------
第一问已回答
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-10-24 14:46:56
如果作为回归问题考虑,由于mark属性只有0,1,调试会有如下的警告信息:

Warning message:
In randomForest.default(m, y, ...) :
  The response has five or fewer unique values.  Are you sure you want to do regression?


这样是否会对结果有比较大的影响?

并且得到预测结果后如何进行优劣判断?比如分类问题可以使用confusionMatrix函数进行交叉验证。
-=---------------------------------------------
这个第四问,问道了我的个人解决习惯。
我很喜欢用回归去做分类。 因为本来分类就是很模糊的。 比如做高风险客户甄别。 如果1是高风险客户。0是正常客户。 我习惯用回归计算。这样你可以把回归值算作一种指标。0.9比0.7的客户具有更高的风险。
问题在于, 第一,不具有很好的可解释性。第二 是不是真的有效(指把回归值看做一个风险比较指标,作为分类指标是很准确的。),其实无法验证。  你可以把这个结果和按分类的结果进行比较。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群