Redian新闻
>
random forest 有没有可能保证某几个变量一直被选上
avatar
random forest 有没有可能保证某几个变量一直被选上# DataSciences - 数据科学
b*8
1
王女士在南京地铁一号线车厢里吃了一颗糖,被执法人员开出“罚单”,罚款20元。地
铁方面称,地铁车厢明文规定内禁止饮食,必须遵守。对于老弱病残孕群体需进食的情
况,会予以照顾。据悉,2015年1月至10月,执法人员查处饮食乘客36000多人次,大多
以警告为主。(1月19日《东方早报》)
“地铁吃糖被罚20元”,一些人对此不理解,在其看来吃糖不影响他人,也不会带来卫
生问题,大惊小怪罚款做啥;另一些人则认为,好多比吃糖严重的饮食行为,为何不罚
他们呢?
网友的这些疑问看似有一定的道理,但从根本上来看,都是与现有法规抵触的。有句话
说得好,法不明则不治,令不严则不行。看待“地铁吃糖被罚20元”应该遵循这个主张
。首先2014年7月1日,《南京轨道交通管理条例》(以下简称《条例》)正式实施,新
条例增加了禁止在列车内饮食等规定。既然有规定,那就是法律并非不明,去年一对夫
妻在南京地铁车厢内喝饮料被处罚的消息在微博上引发讨论,既然喝水被罚,那么,吃
糖被罚而已就遵循规章严明。从这些角度来说,“地铁吃糖被罚20元”没有什么问题。
实际上,“地铁吃糖被罚20元”这样的执法手段值得点赞。众所周知,在公共交通中,
尽管多数人都知道不应该饮食吃饭,这不仅不卫生,还会给其他人很大的困扰。但多数
情况下,这些规定都停留在纸质上,不仅很少听说有人被惩戒,甚至交通广播等几乎都
没有提醒和宣传,这样导致很多人仍然在公共交通上大吃大喝。
随着人们素质的提高,公众也知道了,在世界多数地方的公共交通上都是禁止饮食的,
比如,我国台湾的“大众捷运法”规定,捷运车站内禁止饮食、嚼食口香糖或槟榔等,
甚至喝水也是不允许的,违者可处1500元至7500元新台币罚款,大约相当于300—1500
元人民币。这些规章制度的实行,尤其是罚款手段的实施多数都是迫不得已,也并非目
的,但这样的手段,极大的提高和改善了人们的素质,这一点恰恰是很多地方该借鉴和
学习的。
之所以这样说,是因为随着我国经济快速发展,与世界交流更加密切,但我国很多人仍
然存在着不文明的素养,这些素养的提高,不能指望着到国外旅游时才提醒,而在于城
市在平时的执法中,就能够贯彻实施。
综上来说,“地铁吃糖被罚20元”这样的执法值得点赞,不在地铁等公共交通工具上吃
饭喝水也是我们值得让渡的权利,没有规矩不成方圆,尤其是在公众素质普遍不高的情
况下,对“地铁吃糖被罚20元”不妨宽容看待。
avatar
f*y
2
google了一下,没有发现类似的问题。不知道R或者python的package可不可以做?或者
有什么简单的方法可以达到目的?
请教各位大牛。。。。。
avatar
g*o
3
正常的想法难道不是应该把需要一直出现的和随机出现的分开, 然后只抽随机那部分么

【在 f*****y 的大作中提到】
: google了一下,没有发现类似的问题。不知道R或者python的package可不可以做?或者
: 有什么简单的方法可以达到目的?
: 请教各位大牛。。。。。

avatar
f*y
4
不好意思,没明白你的意思,一直出现的是什么?RF有什么variable是会一直出现的吗?

【在 g*****o 的大作中提到】
: 正常的想法难道不是应该把需要一直出现的和随机出现的分开, 然后只抽随机那部分么
avatar
w*2
5
为什么要保证变量一直被选上呢?
rf的variable sets at each split就是越randomized,越好。这个每个树都不会太相
似,这样,model的variance就降低了。
大牛可以来解答一下嘛?
avatar
p*m
6
我觉着他这几个变量可能在business 上有一定的关系。如果implementation 的话,也
许可以在package里改sampling 时的weight, 让这几个的weight 变大,但这样做,有
什么drawback 就不知道了
avatar
f*y
7
是的。有些重要的variable一定要被选上才行。但是这个难道要改package,从来没
有试过。

