标签: predict

使用 kernlab 包错误预测 .local(object, ...) 中的错误:测试向量与模型 R 不匹配

我正在测试kernlab回归问题中的包。'Error in .local(object, ...) : test vector does not match model !ksvm对象传递给predict函数时,这似乎是一个常见的问题。但是,我刚刚找到了不适用于我的问题的分类问题或自定义内核的答案(我使用内置的进行回归)。我在这里没有想法了,我的示例代码是:

data <- matrix(rnorm(200*10),200,10)
tr <- data[1:150,]
ts <- data[151:200,]

mod <- ksvm(x = tr[,-1],
            y = tr[,1],
            kernel = "rbfdot", type = 'nu-svr',
            kpar = "automatic", C = 60, cross = 3)

pred <- predict(mod, 
                ts
                )
Run Code Online (Sandbox Code Playgroud)

r predict kernlab

5
推荐指数
1
解决办法
7576
查看次数

使用线性回归对data.table进行预测

重新发布到这篇文章,我创建了一个在data.table包上进行线性回归的例子,如下所示:

## rm(list=ls()) # anti-social
library(data.table)
set.seed(1011)
DT = data.table(group=c("b","b","b","a","a","a"),
                v1=rnorm(6),v2=rnorm(6), y=rnorm(6))
setkey(DT, group)
ans <- DT[,as.list(coef(lm(y~v1+v2))), by = group]
Run Code Online (Sandbox Code Playgroud)

返回,

   group (Intercept)        v1        v2
1:     a    1.374942 -2.151953 -1.355995
2:     b   -2.292529  3.029726 -9.894993
Run Code Online (Sandbox Code Playgroud)

我能够获得lm函数的系数.

我的问题是: 我们如何直接用于predict新的观察?如果我们有新的观察结果如下:

new <- data.table(group=c("b","b","b","a","a","a"),v1=rnorm(6),v2=rnorm(6))
Run Code Online (Sandbox Code Playgroud)

我试过了:

setkey(new, group)
DT[,predict(lm(y~v1+v2), new), by = group]
Run Code Online (Sandbox Code Playgroud)

但它给我带来了奇怪的答案:

    group         V1
 1:     a  -2.525502
 2:     a   3.319445
 3:     a   4.340253
 4:     a   3.512047
 5:     a   2.928245
 6:     a   1.368679 …
Run Code Online (Sandbox Code Playgroud)

r predict lm data.table

5
推荐指数
1
解决办法
2499
查看次数

在混合模型上使用lme4预测功能时遇到问题

我在尝试在混合模型上使用lme4预测函数时遇到了一些困难。进行预测时,我希望能够将我的一些解释变量设置为指定水平,但取其他平均值。

以下是一些组成的数据,它们是我原始数据集的简化的废话版本:

a <-  data.frame(
    TLR4=factor(rep(1:3, each=4, times=4)), 
    repro.state=factor(rep(c("a","j"),each=6,times=8)), 
    month=factor(rep(1:2,each=8,times=6)), 
    sex=factor(rep(1:2, each=4, times=12)), 
    year=factor(rep(1:3, each =32)), 
    mwalkeri=(sample(0:15, 96, replace=TRUE)), 
    AvM=(seq(1:96))
)
Run Code Online (Sandbox Code Playgroud)

AvM号是水田鼠识别号。响应变量(mwalkeri)是每个田鼠跳蚤数量的计数。我感兴趣的主要解释变量是Tlr4,它是具有3个不同基因型(编码为1、2和3)的基因。其他解释变量包括生殖状态(成人或青少年),月份(1或2),性别(1或2)和年份(1、2或3)。我的模型看起来像这样(当然,此模型现在不适用于组成的数据,但这没关系):

