标签: cross-validation

如何在R中使用LibSVM执行10次交叉验证?

我知道在MatLab中这很容易('-v 10').

但我需要在R中做到这一点.我确实发现了一个关于添加cross = 10参数的评论会做到这一点.但是这在帮助文件中没有得到证实,所以我对它持怀疑态度.

svm(Outcome ~. , data= source, cost = 100, gamma =1, cross=10)
Run Code Online (Sandbox Code Playgroud)

任何成功的R的SVM脚本的例子也会受到赞赏,因为我仍然遇到了一些死胡同?

编辑:我忘了提到我使用libsvm包的标签之外.

r machine-learning svm libsvm cross-validation

6
推荐指数
1
解决办法
8102
查看次数

回归树的对数变换因变量

我有一个数据集,在其中发现因变量(目标)具有偏斜的分布-即,存在一些非常大的值和一条长尾巴。

当我运行回归树时,将为大型观测值创建一个终端节点,为大多数其他观测值创建一个终端节点。

对数转换对因变量(目标变量)并将其用于回归树分析是否可以?尝试此操作时,我得到了一组不同的节点和拆分,似乎在每个存储桶中观察值的分布更加均匀。通过对数转换,“预测值”与“观察值”的Rsquare值也非常好。换句话说,通过日志转换,我似乎获得了更好的测试和验证性能。只是要确保对数转换是因变量具有偏斜分布时运行回归树的一种公认方法。

谢谢 !

regression machine-learning cross-validation

6
推荐指数
1
解决办法
5235
查看次数

计算具有负二项式响应的GLM的交叉验证

我有兴趣使用交叉验证(leave-one-out或K-folds)来测试我创建的几个不同的负二项式GLM.我正在使用glm.nb()函数MASS来运行负二项式回归.

我的问题是我是否可以使用cv.glm()from boot来测试这个模型.我倾向于不,但想知道是否有人知道一个功能,让我进行K-folds验证(或留下一个).或者,也许cv.glm()对负二项式完全有效.

以下是一些来自在线示例的数据.我原以为交叉验证结果($delta)应该在0到1之间,但下面的情况并非如此(可能表明出现了问题) http://www.ats.ucla.edu/stat/r/ DAE/nbreg.htm

我发现了一些关于解释输出的问题cv.glm(),但没有具体说明如何用R中的负二项模型进行交叉验证

require(foreign)
require(ggplot2)
require(MASS)
require(boot)

dat <- read.dta("http://www.ats.ucla.edu/stat/stata/dae/nb_data.dta")
dat <- within(dat, {
 prog <- factor(prog, levels = 1:3, labels = c("General", "Academic","Vocational"))
  id <- factor(id)
})


summary(m1 <- glm.nb(daysabs ~ math + prog, data = dat))

#This code will run, but is it valid for negative binomial GLM models?
cv.glm(dat,m1,K=10)
Run Code Online (Sandbox Code Playgroud)

[我不确定这个问题是属于这里还是交叉验证...]

regression r glm cross-validation

6
推荐指数
1
解决办法
1238
查看次数

R mlr包 - 是否可以从参数调整中保存所有模型?

我想询问是否可以保存在参数调整期间创建的所有模型,例如tuneParams功能.我想为每个超参数集的每个交叉验证折叠保存模型.

我可以看到有models两个resamplebenchmark函数的参数,但我找不到一个tuneParams或类似的功能,我无法找到一种方法来模仿这种行为使用其他功能(我是mlr的新手).

有没有办法做到这一点?

PS我知道这可能听起来很疯狂,但我需要它进行一些内部验证.

PS2不幸的是,似乎还没有"mlr"标签,我没有足够的代表来创建一个.

r machine-learning cross-validation mlr

6
推荐指数
1
解决办法
779
查看次数

GridSearchCV:如何指定测试集?

我有一个问题GridSearchCV

通过使用这个:

gs_clf = GridSearchCV(pipeline, parameters, n_jobs=-1, cv=6, scoring="f1")
Run Code Online (Sandbox Code Playgroud)

我指定 k 折交叉验证应该与 6 折一起使用,对吗?

所以这意味着我的语料被分成了 6 次训练集和 tet 集。