【在 p****m 的大作中提到】
: 我觉着他这几个变量可能在business 上有一定的关系。如果implementation 的话,也
: 许可以在package里改sampling 时的weight, 让这几个的weight 变大,但这样做,有
: 什么drawback 就不知道了

avatar
g*o
8
我的意思是, 你把一定要选上的, 和随机挑选的分开, 只在随机挑选的里面抽, 最后加
上一定要选上的不就行了么

【在 f*****y 的大作中提到】
: 是的。有些重要的variable一定要被选上才行。但是这个难道要改package,从来没
: 有试过。

avatar
f*y
9
你说的是这个道理。问题是给的package里面貌似没有可以直接做的。

【在 g*****o 的大作中提到】
: 我的意思是, 你把一定要选上的, 和随机挑选的分开, 只在随机挑选的里面抽, 最后加
: 上一定要选上的不就行了么

avatar
g*o
10
难道哪些需要, 哪些不需要, 你不能手动挑出来或者用条件选择么?... 然后就分别放
到两个数组啊...

【在 f*****y 的大作中提到】
: 你说的是这个道理。问题是给的package里面貌似没有可以直接做的。
avatar
f*y
11
请问放两个数组之后怎么办,是要自己造轮子写RandomForest的算法吗?已有的
package是个黑箱子,没提供这样的选择。

【在 g*****o 的大作中提到】
: 难道哪些需要, 哪些不需要, 你不能手动挑出来或者用条件选择么?... 然后就分别放
: 到两个数组啊...

avatar
l*m
12
you could duplicate some features you prefer to see if it could lift score.

【在 f*****y 的大作中提到】
: 请问放两个数组之后怎么办,是要自己造轮子写RandomForest的算法吗?已有的
: package是个黑箱子,没提供这样的选择。

avatar
f*y
13
This is for sure a great idea, Thanks!!

【在 l*******m 的大作中提到】
: you could duplicate some features you prefer to see if it could lift score.
avatar
Z*0
14
如果这些变量一直选上,不是违背RF的初衷了,这些都是理论上的说法。不过你可以试
试LS的方法,把你需要的features,复制多份,看看结果有什么变化。
avatar
l*s
15
考虑弄个两层的classifier:先用你那几个重要variables跑一遍,第二步再用random
forest。
至于两步如何合并,可以有多种办法,比如一部分data在第一步里分类效果很显著,
score>0.999,另一部分score较低的,放到第二步。有点像boosting
还可以把第一步和第二步的score加起来,用总的score做分类。至于如何加起来,如何
调整weight,具体问题具体分析了。
avatar
t*e
16
这个自己写一下应该不难吧:
1. boostrap 100-200 datasets from your training set
2. For each of the bootstrapped data, randomly select some features from
those features that are NOT in the important feature list (the number
selected could be a tuning parameter, usually random forest recommend p/3
for regression tree and sqrt(p) for classification tree).
3. Combine features obtained in step2 with the important several features
4. fit a decision tree using rpart (without pruning) and predict your test
set (either from independent test set or the OOB samples from training set).
5. Averaging the results from all the 100-200 bootstrapped results.

【在 f*****y 的大作中提到】
: google了一下,没有发现类似的问题。不知道R或者python的package可不可以做?或者
: 有什么简单的方法可以达到目的?
: 请教各位大牛。。。。。

avatar
t*e
17
sorry I mean using the package tree, rpart seems to be only for regression
tree
below is some sample code, 写的太仓促难免有bug, 不过你可以大概看一下logic
require(tree)
A_train = matrix(rnorm(20000),nc=20)
Label = rnorm(nrow(A_train))
df_train = data.frame(A_train,Label)
A_test = matrix(rnorm(20000),nc=20)
Label_test = rnorm(nrow(A_test))
df_test = data.frame(A_test,Label)
Prob_all = NULL
for (k in 1:100) {
index = sample(1:length(Label),length(Label),replace = T)
indF = sample(NonSelected,floor(length(NonSelected)/3))
Features = c(Selected,indF)
df_tmp = data.frame(Label,A_train[,Features])
df_tmp_test = data.frame(Label = Label_test,A_test[,Features])
model = tree(Label~.,data = df_tmp)
results = predict(model,newdata = df_tmp_test) # if it's classification,
add type = "prob"
Prob_all = cbind(Prob_all,results)
}

).

