当前位置: 首页 > 面试题库 >

Sklearn 0.20+的交叉验证?

宋新知
2023-03-14
问题内容

我正在尝试进行交叉验证,并且遇到一个错误:“找到的输入变量样本数量不一致:[18,1]”

我在熊猫数据框(df)中使用不同的列作为要素,最后一列作为标签。这源自UC
Irvine的机器学习存储库。导入我过去使用过的交叉验证程序包时,我收到了一个错误消息,说明它可能已贬值。我将运行决策树,SVM和K-NN。

我的代码是这样的:

feature = [df['age'], df['job'], df['marital'], df['education'], df['default'], df['housing'], df['loan'], df['contact'],
       df['month'], df['day_of_week'], df['campaign'], df['pdays'], df['previous'], df['emp.var.rate'], df['cons.price.idx'],
       df['cons.conf.idx'], df['euribor3m'], df['nr.employed']]
label = [df['y']]

from sklearn.cross_validation import train_test_split
from sklearn.model_selection import cross_val_score
# Model Training 
x = feature[:]
y = label
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.5)

任何帮助将是巨大的!


问题答案:

cross_validation不推荐使用该模块。新模块model_selection已取代它。因此,您所做的一切cross_validation。现在可在中使用model_selection。然后,您上面的代码将变为:

feature = [df['age'], df['job'], df['marital'], df['education'], df['default'], df['housing'], df['loan'], df['contact'],
       df['month'], df['day_of_week'], df['campaign'], df['pdays'], df['previous'], df['emp.var.rate'], df['cons.price.idx'],
       df['cons.conf.idx'], df['euribor3m'], df['nr.employed']]
label = [df['y']]

from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score

现在,就声明X和y而言,为什么要将它们包装在列表中。像这样使用它们:

feature = df[['age', 'job', 'marital', 'education', 'default', 'housing', 
              'loan', 'contact', 'month', 'day_of_week', 'campaign', 
              'pdays', 'previous', 'emp.var.rate', 'cons.price.idx', 
              'cons.conf.idx', 'euribor3m', 'nr.employed']]
label = df['y']

然后,您可以简单地使用您的代码,而无需进行任何更改。

# Model Training 
x = feature[:]
y = label
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.5)

对于您关于交叉验证折叠的最后一个问题,sklearn中有多个类可以做到这一点(取决于任务)。请看一下:

  • http://scikit-learn.org/stable/modules/classes.html#splitter-classes

其中包含折叠迭代器。请记住,所有这些都在model_selection包装中。



 类似资料:
  • 交叉验证 那么什么时候才需要交叉验证呢?交叉验证用在数据不是很充足的时候。比如在我日常项目里面,对于普通适中问题,如果数据样本量小于一万条,我们就会采用交叉验证来训练优化选择模型。如果样本大于一万条的话,我们一般随机的把数据分成三份,一份为训练集(Training Set),一份为验证集(Validation Set),最后一份为测试集(Test Set)。用训练集来训练模型,用验证集来评估模型预

  • 我有一个相对大的数据: 超过37万个观测数据,分类因变量有250个水平,10个自变量包括数值变量和分类变量。 下面是我的代码: 有人告诉我包'CV tools'或'cert'可以预形成k-folds CV,但我仍然不能成功地执行这些包或函数。

  • 我正在尝试用Python实现k-fold交叉验证算法。我知道SKLearn提供了一个实现,但是...这是我现在的代码。 learner参数是来自SKlearn库的分类器,k是折叠数,examples是CountVectorizer(再次是SKlearn)产生的稀疏矩阵,它是单词包的表示。例如: 我假设在某个地方有一些逻辑错误,因为训练集上的分数是95%(正如预期的那样),而测试测试上的分数实际上是

  • 问题内容: 我想通过交叉验证从Logistic回归模型预测概率。我知道您可以获取交叉验证分数,但是可以从predict_proba返回值而不是分数吗? 问题答案: 现在,这已作为scikit- learn版本0.18的一部分实现。您可以将’method’字符串参数传递给cross_val_predict方法。文档在这里。 例: 还要注意,这是新的sklearn.model_selection包的一

  • 问题内容: 我目前正在研究一个问题,该问题将在同一数据集上比较三种不同的机器学习算法的性能。我将数据集分为70/30训练/测试集,然后使用GridSearchCV和进行网格搜索以找到每种算法的最佳参数。 第一个问题,我是应该对训练集执行网格搜索,还是应该对整个数据集进行网格搜索? 第二个问题,我知道GridSearchCV在其实现中使用K折,如果我对GridSearchCV中比较的所有三种算法都使

  • 我正在训练一个数据集,然后在其他数据集上测试它。