我试图用动态回归模型从预测中复制模型,并且我无法使用TSA库中的arimax函数匹配R中的输出.我能够非常接近SAS的结果,但我想使用R并希望有人知道如何编写arimax函数来实现这一目标.我发现函数有问题(通常源于arima和optim)正确收敛,但在这种情况下会返回一个模型,但参数是关闭的.
这些数据是astsa图书馆Box和Jenkins出售的砂带系列中的前140个观测数据.
这是本书的片段,显示了他们的结果(再次,我可以与SAS接近)和R(以及结果)使用的代码.我注意到的一件事是在arimax()的帮助文件中有建议"均值删除"传递函数协变量.我不确定这意味着什么,也不确定这是否是问题的一部分.
从书中:

这是R代码:
library(TSA)
library(Hmisc)
library(astsa)
sales_140<-window(sales,end=140)
lead_140<-window(lead,end=140)
mod<-arimax(window(sales_140,start=4),order=c(0,1,1),
xtransf = window(Lag(lead_140,3),start=4),transfer = list(c(1,0)),
xreg=data.frame(seq(1:137)),method="ML")
mod
#Series: window(sales_140, start = 4)
#ARIMA(0,1,1)
#Coefficients:
# ma1 seq.1.137. T1-AR1 T1-MA0
# 0.5974 0.3322 0.0613 2.8910
#s.e. 0.0593 0.1111 0.0275 0.1541
#sigma^2 estimated as 0.6503: log likelihood=-163.94
#AIC=335.87 AICc=336.34 BIC=350.44
Run Code Online (Sandbox Code Playgroud)
这是SAS代码:
proc arima data=BL;
identify var=sales(1) crosscorr=lead(1);
estimate q=1 input=( 3 $ ( 0 ) / ( 1) lead) method=ml;
forecast out = out1 lead …Run Code Online (Sandbox Code Playgroud) 我使用R包GBM可能是我预测建模的首选.有关于这个算法,但在一个"坏"这么多伟大的事情是,我不能轻易使用型号代码进球我要编写能够在SAS或其他系统中使用的代码外河的新数据(我将开始与SAS(无法访问IML)).
假设我有以下数据集(来自GBM手册)和型号代码:
library(gbm)
set.seed(1234)
N <- 1000
X1 <- runif(N)
X2 <- 2*runif(N)
X3 <- ordered(sample(letters[1:4],N,replace=TRUE),levels=letters[4:1])
X4 <- factor(sample(letters[1:6],N,replace=TRUE))
X5 <- factor(sample(letters[1:3],N,replace=TRUE))
X6 <- 3*runif(N)
mu <- c(-1,0,1,2)[as.numeric(X3)]
SNR <- 10 # signal-to-noise ratio
Y <- X1**1.5 + 2 * (X2**.5) + mu
sigma <- sqrt(var(Y)/SNR)
Y <- Y + rnorm(N,0,sigma)
# introduce some missing values
#X1[sample(1:N,size=500)] <- NA
X4[sample(1:N,size=300)] <- NA
X3[sample(1:N,size=30)] <- NA
data <- data.frame(Y=Y,X1=X1,X2=X2,X3=X3,X4=X4,X5=X5,X6=X6)
# fit initial model
gbm1 <- gbm(Y~X1+X2+X3+X4+X5+X6, # formula
data=data, # dataset …Run Code Online (Sandbox Code Playgroud) 从这个例子:https: //github.com/fchollet/keras/blob/master/examples/imdb_cnn.py
下面是这个片段.嵌入层为批量中的每个示例输出400 x 50矩阵.我的问题是1D卷积是如何工作的?它如何在400 x 50矩阵中工作?
# we start off with an efficient embedding layer which maps
# our vocab indices into embedding_dims dimensions
model.add(Embedding(max_features,
embedding_dims,
input_length=maxlen,
dropout=0.2))
# we add a Convolution1D, which will learn nb_filter
# word group filters of size filter_length:
model.add(Convolution1D(nb_filter=nb_filter,
filter_length=filter_length,
border_mode='valid',
activation='relu',
subsample_length=1))
Run Code Online (Sandbox Code Playgroud) 我正在研究使用scikit-learn构建模型的两个场景,我无法弄清楚为什么其中一个返回的结果与另一个结果根本不同.两种情况(我所知道的)之间唯一不同的是,在一种情况下,我一次性对所有分类变量进行热编码(在整个数据上),然后在训练和测试之间进行分割.在第二种情况下,我在训练和测试之间进行分割,然后根据训练数据对两组进行一次热编码.
后一种情况在技术上更好地判断过程的泛化误差,但这种情况下返回的标准化gini与第一种情况相比显着不同(和差 - 基本上没有模型).我知道第一种情况gini(~0.33)与建立在这个数据上的模型一致.
为什么第二种情况会返回如此不同的基尼?FYI数据集包含数字和分类变量的混合.
方法1(单热编码整个数据,然后拆分)返回:Validation Sample Score: 0.3454355044 (normalized gini).
from sklearn.cross_validation import StratifiedKFold, KFold, ShuffleSplit,train_test_split, PredefinedSplit
from sklearn.ensemble import RandomForestRegressor , ExtraTreesRegressor, GradientBoostingRegressor
from sklearn.linear_model import LogisticRegression
import numpy as np
import pandas as pd
from sklearn.feature_extraction import DictVectorizer as DV
from sklearn import metrics
from sklearn.preprocessing import StandardScaler
from sklearn.grid_search import GridSearchCV,RandomizedSearchCV
from sklearn.ensemble import RandomForestRegressor, ExtraTreesRegressor
from scipy.stats import randint, uniform
from sklearn.metrics import mean_squared_error
from sklearn.datasets import load_boston
def gini(solution, submission):
df = …Run Code Online (Sandbox Code Playgroud) 注意:寻找一些有效方法的帮助,除了大型连接,然后计算日期之间的差异
我有table1国家ID和日期(没有这些值的重复),我想总结table2信息(其中包含country,date,cluster_x和count变量,其中cluster_x是cluster_1,cluster_2,cluster_3),因此table1每个都附加了集群ID的值以及table2日期table2之前30天内发生日期的汇总计数table1.
我相信这在SQL中很简单:如何在Pandas中做到这一点?
select a.date,a.country,
sum(case when a.date - b.date between 1 and 30 then b.cluster_1 else 0 end) as cluster1,
sum(case when a.date - b.date between 1 and 30 then b.cluster_2 else 0 end) as cluster2,
sum(case when a.date - b.date between 1 and 30 then b.cluster_3 else 0 end) as cluster3
from table1 a
left outer join table2 b
on a.country=b.country
group by a.date,a.country
Run Code Online (Sandbox Code Playgroud)
编辑:
这是一个有点改变的例子.假设这是table1,一个包含日期,城市,集群和计数的聚合数据集.下面是"查询"数据集(table2).在这种情况下,只要table1中的日期字段在30天之前,我们希望将table1的count字段与cluster1,cluster2,cluster3(实际上有100个)对应于country …
当依赖于训练和测试集之间的数据"手动"分割以及使用scikit-learn网格搜索功能时,我感到困惑的是实现看似非常不同的结果.我正在使用来自两个运行的kaggle竞赛的评估函数,并且网格搜索超过单个值(与手动拆分相同的值).由此产生的基尼值是如此不同,某处有错误,但我没有看到它,我想知道我在比较中是否存在疏忽?
为我跑的第一个代码块导致gini只是" Validation Sample Score: 0.0033997889 (normalized gini)."
第二个块(使用scikit)会产生更高的值:
Fitting 2 folds for each of 1 candidates, totalling 2 fits
0.334467621189
0.339421569449
[Parallel(n_jobs=-1)]: Done 3 out of 2 | elapsed: 9.9min remaining: -198.0s
[Parallel(n_jobs=-1)]: Done 2 out of 2 | elapsed: 9.9min finished
{'n_estimators': 1000}
0.336944643888
[mean: 0.33694, std: 0.00248, params: {'n_estimators': 1000}]
Run Code Online (Sandbox Code Playgroud)
评估功能:
def gini(solution, submission):
df = zip(solution, submission)
df = sorted(df, key=lambda x: (x[1],x[0]), reverse=True)
rand = [float(i+1)/float(len(df)) for i in range(len(df))]
totalPos = float(sum([x[0] for …Run Code Online (Sandbox Code Playgroud) 我经常在关系数据库中的SQL中进行的一个查询是将表连接回自身,并根据相同id的记录在时间上向后或向前汇总每一行.
例如,假设table1为列'ID','Date','Var1'
在SQL中,我可以为过去3个月的每个记录加上var1,如下所示:
Select a.ID, a.Date, sum(b.Var1) as sum_var1
from table1 a
left outer join table1 b
on a.ID = b.ID
and months_between(a.date,b.date) <0
and months_between(a.date,b.date) > -3
Run Code Online (Sandbox Code Playgroud)
在熊猫队有什么办法吗?
我第一次使用 dask 并尝试从训练有素的 keras 模型运行 predict()。
如果我不使用 dask,该函数可以正常工作(即 pd.DataFrame() 与 dd.DataFrame () )。使用 Dask,错误如下。这不是一个常见的用例吗(除了给 groupby 打分)
def calc_HR_ind_dsk(grp):
model=keras.models.load_model('/home/embedding_model.h5')
topk=10
x=[grp['user'].values,grp['item'].values]
pred_act=list(zip(model.predict(x)[:,0],grp['respond'].values))
top=sorted(pred_act, key=lambda x: -x[0])[0:topk]
hit=sum([x[1] for x in top])
return(hit)
import dask.dataframe as dd
#step 1 - read in data as a dask df. We could reference more than 1 files using '*' wildcard
df = dd.read_csv('/home/test_coded_final.csv',dtype='int64')
results=df.groupby('user').apply(calc_HR_ind_dsk).compute()
Run Code Online (Sandbox Code Playgroud)
类型错误:无法将 feed_dict 键解释为张量:Tensor Tensor("Placeholder_30:0", shape=(55188, 32), dtype=float32) 不是此图的元素。
我试图找到使用for循环并延迟dask的正确语法。我发现了一些教程和其他问题,但都不适合我的情况,这是非常基础的。
首先,这是并行运行for循环的正确方法吗?
%%time
list_names=['a','b','c','d']
keep_return=[]
@delayed
def loop_dummy(target):
for i in range (1000000000):
pass
print('passed value is:'+target)
return(1)
for i in list_names:
c=loop_dummy(i)
keep_return.append(c)
total = delayed(sum)(keep_return)
total.compute()
Run Code Online (Sandbox Code Playgroud)
这产生了
passed value is:a
passed value is:b
passed value is:c
passed value is:d
Wall time: 1min 53s
Run Code Online (Sandbox Code Playgroud)
如果我连续运行
%%time
list_names=['a','b','c','d']
keep_return=[]
def loop_dummy(target):
for i in range (1000000000):
pass
print('passed value is:'+target)
return(1)
for i in list_names:
c=loop_dummy(i)
keep_return.append(c)
Run Code Online (Sandbox Code Playgroud)
它实际上更快。
passed value is:a
passed value is:b
passed value is:c
passed value is:d …Run Code Online (Sandbox Code Playgroud) 我已经按照Linux上的说明安装了lightGBM:
https://github.com/Microsoft/LightGBM/wiki/Installation-Guide#linux-2
我能够使用CLI成功运行GPU训练(和CPU):https : //github.com/Microsoft/LightGBM/blob/master/docs/GPU-Tutorial.md#run-your-first-learning-task -gpu
但是,当我尝试导入python包(python 3.6)时,出现以下错误:
OSError: /home/anaconda3/lib/python3.6/site-packages/lightgbm-0.2-py3.6.egg/lightgbm/lib_lightgbm.so: symbol clCreateCommandQueueWithProperties, version OPENCL_2.0 not defined in file libOpenCL.so.1 with link time reference
Run Code Online (Sandbox Code Playgroud)
我对理解链接和其他可能是问题的事物还很陌生。有人能够提供一些易于遵循的建议吗?
python ×4
dask ×2
keras ×2
pandas ×2
r ×2
sas ×2
scikit-learn ×2
convolution ×1
dask-delayed ×1
gbm ×1
opencv ×1
python-2.7 ×1
tensorflow ×1