【在 t*****e 的大作中提到】
: 这个自己写一下应该不难吧:
: 1. boostrap 100-200 datasets from your training set
: 2. For each of the bootstrapped data, randomly select some features from
: those features that are NOT in the important feature list (the number
: selected could be a tuning parameter, usually random forest recommend p/3
: for regression tree and sqrt(p) for classification tree).
: 3. Combine features obtained in step2 with the important several features
: 4. fit a decision tree using rpart (without pruning) and predict your test
: set (either from independent test set or the OOB samples from training set).
: 5. Averaging the results from all the 100-200 bootstrapped results.

avatar
f*y
18
多谢大牛指点。

).

【在 t*****e 的大作中提到】
: 这个自己写一下应该不难吧:
: 1. boostrap 100-200 datasets from your training set
: 2. For each of the bootstrapped data, randomly select some features from
: those features that are NOT in the important feature list (the number
: selected could be a tuning parameter, usually random forest recommend p/3
: for regression tree and sqrt(p) for classification tree).
: 3. Combine features obtained in step2 with the important several features
: 4. fit a decision tree using rpart (without pruning) and predict your test
: set (either from independent test set or the OOB samples from training set).
: 5. Averaging the results from all the 100-200 bootstrapped results.

avatar
f*y
19
google了一下,没有发现类似的问题。不知道R或者python的package可不可以做?或者
有什么简单的方法可以达到目的?
请教各位大牛。。。。。
avatar
g*o
20
正常的想法难道不是应该把需要一直出现的和随机出现的分开, 然后只抽随机那部分么

【在 f*****y 的大作中提到】
: google了一下,没有发现类似的问题。不知道R或者python的package可不可以做?或者
: 有什么简单的方法可以达到目的?
: 请教各位大牛。。。。。

avatar
f*y
21
不好意思,没明白你的意思,一直出现的是什么?RF有什么variable是会一直出现的吗?

【在 g*****o 的大作中提到】
: 正常的想法难道不是应该把需要一直出现的和随机出现的分开, 然后只抽随机那部分么
avatar
w*2
22
为什么要保证变量一直被选上呢?
rf的variable sets at each split就是越randomized,越好。这个每个树都不会太相
似,这样,model的variance就降低了。
大牛可以来解答一下嘛?
avatar
p*m
23
我觉着他这几个变量可能在business 上有一定的关系。如果implementation 的话,也
许可以在package里改sampling 时的weight, 让这几个的weight 变大,但这样做,有
什么drawback 就不知道了
avatar
f*y
24
是的。有些重要的variable一定要被选上才行。但是这个难道要改package,从来没
有试过。

【在 p****m 的大作中提到】
: 我觉着他这几个变量可能在business 上有一定的关系。如果implementation 的话,也
: 许可以在package里改sampling 时的weight, 让这几个的weight 变大,但这样做,有
: 什么drawback 就不知道了

avatar
g*o
25
我的意思是, 你把一定要选上的, 和随机挑选的分开, 只在随机挑选的里面抽, 最后加
上一定要选上的不就行了么

【在 f*****y 的大作中提到】
: 是的。有些重要的variable一定要被选上才行。但是这个难道要改package,从来没
: 有试过。

avatar
f*y
26
你说的是这个道理。问题是给的package里面貌似没有可以直接做的。

【在 g*****o 的大作中提到】
: 我的意思是, 你把一定要选上的, 和随机挑选的分开, 只在随机挑选的里面抽, 最后加
: 上一定要选上的不就行了么

avatar
g*o
27
难道哪些需要, 哪些不需要, 你不能手动挑出来或者用条件选择么?... 然后就分别放
到两个数组啊...

【在 f*****y 的大作中提到】
: 你说的是这个道理。问题是给的package里面貌似没有可以直接做的。
avatar
f*y
28
请问放两个数组之后怎么办,是要自己造轮子写RandomForest的算法吗?已有的
package是个黑箱子,没提供这样的选择。

【在 g*****o 的大作中提到】
: 难道哪些需要, 哪些不需要, 你不能手动挑出来或者用条件选择么?... 然后就分别放
: 到两个数组啊...

avatar
l*m
29
you could duplicate some features you prefer to see if it could lift score.

【在 f*****y 的大作中提到】
: 请问放两个数组之后怎么办,是要自己造轮子写RandomForest的算法吗?已有的
: package是个黑箱子,没提供这样的选择。

avatar
f*y
30
This is for sure a great idea, Thanks!!