这是否意味着GridSearchCV我需要使用我的整个语料库,如下所示:

gs_clf = gs_clf.fit(corpus.data, corpus.target)
Run Code Online (Sandbox Code Playgroud)

如果是这样,我将如何从那里获得用于预测方法的训练集?

predictions = gs_clf.predict(??)
Run Code Online (Sandbox Code Playgroud)

我所看到的代码,其中的语料分成测试组,并使用训练集train_test_split,然后X_trainY_train传递给gs_clf.fit

但这对我来说没有意义:如果我事先将其拆分为语料库,为什么要在GridSearchCV.

感谢您的一些澄清!!

python scikit-learn cross-validation text-classification

6
推荐指数
1
解决办法
6061
查看次数

scikit-learn:cross_val_predict 仅适用于分区

我正在努力研究如何在 sklearn 中实现 TimeSeriesSplit。

下面链接中的建议答案产生了相同的 ValueError。

sklearn TimeSeriesSplit cross_val_predict 仅适用于分区

这里是我的代码中的相关位:

from sklearn.model_selection import cross_val_predict
from sklearn import svm

features = df[df.columns[0:6]]
target = df['target']

clf = svm.SVC(random_state=0)

pred = cross_val_predict(clf, features, target, cv=TimeSeriesSplit(n_splits=5).split(features))
Run Code Online (Sandbox Code Playgroud)
ValueError                                Traceback (most recent call last)
<ipython-input-57-d1393cd05640> in <module>()
----> 1 pred = cross_val_predict(clf, features, target, cv=TimeSeriesSplit(n_splits=5).split(features))

/home/jedwards/anaconda3/envs/py36/lib/python3.6/site-packages/sklearn/model_selection/_validation.py in cross_val_predict(estimator, X, y, groups, cv, n_jobs, verbose, fit_params, pre_dispatch, method)
    407 
    408     if not _check_is_permutation(test_indices, _num_samples(X)):
--> 409         raise ValueError('cross_val_predict only works for partitions')
    410 
    411     inv_test_indices …
Run Code Online (Sandbox Code Playgroud)

python time-series scikit-learn cross-validation

6
推荐指数
1
解决办法
4894
查看次数

如何在 BigQuery Standard SQL 中进行可重复采样?

此博客中,一位 Google Cloud 员工解释了如何在 BigQuery 中为机器学习进行可重复的数据集采样。这对于创建(和复制)数据的训练/验证/测试分区非常重要。

然而,该博客使用了 Legacy SQL,Google 现在已弃用它而支持标准 SQL。

您将如何使用标准 SQL 重新编写如下所示的博客示例代码?

#legacySQL
SELECT
  date,
  airline,
  departure_airport,
  departure_schedule,
  arrival_airport,
  arrival_delay
FROM
  [bigquery-samples:airline_ontime_data.flights]
WHERE
  ABS(HASH(date)) % 10 < 8
Run Code Online (Sandbox Code Playgroud)

sql hash google-bigquery cross-validation

6
推荐指数
1
解决办法
3402
查看次数

滚动窗口已修改-将窗口滚动量作为参数添加-前进分析

我一直在网络上搜索可以创建滚动窗口的方法,以便可以以通用的方式对时间序列执行交叉验证技术,即“前行分析”。

但是,我还没有解决任何在以下方面引入灵活性的解决方案:1)窗口大小(几乎所有方法都具有此功能;例如,pandas 滚动或稍微不同的np.roll)和2)窗口滚动量,即如何我们想滚动窗口很多索引(即,没有找到任何包含此索引的索引)。

我一直在这个答案@coldspeed的帮助下尝试优化和编写简洁的代码(由于无法达到所需的声誉,我无法在此处发表评论;希望尽快到达那里!),但我没有不能计入窗户滚动量。

我的想法:

  1. 我尝试了np.roll下面的示例,但没有成功。

  2. 我还试图修改下面乘以该ith值的代码,但是我没有使其适合列表理解,而我想维护该列表理解。

3.下面的示例适用于任何大小的窗口,但是,它仅将窗口“滚动”向前一步,我希望可以将其推广到任何一步。

因此,有什么方法可以在列表理解方法中使用这两个参数?或者,¿还有其他我找不到的资源可以使此操作变得容易吗?非常感谢所有帮助。我的示例代码如下:

In [1]: import numpy as np
In [2]: arr = np.random.random((10,3))

In [3]: arr

Out[3]: array([[0.38020065, 0.22656515, 0.25926935],
   [0.13446667, 0.04386083, 0.47210474],
   [0.4374763 , 0.20024762, 0.50494097],
   [0.49770835, 0.16381492, 0.6410294 ],
   [0.9711233 , 0.2004874 , 0.71186102],
   [0.61729025, 0.72601898, 0.18970222],
   [0.99308981, 0.80017134, 0.64955358],
   [0.46632326, 0.37341677, 0.49950571],
   [0.45753235, 0.55642914, 0.31972887],
   [0.4371343 , 0.08905587, 0.74511753]])

In [4]: inSamplePercentage = 0.4 …
Run Code Online (Sandbox Code Playgroud)

numpy python-3.x pandas cross-validation

6
推荐指数
1
解决办法
742
查看次数

进行“离开一个组出去”交叉验证时如何应用过采样?

我正在处理用于分类的不平衡数据,并且之前尝试使用综合少数族裔过采样技术(SMOTE)对培训数据进行过采样。但是,这一次我认为我还需要使用“离开一个组出去”(LOGO)交叉验证,因为我想在每个简历上都留出一个主题。

我不确定我能否很好地解释它,但是据我所知,要使用SMOTE进行k折CV,我们可以在每一折上循环进行SMOTE,正如我在另一篇文章中的代码中所看到的那样。以下是在K折CV上实施SMOTE的示例。

from sklearn.model_selection import KFold
from imblearn.over_sampling import SMOTE
from sklearn.metrics import f1_score

kf = KFold(n_splits=5)

for fold, (train_index, test_index) in enumerate(kf.split(X), 1):
    X_train = X[train_index]
    y_train = y[train_index]  
    X_test = X[test_index]
    y_test = y[test_index]  
    sm = SMOTE()
    X_train_oversampled, y_train_oversampled = sm.fit_sample(X_train, y_train)
    model = ...  # classification model example
    model.fit(X_train, y_train)  
    y_pred = model.predict(X_test)
    print(f'For fold {fold}:')
    print(f'Accuracy: {model.score(X_test, y_test)}')
    print(f'f-score: {f1_score(y_test, y_pred)}')
Run Code Online (Sandbox Code Playgroud)

没有SMOTE,我试图这样做来做LOGO CV。但是通过这样做,我将使用超不平衡数据集。

X = X
y = np.array(df.loc[:, df.columns == 'label'])
groups = …
Run Code Online (Sandbox Code Playgroud)

python machine-learning pandas scikit-learn cross-validation

6
推荐指数
1
解决办法
235
查看次数

为什么 sklearn.grid_search.GridSearchCV 在每次执行时都返回随机结果?

我试图在 Iris 数据集上使用sklearn.grid_search.GridSearchCV. 我使用 StratifiedKFold ( sklearn.cross_validation.StratifiedKFold) 进行交叉验证,因为我的数据有偏差。但是在每次执行 时GridSearchCV,它都会返回一组不同的参数。
鉴于数据和交叉验证每次都相同,它不应该返回相同的一组最佳参数吗?

源代码如下:

from sklearn.tree import DecisionTreeClassifier
from sklearn.grid_search import GridSearchCV

decision_tree_classifier = DecisionTreeClassifier()

parameter_grid = {'max_depth': [1, 2, 3, 4, 5],
                  'max_features': [1, 2, 3, 4]}

cross_validation = StratifiedKFold(all_classes, n_folds=10)

grid_search = GridSearchCV(decision_tree_classifier, param_grid = parameter_grid,
                          cv = cross_validation)

grid_search.fit(all_inputs, all_classes)

print "Best Score: {}".format(grid_search.best_score_)
print "Best params: {}".format(grid_search.best_params_)
Run Code Online (Sandbox Code Playgroud)

输出:

Best Score: 0.959731543624
Best params: {'max_features': 2, 'max_depth': 2}

Best Score: 0.973154362416
Best params: {'max_features': 3, …
Run Code Online (Sandbox Code Playgroud)

machine-learning scikit-learn cross-validation

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