install.packages("lme4")
library(lme4)
mm <- glmer(mwalkeri~TLR4+repro.state+month+sex+year+(1|AvM), data=a, 
    family=poisson,control=glmerControl(optimizer="bobyqa"))`
summary(mm)
Run Code Online (Sandbox Code Playgroud)

我想对每种不同的Tlr4基因型的寄生虫负担做出预测,同时考虑所有其他协变量。为此,我创建了一个新的数据集以指定要设置每个解释变量的级别,并使用了预测函数:

b <-  data.frame(
    TLR4=factor(1:3), 
    repro.state=factor(c("a","a","a")),
    month=factor(rep(1, times=3)), 
    sex=factor(rep(1, times=3)), 
    year=factor(rep(1, times=3))
)
predict(mm, newdata=b, re.form=NA, type="response")
Run Code Online (Sandbox Code Playgroud)

这确实奏效,但我真的更希望将多年平均,而不是将年份设置为一个特定水平。但是,每当我尝试平均年份时,都会收到以下错误消息:

model.frame.default(delete.response(Terms),newdata,na.action = na.action,中的错误:因子年份具有新水平

我是否可以跨多年取平均值而不是选择指定的水平?另外,我还没有弄清楚如何获得与这些预测相关的标准误差。我能够获得用于预测的标准错误的唯一方法是使用lsmeans()函数(来自lsmeans包):

c <- lsmeans(mm, "TLR4", type="response")
summary(c, type="response")
Run Code Online (Sandbox Code Playgroud)

自动生成标准错误。但是,这是通过对所有其他解释变量求平均值而生成的。我敢肯定有可能更改它,但我会尽可能使用该predict()功能。我的目标是创建一个在X轴上具有Tlr4基因型,在y轴上具有预测的寄生虫负担的图表,以证明每种基因型在寄生虫负担方面的预测差异,同时考虑了所有其他重要的协变量。

r predict lme4

5
推荐指数
1
解决办法
1694
查看次数

如何使用预测计算 R 中预测数据的标准误差

这是我的数据:

a <- c(60, 65, 70, 75, 80, 85, 90, 95, 100, 105)
b <- c(26, 24.7, 20, 16.1, 12.6, 10.6, 9.2, 7.6, 6.9, 6.9)
a_b <- cbind(a,b)

plot(a,b, col = "purple")
abline(lm(b ~ a),col="red")
reg <- lm(b ~ a)
Run Code Online (Sandbox Code Playgroud)

我想使用 predict 函数来计算 110 处预测 b 值的标准误差。

z <- predict(reg, newdata=data.frame(year=110), se.fit=TRUE)
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出,但我认为这只是给了我 10 个时间点的标准误差,而不是新的第 11 个数据点:

 z
 $fit
   1         2         3         4         5         6         7         8         9        10 
 24.456364 22.146061 19.835758 17.525455 15.215152 12.904848 10.594545   8.284242  5.973939  3.663636 

 $se.fit …
Run Code Online (Sandbox Code Playgroud)

standards r predict

5
推荐指数
1
解决办法
7755
查看次数

从 R gamlss 对象预测新拟合值时出错

我有一个 gamlss 模型,我想用它来进行新的 y 预测(和置信区间),以便可视化模型与真实数据的拟合程度。我想从随机预测值的新数据集(而不是原始数据)中进行预测,但我遇到了错误消息。下面是一些示例代码:

library(gamlss)    

# example data
irr <- c(0,0,0,0,0,0.93,1.4,1.4,2.3,1.5)
lite <- c(0,1,2,2.5)
blck <- 1:8
raw <- data.frame(
   css =abs(rnorm(500, mean=0.5, sd=0.1)),
   nit =abs(rnorm(500, mean=0.72, sd=0.5)),
   irr =sample(irr, 500, replace=TRUE),
   lit =sample(lite, 500, replace=TRUE),
   block =factor(sample(blck, 500, replace=TRUE))
)

# the model
mod <- gamlss(css~nit + irr + lit + random(block), 
       sigma.fo=~irr*nit + random(block), data=raw, family=BE)

# new data (predictors) for making css predictions
pred <- data.frame(
nit =abs(rnorm(500, mean=0.72, sd=0.5)),
irr =sample(irr, 500, replace=TRUE),
lit =sample(lite, …
Run Code Online (Sandbox Code Playgroud)

r predict gam

5
推荐指数
1
解决办法
1584
查看次数

Keras 预测和预测生成器之间的不同结果

我目前正在使用 Keras 进行卫星图像分类,但在使用 Predict 和 Predict_generator 获得正确的预测时遇到了麻烦。

下面是我的代码

import os
import numpy as np  
import pandas as pd
from keras.optimizers import Adam, SGD
from tools import load_val_datas, load_test_datas, make_predictions, make_submissions
from keras_tools import save_model, load_model

from callbacks import CustomCallbacks
from data_generator import ImageDataGenerator
from model import base_cnn

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'

TRAIN_SIZE, VAL_SIZE, TEST_SIZE, TEST_SIZE_ADD = 30000, 10479, 40669, 20522
IMAGE_FIRST_DIM, N_COLORS = 32, 3
IMAGE_SIZE = IMAGE_FIRST_DIM * IMAGE_FIRST_DIM * N_COLORS
LABEL_SIZE = 17
DROPOUT = 0.25
BATCH_SIZE = 96 …
Run Code Online (Sandbox Code Playgroud)

predict keras

5
推荐指数
1
解决办法
3067
查看次数

使用输入fn在Tensorflow估计器中进行预测

我使用来自https://github.com/tensorflow/tensorflow/blob/r1.3/tensorflow/examples/learn/wide_n_deep_tutorial.py的教程代码,并且代码工作正常,直到我尝试做出预测而不是仅仅对其进行评估。我试图制作另一个看起来像这样的函数(只需删除参数y):

def input_fn_predict(data_file, num_epochs, shuffle):
  """Input builder function."""
  df_data = pd.read_csv(
      tf.gfile.Open(data_file),
      names=CSV_COLUMNS,
      skipinitialspace=True,
      engine="python",
      skiprows=1)
  # remove NaN elements
  df_data = df_data.dropna(how="any", axis=0)
  labels = df_data["income_bracket"].apply(lambda x: ">50K" in x).astype(int)
  return tf.estimator.inputs.pandas_input_fn( #removed paramter y
      x=df_data,
      batch_size=100,
      num_epochs=num_epochs,
      shuffle=shuffle,
      num_threads=5)
Run Code Online (Sandbox Code Playgroud)

并这样称呼它:

predictions = m.predict(
      input_fn=input_fn_predict(test_file_name, num_epochs=1, shuffle=True)
  )
  for i, p in enumerate(predictions):
      print(i, p)
Run Code Online (Sandbox Code Playgroud)
  • 我做对了吗?
  • 为什么我得到预测81404而不是16282(测试文件中的行数)?
  • 每行包含以下内容:

{'概率':数组([0.78595656,0.21404342],dtype = float32),'登录':数组([-1.3007226],dtype = float32),'类':数组(['0'],dtype = object) ,'class_ids':array([0]),'logistic':array([0.21404341],dtype = float32)}

我该怎么读?

classification predict tensorflow

5
推荐指数
1
解决办法
1万
查看次数

gcloud ml-engine 在大文件上返回错误

我有一个接受过大输入的训练模型。我通常将其作为形状 (1,473,473,3) 的 numpy 数组来执行。当我把它放到 JSON 中时,我最终得到了一个大约 9.2MB 的文件。即使我将其转换为 JSON 文件的 base64 编码,输入仍然相当大。

ml-engine predict 在发送 JSON 文件时拒绝我的请求,并出现以下错误:

(gcloud.ml-engine.predict) HTTP request failed. Response: {
"error": {
    "code": 400,
    "message": "Request payload size exceeds the limit: 1572864 bytes.",
    "status": "INVALID_ARGUMENT"
  }
}
Run Code Online (Sandbox Code Playgroud)

看起来我无法向 ML-engine 发送大小超过 1.5MB 的任何内容。这确定是一回事吗?其他人如何绕过对大数据进行在线预测?我必须启动计算引擎还是会遇到同样的问题?

编辑:

我从 Keras 模型开始并尝试导出到 tensorflow 服务。我将我的 Keras 模型加载到一个名为“model”的变量中,并定义了一个目录“export_path”。我像这样构建 tensorflow 服务模型:

signature = predict_signature_def(inputs={'input': model.input},
                                outputs={'output': model.output})
builder = saved_model_builder.SavedModelBuilder(export_path)
builder.add_meta_graph_and_variables(
    sess=sess,
    tags=[tag_constants.SERVING],
    signature_def_map={
        signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY: signature
    }
)
builder.save()
Run Code Online (Sandbox Code Playgroud)

输入将如何查找此 signature_def?JSON 会像 {'input': ' https://storage.googleapis.com/projectid/bucket/filename …

python json numpy predict google-cloud-ml

5
推荐指数
1
解决办法
1932
查看次数

如何获得 lmer 对象的置信区间?

我正在尝试获取混合模型预测的置信区间。预测函数不输出任何置信区间。很少有 StackOverflow 答案建议使用 merTools 包中的 PredictInterval 函数来获取间隔,但是这两个函数的预测估计之间存在差异,我试图在下图中进行比较。有人可以让我知道我在这里做错了什么吗?另外,我尝试构建的实际模型与下面代码片段中显示的模型类似,其中除了截距之外我没有固定效果组件。

library(merTools)
library(lme4)

dat <- iris
mod <- lmer(Sepal.Length ~ 1 + (1 + Sepal.Width + Petal.Length + 
                                  Petal.Width|Species), data=dat)

c1 <- predict(mod, dat)
c2 <- predictInterval(mod, dat)

plot_data <- cbind(c1, c2)
plot_data$order <- c(1:nrow(plot_data))

library(ggplot2)
ggplot(plot_data) + geom_line(aes(x=order, y=c1), color='red') + 
  geom_ribbon(aes(x=order, ymin=lwr, ymax=upr), color='blue', alpha=0.2) +  
  geom_line(aes(x=order, y=fit), color='blue')
Run Code Online (Sandbox Code Playgroud)

红线表示预测“c1”,蓝线表示预测“c2”

在此输入图像描述

r predict lme4 confidence-interval mixed-models

5
推荐指数
1
解决办法
4424
查看次数

使用 LSTM 进行多变量多步时间序列预测

我了解如何为多元时间序列创建模型,并且还知道如何为该序列生成多步输出。但如何扩展这个模型以处理多个时间序列呢?

我的数据包含许多国家/地区的时间序列,每个国家/地区有 5 个特征。我的目标是为每个国家提供未来 28 天的预测。

这是一个多元时间序列的图(图中未显示其中一个特征): 在此输入图像描述

以下模型是一个编码器解码器 LSTM,能够生成 28 天的预测(尽管它们不是很准确):

Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
lstm_1 (LSTM)                (None, 10)                640
_________________________________________________________________
repeat_vector_1 (RepeatVecto (None, 7, 10)             0
_________________________________________________________________
lstm_2 (LSTM)                (None, 7, 10)             840
_________________________________________________________________
time_distributed_1 (TimeDist (None, 7, 5)              55
=================================================================
Total params: 1,535
Trainable params: 1,535
Non-trainable params: 0
_________________________________________________________________
Run Code Online (Sandbox Code Playgroud)

训练数据分为 7 天的时间段,每个时间段比前一个时间段提前一天。示例(但只有 1 个特征而不是 5 个):

[1, 2, 3, 4, 5, 6, 7], [2, 3, 4, 5, 6, 7, 8] ... …
Run Code Online (Sandbox Code Playgroud)

python predict lstm keras tensorflow

5
推荐指数
1
解决办法
1737
查看次数