我使用ksvm
R中的kernlab包来预测概率,使用中的type="probabilities"
选项predict.ksvm
.但是,我发现有时使用predict(model,observation,type="r")
产量而不是具有最高概率的类predict(model,observation,type="p")
.
例:
> predict(model,observation,type="r")
[1] A
Levels: A B
> predict(model,observation,type="p")
A B
[1,] 0.21 0.79
Run Code Online (Sandbox Code Playgroud)
这是正确的行为还是错误?如果它是正确的行为,我如何根据概率估计最可能的类?
尝试重现性的例子:
library(kernlab)
set.seed(1000)
# Generate fake data
n <- 1000
x <- rnorm(n)
p <- 1 / (1 + exp(-10*x))
y <- factor(rbinom(n, 1, p))
dat <- data.frame(x, y)
tmp <- split(dat, dat$y)
# Create unequal sizes in the groups (helps illustrate the problem)
newdat <- rbind(tmp[[1]][1:100,], tmp[[2]][1:10,])
# Fit the model using …
Run Code Online (Sandbox Code Playgroud) 有没有办法将最后一个顶级命令存储到一个字符串中而不将历史记录保存到文件中并将其读回以获取最后一个命令?我有代码
lastcmd <- function(){
tmp <- tempfile()
savehistory(tmp)
# If we call this function then that call will
# be the last line in the history so we want the one
# before that
tail(readLines(tmp), 2)[1]
}
Run Code Online (Sandbox Code Playgroud)
这不是太糟糕但我想知道是否有办法在没有先写入文件的情况下将历史记录作为字符.
当我试图p.adjust
在p值向量上运行FDR调整时出现了这个问题.问题是许多得到的p值是相同的.我认为这可能是我的数据的一些怪癖,但我用任意输入向量重现了同样的问题.例如:
temp <- runif(40, min = 0, max = 1)
temp
# [1] 0.81563482 0.17471363 0.74697979 0.88755248 0.69676260 0.58207008
# [7] 0.87138747 0.76432908 0.64352955 0.06501659 0.70680646 0.81557281
#[13] 0.58480274 0.19476004 0.01035137 0.46119840 0.17783440 0.71828874
#[19] 0.30978182 0.76902202 0.01615609 0.93122152 0.37936458 0.52369562
#[25] 0.90997054 0.30098383 0.70873206 0.71159740 0.38148526 0.78415579
#[31] 0.64605509 0.18898361 0.76770495 0.40651004 0.42255944 0.68395505
#[37] 0.51844368 0.25855720 0.12090991 0.50110836
p.adjust(temp, method="fdr")
# [1] 0.9062609 0.9062609 0.9062609 0.9312215 0.9062609 0.9062609 0.9312215
# [8] 0.9062609 0.9062609 0.8668878 0.9062609 0.9062609 …
Run Code Online (Sandbox Code Playgroud) 是否有确定的方法来保存会话之间某个包的选项或信息?
例如,有人制作游戏并将其作为R包发布.如果他们想要保存高分并且每次R开始新会话时没有重置它们,那么最好的方法是什么?目前我只能想到将文件存储在用户主目录中,但我不确定我是否喜欢这种方法.
在迭代集合的索引值时,通常会在SO上看到以下代码:
for (i in 1:length(x)) {
# ...
}
Run Code Online (Sandbox Code Playgroud)
当集合为空时,代码行为异常,因为1:length(x)
变为1:0
赋予i
值1
和0
.
iterate <- function(x) {
for (i in 1:length(x)) {
cat('x[[', i, ']] is', x[[i]], '\n')
}
}
> iterate(c(1,2,3))
x[[ 1 ]] is 1
x[[ 2 ]] is 2
x[[ 3 ]] is 3
> iterate(c())
x[[ 1 ]] is
x[[ 0 ]] is
Run Code Online (Sandbox Code Playgroud)
我记得看到一个优雅的习惯用于定义一个没有元素的序列,当它x
是空的但我记不起来了.你用什么成语?
我想知道是否有人知道一个好方法让R或ESS停止执行其余代码超出发生错误的点,如果我正在评估一个区域或缓冲区(我只发现了相反的请求)帮助档案).我正在查看R帮助文件,但option(error=stop)
只会停止执行有问题的函数或语句,但不会停止执行它们.谢谢!
对子集化数组时,R的行为会有所不同,具体取决于其中一个维度的长度是否为1.如果维度的长度为1,则在子集化期间该维度将丢失:
ax <- array(1:24, c(2,3,4))
ay <- array(1:12, c(1,3,4))
dim(ax)
#[1] 2 3 4
dim(ay)
#[1] 1 3 4
dim(ax[,1:2,])
#[1] 2 2 4
dim(ay[,1:2,])
#[1] 2 4
Run Code Online (Sandbox Code Playgroud)
从我的观点来看,ax和ay是相同的,对它们执行相同的子集操作应返回具有相同尺寸的数组.我可以看到R处理这两种情况的方式可能很有用,但在我编写的代码中它是不可取的.这意味着当我将子集化数组传递给另一个函数时,如果我碰巧在较早阶段将维度缩减为长度1,则该函数将获得缺少维度的数组.(所以在这种情况下,R的灵活性使我的代码不那么灵活!)
如何在子集化期间防止R丢失长度为1的维度?还有另一种索引方式吗?有些标志要设置?
我喜欢使用工作区的想法.到目前为止,我总是保存整个工作区并将它们完全加载到现有项目中.但很多时候我只需要来自指定工作区的单个对象.是否有可能从另一个工作区中单独加载它们.
有时,将对象添加到现有工作空间会很不错.想象一下,例如,您有五个巨大的脚本,具有独立的巨大工作空间,您不希望将它们混合在一起,将它们全部放在一个工作空间中.所以现在你想只将五个劣质空间中的每一个的干净结果存储到另一个干净的工作空间......
所以论文是基本的任务:
# save entire workspace
save.image("mypath/myworkspace")
# load entire workspace
load ("mypath/myworkspace")
# save a single object (or several)
save (myobject,file="mypath/myworkspace")
# load a single object from an existing workspace
?
# add a single object to an existing workspace
?
Run Code Online (Sandbox Code Playgroud) 我刚刚向Apple提交了一个应用程序并被拒绝,因为我们要求用户注册一张信用卡,然后通过从他们的卡中收取一些金额来使用我们的服务.我不想添加应用购买,因为他们扣除了已支付金额的30%.我还检查了一个paypal应用程序,用户通过paypal应用程序输入他的信用卡付款,这是在应用程序商店现在可以为我做的事情.
任何建议,链接或想法都会有所帮助.
Python的numpy库对花式索引进行"矢量化"有时会产生意想不到的结果.例如:
import numpy
a = numpy.zeros((1000,4), dtype='uint32')
b = numpy.zeros((1000,4), dtype='uint32')
i = numpy.random.random_integers(0,999,1000)
j = numpy.random.random_integers(0,3,1000)
a[i,j] += 1
for k in xrange(1000):
b[i[k],j[k]] += 1
Run Code Online (Sandbox Code Playgroud)
在数组'a'和'b'中给出不同的结果(即,无论重复如何,元组(i,j)的外观在'a'中显示为1,而重复在'b'中计数).这很容易验证如下:
numpy.sum(a)
883
numpy.sum(b)
1000
Run Code Online (Sandbox Code Playgroud)
值得注意的是,花式索引版本比for循环快了近两个数量级.我的问题是:"在提供的示例中使用for循环实现的numpy计算重复计数是否有效?"