楼主: 何以爱情丶
12409 25

[问答] 关于R语言中随机森林是否会出现过拟合现象问题 [推广有奖]

  • 1关注
  • 0粉丝

大专生

10%

还不是VIP/贵宾

-

威望
0
论坛币
8 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
186 点
帖子
39
精华
0
在线时间
31 小时
注册时间
2015-3-27
最后登录
2015-7-21

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我首先做的是特征选择,在30~50db混合噪声环境下从25个特征中选择出4个特征,然后用这4个特征进行随机森林建模和训练,因为类别数(6类)、特征数(4个)和数据集(3000组)都比较小,所以选择树的个数为50,训练完后用该模型对50db噪声环境下的600组数据(每类100组)进行分类,结果全都正确。接着将树的个数增加到100,再对50db噪声环境下同样数据进行分类时,第四类完全分类错误,如果再增加数的个数,第一类有时都会出现分类出错,请问这是什么原因?是产生了过拟合吗?此外,set.seed函数设置不同的数值会对分类结果产生影响吗?

二维码

扫码加我 拉你入群

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

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

关键词:随机森林 过拟合 R语言 是什么原因 seed 森林

沙发
harpbreeze 发表于 2015-4-14 12:47:31 |只看作者 |坛友微信交流群
楼主方便的话,还是把你的数据集好代码都贴上来,让大家跑跑看。

另外,set.seed是为了方便实验结果重现,对结果并没有什么决定性的影响。

使用道具

藤椅
何以爱情丶 发表于 2015-4-14 14:36:45 |只看作者 |坛友微信交流群
harpbreeze 发表于 2015-4-14 12:47
楼主方便的话,还是把你的数据集好代码都贴上来,让大家跑跑看。

另外,set.seed是为了方便实验结果重现 ...
train5161819.txt (226.13 KB)

test50.txt (263.13 KB)
QQ截图20150414143416.png QQ截图20150414143440.png

使用道具

板凳
何以爱情丶 发表于 2015-4-14 14:38:26 |只看作者 |坛友微信交流群
harpbreeze 发表于 2015-4-14 12:47
楼主方便的话,还是把你的数据集好代码都贴上来,让大家跑跑看。

另外,set.seed是为了方便实验结果重现 ...
而且我试过修改set.seed函数值,结果有点不一样

使用道具

报纸
harpbreeze 发表于 2015-4-14 17:09:10 |只看作者 |坛友微信交流群
楼主,test50.txt 有25列,不知道是什么情况呢

使用道具

地板
harpbreeze 发表于 2015-4-14 17:12:11 |只看作者 |坛友微信交流群
楼主,test50里面有25列呢,而且好像没有class标签呀?

使用道具

7
何以爱情丶 发表于 2015-4-14 17:27:10 |只看作者 |坛友微信交流群
harpbreeze 发表于 2015-4-14 17:12
楼主,test50里面有25列呢,而且好像没有class标签呀?
对,因为我先做的是特征选择,从25个特征中选出最优的4个,所以train里面只有4个特征加一个标签,训练完之后做测试,来的数据是不知道类别的,所以test50含有最原始的25个特征,并且没有class标签,你在跑程序的时候需要加一句:names(test50)=c("f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12","f13","f14","f15","f16","f17","f18","f19","f20","f21","f22","f23","f24","f25")。但是test50里面每100行是一类,从类1到类6共6类.

使用道具

8
七彩空气 学生认证  发表于 2015-4-14 17:58:30 |只看作者 |坛友微信交流群
因为随机森林会有两次随机取样  随机种子每次不同  随机出来的样本和特征就不一样了  导致每次结果不一致  但是不会有太大影响   最好每次设定固定的随机种子  保证结果可重现  Breiman说RF不会出现过拟合的

使用道具

9
何以爱情丶 发表于 2015-4-14 19:20:09 |只看作者 |坛友微信交流群
七彩空气 发表于 2015-4-14 17:58
因为随机森林会有两次随机取样  随机种子每次不同  随机出来的样本和特征就不一样了  导致每次结果不一致   ...
没有任何的learning algorithm可以彻底避免overfitting的。这是由机器学习的本质决定的,不是在技术层面可以修复的。 机器学习的核心在于generalization,但是数据又不可避免的包含noise,所以generalization走到最后就会开始考虑是不是要把noise也generalize一下。对于一个算法,它是没有办法区分noise和‘good’ data的。因为这些通常是人也无法知道的,我们说一个toy dataset中某些data是noise,这是我们的prior,机器是没有办法知道的。
random forest 虽然我没有在实际中运用过,并且Breiman确实说过它不会overfitting,但是他的意思是随着tree数目的增多,testing error不会急剧的增大,会稳定在一个数值。但是我们通常讨论的overfitting是说testing error比training error大很多,这个Random forest显然是无法避免的,尽管RF会限制error的limit。
简单说random forest会随着tree的增多而减少variance,但是它不会去修改bias啊。



上面是我今天查资料看到的一段话,RF应该还是有可能会过拟合的

使用道具

10
harpbreeze 发表于 2015-4-14 20:41:28 |只看作者 |坛友微信交流群
我按照楼主说得,选择ntree=50,但是第四类依旧都分错了。
  1. >  f4.rf=randomForest(class~.,data=f4,importance=T,proximity=T,ntree=50)
  2. > pred=predict(f4.rf,testset_1,type="response")
  3. > table(pred,testset_1[,"class"])
复制代码
结果是:

pred   1   2   3   4   5   6
   1   0   0   0  60   0   0
   2   0 100   0  40   0   0
   3 100   0 100   0   0   0
   4   0   0   0   0   0   0
   5   0   0   0   0 100   0
   6   0   0   0   0   0 100

50棵树的时候,并没有出现楼主说的都分正确的情况呀,第一类和第四类都分错误了。

set.seed用的是楼主的参数 111

您试试增加predictor可行么?

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-27 14:26