楼主: xifanlidelajiao
9154 10

[问答] 随机森林算法的一些问题 [推广有奖]

  • 1关注
  • 0粉丝

高中生

42%

还不是VIP/贵宾

-

威望
0
论坛币
1 个
通用积分
0
学术水平
2 点
热心指数
0 点
信用等级
0 点
经验
417 点
帖子
15
精华
0
在线时间
29 小时
注册时间
2016-4-4
最后登录
2022-1-24

楼主
xifanlidelajiao 发表于 2016-10-23 22:53:15 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
背景:
我使用的是"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函数进行交叉验证。

二维码

扫码加我 拉你入群

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

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

关键词:随机森林 randomForest Forest random rand 森林

回帖推荐

jameschin007 发表于4楼  查看完整内容

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

jameschin007 发表于3楼  查看完整内容

1、首先问一个关于训练的问题: rf

jameschin007 发表于6楼  查看完整内容

如果作为回归问题考虑,由于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函数进行交叉验证。 -=--------------------------------------------- 这 ...

沙发
xifanlidelajiao 发表于 2016-10-23 22:54:03
本人是个菜鸟  如果上述描述有什么不对的地方  请指正。一定虚心学习

藤椅
jameschin007 发表于 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......
如果方便,你直接另作一个数据集,只含你需要的列。 减少内存的需求。


板凳
jameschin007 发表于 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 上就有。

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

地板
jameschin007 发表于 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的客户具有更高的风险。
问题在于, 第一,不具有很好的可解释性。第二 是不是真的有效(指把回归值看做一个风险比较指标,作为分类指标是很准确的。),其实无法验证。  你可以把这个结果和按分类的结果进行比较。

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

Warning message:
非常感谢你的帮助!! 万分感谢,不知道是否有幸给个联系方式,以后细聊。
另外对于这个用回归做分类,我还有一个想法是:
是否可以确定阈值,假设为m。
当回归得到的结果大于m,划分为1;小于m,划分为0?

8
xifanlidelajiao 发表于 2016-10-24 16:48:51
jameschin007 发表于 2016-10-24 14:30
1、首先问一个关于训练的问题:
rf
我按照您的方法,输出了importance属性。 5821BE34-14FF-4251-A03C-2AF7615C1D35.png
但是我看不来,求教~是否数值越大,代表影响越高

9
jameschin007 发表于 2016-10-24 20:50:37
xifanlidelajiao 发表于 2016-10-24 16:27
非常感谢你的帮助!! 万分感谢,不知道是否有幸给个联系方式,以后细聊。
另外对于这个用回归做分类,我 ...
本质上就是这样。 不过原则上应该划在中值

10
jameschin007 发表于 2016-10-24 21:30:08
xifanlidelajiao 发表于 2016-10-24 16:48
我按照您的方法,输出了importance属性。
但是我看不来,求教~是否数值越大,代表影响越高
基本可以这么理解吧。
还是那句话。多看文档。
我不能当你的人肉google

Here are the definitions of the variable importance measures. The first measure is computed from
permuting OOB data: For each tree, the prediction error on the out-of-bag portion of the data is
recorded (error rate for classification, MSE for regression). Then the same is done after permuting
each predictor variable. The difference between the two are then averaged over all trees, and normalized
by the standard deviation of the differences. If the standard deviation of the differences is
equal to 0 for a variable, the division is not done (but the average is almost always equal to 0 in that
case).
The second measure is the total decrease in node impurities from splitting on the variable, averaged
over all trees. For classification, the node impurity is measured by the Gini index. For regression, it
is measured by residual sum of squares.

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-29 07:14