【在 l*******m 的大作中提到】
: you could duplicate some features you prefer to see if it could lift score.
avatar
Z*0
31
如果这些变量一直选上,不是违背RF的初衷了,这些都是理论上的说法。不过你可以试
试LS的方法,把你需要的features,复制多份,看看结果有什么变化。
avatar
l*s
32
考虑弄个两层的classifier:先用你那几个重要variables跑一遍,第二步再用random
forest。
至于两步如何合并,可以有多种办法,比如一部分data在第一步里分类效果很显著,
score>0.999,另一部分score较低的,放到第二步。有点像boosting
还可以把第一步和第二步的score加起来,用总的score做分类。至于如何加起来,如何
调整weight,具体问题具体分析了。
avatar
t*e
33
这个自己写一下应该不难吧:
1. boostrap 100-200 datasets from your training set
2. For each of the bootstrapped data, randomly select some features from
those features that are NOT in the important feature list (the number
selected could be a tuning parameter, usually random forest recommend p/3
for regression tree and sqrt(p) for classification tree).
3. Combine features obtained in step2 with the important several features
4. fit a decision tree using rpart (without pruning) and predict your test
set (either from independent test set or the OOB samples from training set).
5. Averaging the results from all the 100-200 bootstrapped results.

【在 f*****y 的大作中提到】
: google了一下,没有发现类似的问题。不知道R或者python的package可不可以做?或者
: 有什么简单的方法可以达到目的?
: 请教各位大牛。。。。。

avatar
t*e
34
sorry I mean using the package tree, rpart seems to be only for regression
tree
below is some sample code, 写的太仓促难免有bug, 不过你可以大概看一下logic
require(tree)
A_train = matrix(rnorm(20000),nc=20)
Label = rnorm(nrow(A_train))
df_train = data.frame(A_train,Label)
A_test = matrix(rnorm(20000),nc=20)
Label_test = rnorm(nrow(A_test))
df_test = data.frame(A_test,Label)
Prob_all = NULL
for (k in 1:100) {
index = sample(1:length(Label),length(Label),replace = T)
indF = sample(NonSelected,floor(length(NonSelected)/3))
Features = c(Selected,indF)
df_tmp = data.frame(Label,A_train[,Features])
df_tmp_test = data.frame(Label = Label_test,A_test[,Features])
model = tree(Label~.,data = df_tmp)
results = predict(model,newdata = df_tmp_test) # if it's classification,
add type = "prob"
Prob_all = cbind(Prob_all,results)
}

).

【在 t*****e 的大作中提到】
: 这个自己写一下应该不难吧:
: 1. boostrap 100-200 datasets from your training set
: 2. For each of the bootstrapped data, randomly select some features from
: those features that are NOT in the important feature list (the number
: selected could be a tuning parameter, usually random forest recommend p/3
: for regression tree and sqrt(p) for classification tree).
: 3. Combine features obtained in step2 with the important several features
: 4. fit a decision tree using rpart (without pruning) and predict your test
: set (either from independent test set or the OOB samples from training set).
: 5. Averaging the results from all the 100-200 bootstrapped results.

avatar
f*y
35
多谢大牛指点。

).

【在 t*****e 的大作中提到】
: 这个自己写一下应该不难吧:
: 1. boostrap 100-200 datasets from your training set
: 2. For each of the bootstrapped data, randomly select some features from
: those features that are NOT in the important feature list (the number
: selected could be a tuning parameter, usually random forest recommend p/3
: for regression tree and sqrt(p) for classification tree).
: 3. Combine features obtained in step2 with the important several features
: 4. fit a decision tree using rpart (without pruning) and predict your test
: set (either from independent test set or the OOB samples from training set).
: 5. Averaging the results from all the 100-200 bootstrapped results.

avatar
w*l
36
但是你这个也不能保证那些重要的feature被选上啊,
每个小tree可能不选你那些个重要变量。。

).

【在 t*****e 的大作中提到】
: 这个自己写一下应该不难吧:
: 1. boostrap 100-200 datasets from your training set
: 2. For each of the bootstrapped data, randomly select some features from
: those features that are NOT in the important feature list (the number
: selected could be a tuning parameter, usually random forest recommend p/3
: for regression tree and sqrt(p) for classification tree).
: 3. Combine features obtained in step2 with the important several features
: 4. fit a decision tree using rpart (without pruning) and predict your test
: set (either from independent test set or the OOB samples from training set).
: 5. Averaging the results from all the 100-200 bootstrapped results.

avatar
t*e
37
没懂。那些重要变量已经被force in to the model,and there is no pruning for
each tree for random forest. 请指教。

【在 w******l 的大作中提到】
: 但是你这个也不能保证那些重要的feature被选上啊,
: 每个小tree可能不选你那些个重要变量。。
:
: ).

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。