我正在测试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) 重新发布到这篇文章,我创建了一个在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) 我在尝试在混合模型上使用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轴上具有预测的寄生虫负担的图表,以证明每种基因型在寄生虫负担方面的预测差异,同时考虑了所有其他重要的协变量。
这是我的数据:
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) 我有一个 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) 我目前正在使用 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) 我使用来自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)
{'概率':数组([0.78595656,0.21404342],dtype = float32),'登录':数组([-1.3007226],dtype = float32),'类':数组(['0'],dtype = object) ,'class_ids':array([0]),'logistic':array([0.21404341],dtype = float32)}
我该怎么读?
我有一个接受过大输入的训练模型。我通常将其作为形状 (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 …
我正在尝试获取混合模型预测的置信区间。预测函数不输出任何置信区间。很少有 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”
我了解如何为多元时间序列创建模型,并且还知道如何为该序列生成多步输出。但如何扩展这个模型以处理多个时间序列呢?
我的数据包含许多国家/地区的时间序列,每个国家/地区有 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) predict ×10
r ×6
keras ×2
lme4 ×2
python ×2
tensorflow ×2
data.table ×1
gam ×1
json ×1
kernlab ×1
lm ×1
lstm ×1
mixed-models ×1
numpy ×1
standards ×1