I*****a 发帖数: 5425 | |
s*********e 发帖数: 1051 | 2 定义“平均”
【在 I*****a 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 会导致什么问题,如何克服?
|
I*****a 发帖数: 5425 | 3 1000个data point,950个1,50个0
【在 s*********e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 定义“平均”
|
l******n 发帖数: 9344 | 4 都平均了还classify啥?除非你得算法对数量敏感
【在 I*****a 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 1000个data point,950个1,50个0
|
I*****a 发帖数: 5425 | 5 为啥平均了就不classify了?
【在 l******n 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 都平均了还classify啥?除非你得算法对数量敏感
|
d******e 发帖数: 7844 | 6 做subsampling,或者做weighted training。
取决于你想如何控制FDR。
【在 I*****a 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 会导致什么问题,如何克服?
|
I*****a 发帖数: 5425 | 7 如果用logistic regression,会不会有任何问题?我的理解是logistic regression应
该不会被 uneven labels 影响。
如果training set 用 1:1 的label 比例subsample,各有什么利弊?
【在 d******e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 做subsampling,或者做weighted training。 : 取决于你想如何控制FDR。
|
d******e 发帖数: 7844 | 8 一样有影响。
多的一类会dominate
利弊难说,我prefer subsampling然后做average。
【在 I*****a 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 如果用logistic regression,会不会有任何问题?我的理解是logistic regression应 : 该不会被 uneven labels 影响。 : 如果training set 用 1:1 的label 比例subsample,各有什么利弊?
|
I*****a 发帖数: 5425 | 9 这个影响是bias 还是什么?
如果test set 和training set 是同分布,多的一类本来也应该dominate。
【在 d******e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 一样有影响。 : 多的一类会dominate : 利弊难说,我prefer subsampling然后做average。
|
d******e 发帖数: 7844 | 10 如果你就想dominate,干嘛还要balance数据?
【在 I*****a 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 这个影响是bias 还是什么? : 如果test set 和training set 是同分布,多的一类本来也应该dominate。
|
|
|
I*****a 发帖数: 5425 | 11 我们在说同一个问题吗。。?
就prediction 而言,不管你是否subsample,正确的结果都应该是unbalanced 吧,因
为data 的population 本来就那样。难道你1:1 subsample 了training data,去
predict test data 就能 balanced 了?
一个class label dominates 另外一个,不是我想,而是data 就这样,而结果也应该
是这样。
我的问题是,用各种分类的方法去model 这种data,有没有什么问题?比如bias,
standard error, etc. 比如,本来应该是19:1 的,得到了49:1 甚至 50:0, 或者 4
:1。或者misclassification 很多,等等
【在 d******e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 如果你就想dominate,干嘛还要balance数据?
|
d******e 发帖数: 7844 | 12 你要先弄明白什么情况下会得到unbalanced data和这类data的普遍问题。除非已知正
负样本的prior,否则unblanaced data的prediction目标大多是rare event detection。
比如信用卡欺诈检测,流水线异常的检测。本身存在的比例就极小,1%, 0.1%,甚至更
小。
这时笼统的minimize classification error变得没有意义,因为即使永远判定为不存
在欺诈,不存在异常,我仍然可以到到99%,99.9%甚至更高的正确率。
对数据做subsample或者weighted training。而是为了能保证rare event能被检测到。
换个说法就是rare event虽然小概率,但是cost极高,所以要在训练时增加rare event
的“比例”。
4
【在 I*****a 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 我们在说同一个问题吗。。? : 就prediction 而言,不管你是否subsample,正确的结果都应该是unbalanced 吧,因 : 为data 的population 本来就那样。难道你1:1 subsample 了training data,去 : predict test data 就能 balanced 了? : 一个class label dominates 另外一个,不是我想,而是data 就这样,而结果也应该 : 是这样。 : 我的问题是,用各种分类的方法去model 这种data,有没有什么问题?比如bias, : standard error, etc. 比如,本来应该是19:1 的,得到了49:1 甚至 50:0, 或者 4 : :1。或者misclassification 很多,等等
|
s*********e 发帖数: 1051 | 13 right on.
detection。
event
【在 d******e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 你要先弄明白什么情况下会得到unbalanced data和这类data的普遍问题。除非已知正 : 负样本的prior,否则unblanaced data的prediction目标大多是rare event detection。 : 比如信用卡欺诈检测,流水线异常的检测。本身存在的比例就极小,1%, 0.1%,甚至更 : 小。 : 这时笼统的minimize classification error变得没有意义,因为即使永远判定为不存 : 在欺诈,不存在异常,我仍然可以到到99%,99.9%甚至更高的正确率。 : 对数据做subsample或者weighted training。而是为了能保证rare event能被检测到。 : 换个说法就是rare event虽然小概率,但是cost极高,所以要在训练时增加rare event : 的“比例”。 :
|
c***z 发帖数: 6348 | 14 crystal clear
also I recall Andrew Ng talked about this in his online class
detection。
event
【在 d******e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 你要先弄明白什么情况下会得到unbalanced data和这类data的普遍问题。除非已知正 : 负样本的prior,否则unblanaced data的prediction目标大多是rare event detection。 : 比如信用卡欺诈检测,流水线异常的检测。本身存在的比例就极小,1%, 0.1%,甚至更 : 小。 : 这时笼统的minimize classification error变得没有意义,因为即使永远判定为不存 : 在欺诈,不存在异常,我仍然可以到到99%,99.9%甚至更高的正确率。 : 对数据做subsample或者weighted training。而是为了能保证rare event能被检测到。 : 换个说法就是rare event虽然小概率,但是cost极高,所以要在训练时增加rare event : 的“比例”。 :
|
D*********2 发帖数: 535 | 15 great explanation. thanks for sharing.
detection。
event
【在 d******e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 你要先弄明白什么情况下会得到unbalanced data和这类data的普遍问题。除非已知正 : 负样本的prior,否则unblanaced data的prediction目标大多是rare event detection。 : 比如信用卡欺诈检测,流水线异常的检测。本身存在的比例就极小,1%, 0.1%,甚至更 : 小。 : 这时笼统的minimize classification error变得没有意义,因为即使永远判定为不存 : 在欺诈,不存在异常,我仍然可以到到99%,99.9%甚至更高的正确率。 : 对数据做subsample或者weighted training。而是为了能保证rare event能被检测到。 : 换个说法就是rare event虽然小概率,但是cost极高,所以要在训练时增加rare event : 的“比例”。 :
|
I*****a 发帖数: 5425 | 16 刚刚做了个simulation,仅就logistic regression 来说,subsample 与否给出的rare
event detection 的 error rate 基本上是相同的;而对于占多数的class label (也
就是common event) 的prediction error,不subsample 的略小。
detection。
event
【在 d******e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 你要先弄明白什么情况下会得到unbalanced data和这类data的普遍问题。除非已知正 : 负样本的prior,否则unblanaced data的prediction目标大多是rare event detection。 : 比如信用卡欺诈检测,流水线异常的检测。本身存在的比例就极小,1%, 0.1%,甚至更 : 小。 : 这时笼统的minimize classification error变得没有意义,因为即使永远判定为不存 : 在欺诈,不存在异常,我仍然可以到到99%,99.9%甚至更高的正确率。 : 对数据做subsample或者weighted training。而是为了能保证rare event能被检测到。 : 换个说法就是rare event虽然小概率,但是cost极高,所以要在训练时增加rare event : 的“比例”。 :
|
I*****a 发帖数: 5425 | 17 如果是用knn之类的方法比如tree,我认为subsample 固然能在牺牲specificity 的前
提下增加rare event 的detection rate,但是是不是会使prediction variance 变得
很大?
detection。
event
【在 d******e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 你要先弄明白什么情况下会得到unbalanced data和这类data的普遍问题。除非已知正 : 负样本的prior,否则unblanaced data的prediction目标大多是rare event detection。 : 比如信用卡欺诈检测,流水线异常的检测。本身存在的比例就极小,1%, 0.1%,甚至更 : 小。 : 这时笼统的minimize classification error变得没有意义,因为即使永远判定为不存 : 在欺诈,不存在异常,我仍然可以到到99%,99.9%甚至更高的正确率。 : 对数据做subsample或者weighted training。而是为了能保证rare event能被检测到。 : 换个说法就是rare event虽然小概率,但是cost极高,所以要在训练时增加rare event : 的“比例”。 :
|
d******e 发帖数: 7844 | 18 这说明你没有理解问题所在。
> n = 100000
> X = matrix(runif(n*2),n,2)
> y0 = sign((X[,1]<0.1)-0.5)
> y = (y0*sign(runif(n)-0.1)+1)/2
> sum(y==1)
[1] 17998
> sum(y==0)
[1] 82002
> out = glm(y~X,family="binomial")
> yhat=sign(cbind(X,rep(1,n))%*%out$coefficients>0)
> sum((yhat==1)*(y==1))
[1] 2
> sum(yhat==y)
[1] 82003
> idx1 = which(y==1)
> idx0 = which(y==0)[1:length(idx1)]
> out = glm(y[c(idx0,idx1)]~X[c(idx0,idx1),],family="binomial")
> yhat=sign(cbind(X,rep(1,n))%*%out$coefficients>0)
> sum((yhat==1)*(y==1))
[1] 2297
> sum(yhat==y)
[1] 65084
rare
【在 I*****a 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 刚刚做了个simulation,仅就logistic regression 来说,subsample 与否给出的rare : event detection 的 error rate 基本上是相同的;而对于占多数的class label (也 : 就是common event) 的prediction error,不subsample 的略小。 : : detection。 : event
|
d******e 发帖数: 7844 | 19 你还是没有明白问题。ROC里的Specificity和Sensitivity已经无法衡量这种rare
event detection。
你需要的指标是precision和recall。而rare event detection第一步就是要recall足
够高,然后再去谈precision。
【在 I*****a 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 如果是用knn之类的方法比如tree,我认为subsample 固然能在牺牲specificity 的前 : 提下增加rare event 的detection rate,但是是不是会使prediction variance 变得 : 很大? : : detection。 : event
|
I*****a 发帖数: 5425 | 20 谢谢,吃完饭再看code。
recall 不是sensitivity 吗?
【在 d******e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 你还是没有明白问题。ROC里的Specificity和Sensitivity已经无法衡量这种rare : event detection。 : 你需要的指标是precision和recall。而rare event detection第一步就是要recall足 : 够高,然后再去谈precision。
|
|
|
d******e 发帖数: 7844 | 21 哦,对,是一个东西。
我实际是想说specificity没用了。
【在 I*****a 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 谢谢,吃完饭再看code。 : recall 不是sensitivity 吗?
|
I*****a 发帖数: 5425 | 22 多谢,这个code 很有帮助。
我的simulation 条件用的是linear 关系 ,不知道是不是因为这样,所以两种方法最
后并没体现出差别。
你的simulation条件更好,Xbeta 那个 rep(1,n) 应该在最前面,不过结论不变。
不知道是不是直接unbalanced 的data 比较不robust
【在 d******e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 这说明你没有理解问题所在。 : > n = 100000 : > X = matrix(runif(n*2),n,2) : > y0 = sign((X[,1]<0.1)-0.5) : > y = (y0*sign(runif(n)-0.1)+1)/2 : > sum(y==1) : [1] 17998 : > sum(y==0) : [1] 82002 : > out = glm(y~X,family="binomial")
|
d******e 发帖数: 7844 | 23 这个也是linear的。
就一个variable决定label
【在 I*****a 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 多谢,这个code 很有帮助。 : 我的simulation 条件用的是linear 关系 ,不知道是不是因为这样,所以两种方法最 : 后并没体现出差别。 : 你的simulation条件更好,Xbeta 那个 rep(1,n) 应该在最前面,不过结论不变。 : 不知道是不是直接unbalanced 的data 比较不robust
|
I*****a 发帖数: 5425 | 24 你这个不算是吧。
n = 1000 # training size
ntest = 1000 # test size; make this big only for illustration
id.train = 1:n
id.test = (n + 1):(n + ntest)
ratio = 0.99
n0 = round(n * ratio)
n1 = n - n0
nsimu = 100
res = NULL
for (i in 1:nsimu){
p = c(runif(n0, 0, 0.5), runif(n1, 0.5, 1), runif(ntest, 0.6, 1) )
y = sapply(p, function(x){rbinom(n = 1, size = 1, prob = x)})
x = log(p / (1 - p)) # beta is c(0, 1)
dat = data.frame(x = x, y = y)
fit1 = glm(y ~ x, family = binomial, data = dat[id.train,])
pred1 = predict(fit1, data.frame(x = x[id.test]) )
res1 = pred1 > 0
res2 = NULL
for (j in 1:11){ # vote for resampled fit
id.resample = c(sample(1:n0, n/2), sample((n0+1):n, n/2,
replace = T))
fit2 = glm(y ~ x, family = binomial, data = dat[id.train,][
id.resample,])
pred2 = predict(fit2, data.frame(x = x[id.test]) )
res2 = rbind(res2, pred2>0)
}
res2 = apply(res2, 2, sum) > 5
res = rbind(res, c(mean(y[id.test] == res1), mean(y[id.test] == res2
),
mean((y[id.test] == 1) * (res1 == 1)),
mean((y[id.test] == 1) * (res2 == 1)) ))
}
apply(res, 2, mean)
【在 d******e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 这个也是linear的。 : 就一个variable决定label
|
D******n 发帖数: 2836 | 25 其实就是要反扑归真,我们选择评判模型要取决于我们最后要怎么去用它,最终要达到
的就是在应用时cost function最小。
譬如检测fraud,取决于检查fraud的cost,一般挺高,所以每次检查多少可以基本定了
,或者就假设fixed,然后
比较不同的models,就看这规定数量的检查里面,你能探测多少frauds。
更进一部,如果你检查fraud的时候,骚扰了没fraud的人,(false positives), 其实
也是有额外的cost的,
cost就是被骚扰的人就不高兴了,对你的公司不喜欢了。
当然一切都要取决实际问题是怎么样的。
【在 d******e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 你还是没有明白问题。ROC里的Specificity和Sensitivity已经无法衡量这种rare : event detection。 : 你需要的指标是precision和recall。而rare event detection第一步就是要recall足 : 够高,然后再去谈precision。
|
A*******s 发帖数: 3942 | 26 这篇文章解释了给定misclassification rate的情况下AUC的分布
http://books.nips.cc/papers/files/nips16/NIPS2003_AA40.pdf
可以看到AUC's std会因为rare event而变大
我不知道有没有类似的讨论Bernoulli likelihood和AUC的paper,不过直觉上
Bernoulli likelihood其实就是error rate的一个continuous and differentiable
approximation, 也许关系会比较类似,这也和我记忆里,做weight adjustment或者调
整cost function一般有助于提高AUC的经验相符。 |
I*****a 发帖数: 5425 | 27 非常好,这就是我问的。
非常感谢。
【在 A*******s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 这篇文章解释了给定misclassification rate的情况下AUC的分布 : http://books.nips.cc/papers/files/nips16/NIPS2003_AA40.pdf : 可以看到AUC's std会因为rare event而变大 : 我不知道有没有类似的讨论Bernoulli likelihood和AUC的paper,不过直觉上 : Bernoulli likelihood其实就是error rate的一个continuous and differentiable : approximation, 也许关系会比较类似,这也和我记忆里,做weight adjustment或者调 : 整cost function一般有助于提高AUC的经验相符。
|