我已经开始使用该scikit-garden软件包中的分位数随机森林(QRF)。以前,我是使用RandomForestRegresserfrom 创建常规随机森林的sklearn.ensemble。
看起来,QRF的速度与具有较小数据集大小的常规RF相当,但是随着数据大小的增加,QRF的预测速度要比RF慢得多。
这是预期的吗?如果是这样,有人可以解释一下为什么要花这么长时间才能做出这些预测和/或就如何更及时地获得分位数预测给出任何建议。
请参见下面的玩具示例,在该示例中,我测试了各种数据集大小的训练时间和预测时间。
import matplotlib as mpl
mpl.use('Agg')
from sklearn.ensemble import RandomForestRegressor
from skgarden import RandomForestQuantileRegressor
from sklearn.model_selection import train_test_split
import numpy as np
import time
import matplotlib.pyplot as plt
log_ns = np.arange(0.5, 5, 0.5) # number of observations (log10)
ns = (10 ** (log_ns)).astype(int)
print(ns)
m = 14 # number of covariates
train_rf = []
train_qrf = []
pred_rf = []
pred_qrf = []
for n in ns:
# create dataset …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种在R中进行非负分位数和Huber回归的快速方法(即约束所有系数都> 0).我尝试使用CVXR包进行分位数和Huber回归以及quantreg用于分位数回归的包,但是当我使用非负性约束时,CVXR它非常慢并且quantreg看起来很麻烦.有人知道R中的一个好的和快速的解决方案,例如使用Rcplex包或R gurobi API,从而使用更快的CPLEX或gurobi优化器?
请注意,我需要运行一个大小低于80 000次的问题大小,我只需要y在每次迭代中更新向量,但仍然使用相同的预测矩阵X.从这个意义上讲,我认为CVXR现在我必须obj <- sum(quant_loss(y - X %*% beta, tau=0.01)); prob <- Problem(Minimize(obj), constraints = list(beta >= 0))在每次迭代中做到这一点是低效的,当问题实际上保持不变并且我想要更新的时候y.有没有想过要做得更好/更快?
最小的例子:
## Generate problem data
n <- 7 # n predictor vars
m <- 518 # n cases
set.seed(1289)
beta_true <- 5 * matrix(stats::rnorm(n), nrow = n)+20
X <- matrix(stats::rnorm(m * n), nrow = m, ncol = …Run Code Online (Sandbox Code Playgroud) 我正在为 R 中的波士顿住房数据构建分位数回归模型 + LASSO 惩罚。我发现了 2 个可以构建此类模型的包:rqPen 和 quantreg。rqPen 实现了一个交叉验证过程来调整 LASSO 参数 lambda,所以我决定使用这个。我考虑了算法自动选择的 100 个不同的 lambda 值和 10 倍:
library(rqPen)
library(mlbench)
data("BostonHousing")
help(BostonHousing)
x_boston <- data.matrix(BostonHousing[,-14])
y_boston <- BostonHousing[,14]
cv_m1_boston <- cv.rq.pen(x_boston,y_boston, penalty="LASSO", nlambda=100, nfolds=10, tau=.5, cvFunc="AE")
Run Code Online (Sandbox Code Playgroud)
CV 的结果是,当 lambda 值为 0.46 时,最小绝对误差为 4.2。该模型仅考虑预测变量“zn、”tax”、“b”和“lstat”,并将与其余预测变量相关的系数发送为零。
m1_boston <- rq.lasso.fit(x_boston[i_train,], y_boston[i_train], tau=0.5, lambda=0.46)
Coefficients:
intercept crim zn indus chas nox rm age dis rad
27.175724364 0.000000000 0.025560221 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
tax ptratio b lstat
-0.008151729 0.000000000 0.007577458 -0.495927958 …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Python 中的分位数回归来预测我的目标变量。
我考虑用于训练和验证的数据来自2015年10月至2017年12月31日期间。
现在模型已经开发出来,我正在尝试预测 2018 年 1 月的值,这会引发以下错误:
ValueError:操作数无法与形状 (34,) (33,) 一起广播
mod = smf.quantreg('ASBCU_SUM~Month+Year+WeekofMonth+DayNum+isHoliday+PCOP_CS+PCOP_LS+PCOP_IFS+PCOP_LSS+PCOP_FSS+PCOP_FS+DayOfWeek_6+DayOfWeek_5+DayOfWeek_2+DayOfWeek_7+DayOfWeek_3+DayOfWeek_4',dfTrainingData)
res = mod.fit(q=0.8)
Run Code Online (Sandbox Code Playgroud)
如果我检查,错误来自 statmodels 内的分位数回归.py 文件。
diff = np.max(np.abs(beta - beta0))
Run Code Online (Sandbox Code Playgroud)
我已经浏览过有关堆栈溢出的类似帖子,建议检查目标变量的数据类型是否为数字。这是变量的数据类型:
ASBCU_SUM:int64
月份:类别
年份:类别
每月一周:类别
是假期:int64
DayNum:int32
PCOP_SUM:int64
PCOP_CS:int64
PCOP_LS:int64
PCOP_IFS:int64
PCOP_LSS:int64
PCOP_FS:int64
PCOP_FSS:int64
DayOfWeek_3:float64
DayOfWeek_2:float64
DayOfWeek_5:float64
DayOfWeek_7:float64
DayOfWeek_4:float64
DayOfWeek_6:float64
使用 2015-2017 年数据开发模型时数据类型相同。
我真的很感谢任何帮助..
我希望分位数回归可以预测单调的分位数,即
但是,R中的quantreg包会生成完全没有意义的预测,请参见图:
这有什么理由吗?
以下示例.
library(quantreg)
library(ggplot2)
data(engel)
taus <- seq(0.01,0.99,0.01)
model_qr <- quantreg::rq(foodexp~income,tau=taus,data = engel)
test <- data.frame(income = 200, foodexp= 300)
result <- data.frame(
Forecast = as.numeric(predict(model_qr, test)),
Quantile = taus *100
)
ggplot(result, aes(x = Quantile, y = Forecast)) +
geom_point()
Run Code Online (Sandbox Code Playgroud) 在 Rcpp 项目中,我希望能够调用 R 函数(包中的cobs函数cobs进行凹样条拟合)或调用它所依赖的fortran 代码cobs(该函数使用的quantregrq.fit.sfnc函数来拟合约束样条模型,该模型又依赖于包中的 fortran 编码的srqfnc函数)在编译指示 openmp 并行 for 循环中(我的代码的其余部分主要需要一些简单的线性代数,所以这不会有问题,但是遗憾的是,每个内部循环迭代还需要我进行凹样条拟合)。我想知道这是否被允许或可能,因为我认为此类调用不是线程安全的?是否有一个简单的解决方案,比如用 包围这些调用?有人有这方面的例子吗?或者在这种情况下唯一的方法是首先使用线程安全的犰狳类来完成&函数的完整移植?quantreg#pragma omp criticalRcppcobsrq.fit.sfnc