标签: cross-validation

sklearn Kfold访问单折而不是循环

在使用cross_validation.KFold(n,n_folds = folds)之后,我想访问索引以进行单折的训练和测试,而不是遍历所有折叠.

那么我们来看一下示例代码:

from sklearn import cross_validation
X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])
y = np.array([1, 2, 3, 4])
kf = cross_validation.KFold(4, n_folds=2)

>>> print(kf)  
sklearn.cross_validation.KFold(n=4, n_folds=2, shuffle=False,
                           random_state=None)
>>> for train_index, test_index in kf:
Run Code Online (Sandbox Code Playgroud)

我想像这样访问kf中的第一个折叠(而不是for循环):

train_index, test_index in kf[0]
Run Code Online (Sandbox Code Playgroud)

这应该只返回第一个折叠,但我得到错误:"TypeError:'KFold'对象不支持索引"

我想要的输出:

>>> train_index, test_index in kf[0]
>>> print("TRAIN:", train_index, "TEST:", test_index)
TRAIN: [2 3] TEST: [0 1]
Run Code Online (Sandbox Code Playgroud)

链接:http://scikit-learn.org/stable/modules/generated/sklearn.cross_validation.KFold.html

如何检索列车和测试的索引只有一个折叠,而不通过整个for循环?

python scikit-learn cross-validation

13
推荐指数
1
解决办法
8585
查看次数

如何嵌套LabelKFold?

我有一个包含约300个点和32个不同标签的数据集,我想通过使用网格搜索和LabelKFold验证绘制其学习曲线来评估LinearSVR模型.

我的代码看起来像这样:

import numpy as np
from sklearn import preprocessing
from sklearn.svm import LinearSVR
from sklearn.pipeline import Pipeline
from sklearn.cross_validation import LabelKFold
from sklearn.grid_search import GridSearchCV
from sklearn.learning_curve import learning_curve
    ...
#get data (x, y, labels)
    ...
C_space = np.logspace(-3, 3, 10)
epsilon_space = np.logspace(-3, 3, 10)  

svr_estimator = Pipeline([
    ("scale", preprocessing.StandardScaler()),
    ("svr", LinearSVR),
])

search_params = dict(
    svr__C = C_space,
    svr__epsilon = epsilon_space
)

kfold = LabelKFold(labels, 5)

svr_search = GridSearchCV(svr_estimator, param_grid = search_params, cv = ???)

train_space = …
Run Code Online (Sandbox Code Playgroud)

python scikit-learn cross-validation

13
推荐指数
1
解决办法
430
查看次数

将张量分成训练和测试集

假设我使用的是在文本文件中读取的TextLineReader.有没有办法把它分成火车和测试集Tensorflow?就像是:

def read_my_file_format(filename_queue):
  reader = tf.TextLineReader()
  key, record_string = reader.read(filename_queue)
  raw_features, label = tf.decode_csv(record_string)
  features = some_processing(raw_features)
  features_train, labels_train, features_test, labels_test = tf.train_split(features,
                                                                            labels,
                                                                            frac=.1)
  return features_train, labels_train, features_test, labels_test
Run Code Online (Sandbox Code Playgroud)

training-data cross-validation tensorflow

13
推荐指数
3
解决办法
2万
查看次数

cross_val_score和cross_val_predict之间的区别

我想计算回归模型建立与使用交叉验证和感到困惑,这两个功能scikitlearn cross_val_scorecross_val_predict我应该使用.一种选择是:

cvs = DecisionTreeRegressor(max_depth = depth)
scores = cross_val_score(cvs, predictors, target, cv=cvfolds, scoring='r2')
print("R2-Score: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2))
Run Code Online (Sandbox Code Playgroud)

另一个,使用标准的cv预测r2_score:

cvp = DecisionTreeRegressor(max_depth = depth)
predictions = cross_val_predict(cvp, predictors, target, cv=cvfolds)
print ("CV R^2-Score: {}".format(r2_score(df[target], predictions_cv)))
Run Code Online (Sandbox Code Playgroud)

我认为这两种方法都是有效的,并给出类似的结果.但这只是小k倍的情况.虽然r ^ 2对于10倍-cv大致相同,但是对于使用"cross_vall_score"的第一版本的情况,对于更高的k值,它变得越来越低.第二个版本大多不受折叠次数变化的影响.

这种行为是否可以预期,我是否对SKLearn中的CV缺乏了解?

python regression machine-learning scikit-learn cross-validation

13
推荐指数
3
解决办法
2万
查看次数

glm()模型的交叉验证

我正在尝试对我之前在R中构建的一些glm模型进行10倍交叉验证.虽然我已经阅读了很多帮助文件,但我cv.glm()boot包中的函数有点困惑.当我提供以下公式时:

library(boot)
cv.glm(data, glmfit, K=10)
Run Code Online (Sandbox Code Playgroud)

这里的"数据"参数是指整个数据集还是仅指测试集?

到目前为止我看到的例子提供了"数据"参数作为测试集,但这并没有真正有意义,例如为什么在同一测试集上有10倍?它们都会给出完全相同的结果(我假设!).

不幸的是,?cv.glm它以模糊的方式解释:

data:包含数据的矩阵或数据帧.行应为case,列对应变量,其中一个是响应

我的另一个问题是$delta[1]结果.这是10次试验的平均预测误差吗?如果我想获得每个折叠的错误怎么办?

这是我的脚本的样子:

##data partitioning
sub <- sample(nrow(data), floor(nrow(x) * 0.9))
training <- data[sub, ]
testing <- data[-sub, ]

##model building
model <- glm(formula = groupcol ~ var1 + var2 + var3,
        family = "binomial", data = training)

##cross-validation
cv.glm(testing, model, K=10)
Run Code Online (Sandbox Code Playgroud)

partitioning r prediction glm cross-validation

12
推荐指数
2
解决办法
2万
查看次数

Sklearn预处理 - PolynomialFeatures - 如何保留输出数组/数据帧的列名称/标题

TLDR:如何从sklearn.preprocessing.PolynomialFeatures()函数获取输出numpy数组的头文件?


假设我有以下代码......

import pandas as pd
import numpy as np
from sklearn import preprocessing as pp

a = np.ones(3)
b = np.ones(3) * 2
c = np.ones(3) * 3

input_df = pd.DataFrame([a,b,c])
input_df = input_df.T
input_df.columns=['a', 'b', 'c']

input_df

    a   b   c
0   1   2   3
1   1   2   3
2   1   2   3

poly = pp.PolynomialFeatures(2)
output_nparray = poly.fit_transform(input_df)
print output_nparray

[[ 1.  1.  2.  3.  1.  2.  3.  4.  6.  9.]
 [ 1.  1.  2.  3.  1. …
Run Code Online (Sandbox Code Playgroud)

python validation python-2.7 scikit-learn cross-validation

12
推荐指数
2
解决办法
8569
查看次数

sklearn 中的交叉验证:我需要调用 fit() 和 cross_val_score() 吗?

我想在学习模型时使用 k 折交叉验证。到目前为止,我是这样做的:

# splitting dataset into training and test sets
X_train, X_test, y_train, y_test = train_test_split(dataset_1, df1['label'], test_size=0.25, random_state=4222)

# learning a model
model = MultinomialNB()
model.fit(X_train, y_train)
scores = cross_val_score(model, X_train, y_train, cv=5)
Run Code Online (Sandbox Code Playgroud)

在这一步,我不太确定是否应该使用 model.fit() ,因为在sklearn官方文档中,它们不适合,而只是调用 cross_val_score 如下(它们甚至不将数据拆分为训练和测试集):

from sklearn.model_selection import cross_val_score
clf = svm.SVC(kernel='linear', C=1)
scores = cross_val_score(clf, iris.data, iris.target, cv=5)
Run Code Online (Sandbox Code Playgroud)

我想在学习模型的同时调整模型的超参数。什么是正确的管道?

python-3.x scikit-learn cross-validation

12
推荐指数
2
解决办法
4441
查看次数

机器学习中的OOF方法是什么?

我已经在许多kaggle笔记本电脑中看到,人们在使用K-fold验证进行机器学习时都在谈论oof方法。什么是oof,它与k倍验证有关?您还可以建议一些有用的资源来详细了解概念吗

感谢您的帮助!

machine-learning cross-validation kaggle

12
推荐指数
1
解决办法
3040
查看次数

R中的glmnet()和cv.glmnet()之间的区别?

我正在开展一个项目,展示一组事件对结果的潜在影响.我正在使用glmnet()包,特别是使用Poisson功能.这是我的代码:

# de <- data imported from sql connection        
x <- model.matrix(~.,data = de[,2:7])
y <- (de[,1])
reg <- cv.glmnet(x,y, family = "poisson", alpha = 1)
reg1 <- glmnet(x,y, family = "poisson", alpha = 1)

**Co <- coef(?reg or reg1?,s=???)**

summ <- summary(Co)
c <- data.frame(Name= rownames(Co)[summ$i],
       Lambda= summ$x)
c2 <- c[with(c, order(-Lambda)), ]
Run Code Online (Sandbox Code Playgroud)

开始在SQL中从我的数据库导入大量数据.然后我把它放在矩阵格式中并将响应与预测变量分开.

这是我困惑的地方:我无法弄清楚glmnet()函数和cv.glmnet()函数之间的区别.我意识到cv.glmnet()函数是glmnet()的k-fold交叉验证,但实际上这究竟是什么意思呢?它们为lambda提供了相同的值,但我想确保我不会错过两者之间的重要区别.

当我指定alpha = 1(假设是默认值)时,我也不清楚它为什么运行正常,但如果我把它留下来的话就不行了?

提前致谢!

r classification glm glmnet cross-validation

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

Sklearn:对分组数据进行交叉验证

我正在尝试对分组数据实施交叉验证方案.我希望使用GroupKFold方法,但我一直收到错误.我究竟做错了什么?代码(与我使用的代码略有不同 - 我有不同的数据,所以我有一个更大的n_splits,但其他每一个都是相同的)

from sklearn import metrics
import matplotlib.pyplot as plt
import numpy as np
from sklearn.model_selection import GroupKFold
from sklearn.grid_search import GridSearchCV
from xgboost import XGBRegressor
#generate data
x=np.array([0,1,2,3,4,5,6,7,8,9,10,11,12,13])
y= np.array([1,2,3,4,5,6,7,1,2,3,4,5,6,7])
group=np.array([1,0,1,1,2,2,2,1,1,1,2,0,0,2)]
#grid search
gkf = GroupKFold( n_splits=3).split(x,y,group)
subsample = np.arange(0.3,0.5,0.1)
param_grid = dict( subsample=subsample)
rgr_xgb = XGBRegressor(n_estimators=50)
grid_search = GridSearchCV(rgr_xgb, param_grid, cv=gkf, n_jobs=-1)
result = grid_search.fit(x, y)
Run Code Online (Sandbox Code Playgroud)

错误:

Traceback (most recent call last):

File "<ipython-input-143-11d785056a08>", line 8, in <module>
result = grid_search.fit(x, y)

File "/home/student/anaconda/lib/python3.5/site-packages/sklearn/grid_search.py", line 813, in …
Run Code Online (Sandbox Code Playgroud)

python scikit-learn cross-validation

11
推荐指数
1
解决办法
4380
查看次数