我在尝试进行交叉验证时遇到了一个错误,错误信息显示:“发现输入变量的样本数量不一致:[18, 1]”。
我使用pandas数据框架(df)中的不同列作为特征,最后一列作为标签。这些数据来源于加州大学欧文分校的机器学习数据集。当我导入之前使用过的交叉验证包时,我得到了一个错误提示,可能是该包已经废弃。我将要运行决策树、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_splitfrom sklearn.model_selection import cross_val_score# Model Training x = feature[:]y = labelx_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_splitfrom 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 = labelx_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.5)
关于您最后一个关于交叉验证中的折叠的问题,sklearn中有多个类可以完成这个任务(取决于任务)。请查看以下链接:
其中包含折叠迭代器。请记住,所有这些都在model_selection
包中。