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

ValueError:拆分数不能大于样本数n_splits = 3:1

万开畅
2023-03-14
问题内容

我正在尝试使用train_test_split和决策树回归器进行此训练建模:

import sklearn
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import cross_val_score

# TODO: Make a copy of the DataFrame, using the 'drop' function to drop the given feature
new_data = samples.drop('Fresh', 1)

# TODO: Split the data into training and testing sets using the given feature as the target
X_train, X_test, y_train, y_test = train_test_split(new_data, samples['Fresh'], test_size=0.25, random_state=0)

# TODO: Create a decision tree regressor and fit it to the training set
regressor = DecisionTreeRegressor(random_state=0)
regressor = regressor.fit(X_train, y_train)

# TODO: Report the score of the prediction using the testing set
score = cross_val_score(regressor, X_test, y_test, cv=3)

print score

运行此命令时,出现错误:

ValueError: Cannot have number of splits n_splits=3 greater than the number of samples: 1.

如果将cv的值更改为1,则会得到:

ValueError: k-fold cross-validation requires at least one train/test split by setting n_splits=2 or more, got n_splits=1.

数据的一些示例行如下所示:

    Fresh   Milk    Grocery Frozen  Detergents_Paper    Delicatessen
0   14755   899 1382    1765    56  749
1   1838    6380    2824    1218    1216    295
2   22096   3575    7041    11422   343 2564

问题答案:

如果分割数大于样本数,则将出现第一个错误。从下面给出的源代码中检查代码段:

if self.n_splits > n_samples:
    raise ValueError(
        ("Cannot have number of splits n_splits={0} greater"
         " than the number of samples: {1}.").format(self.n_splits,
                                                     n_samples))

如果折叠数小于或等于1,则会出现第二个错误。就您而言,cv = 1。检查源代码:

if n_folds <= 1:
            raise ValueError(
                "k-fold cross validation requires at least one"
                " train / test split by setting n_folds=2 or more,"
                " got n_folds={0}.".format(n_folds))

有根据的猜测是,其中的样本数量X_test少于3。仔细检查。



 类似资料:
  • 我从Udemy那里学习KNN。数据集从这里下载。 当我尝试运行以下代码时: 我得到的错误是: 回溯(最近一次调用):文件“/home/ashutosh/Machine Learning A-Z Template Folder/Part 3-分类/第15节-K-最近邻(K-NN)/knn(1.py)”,第24行,cm=混淆矩阵(y\u test,y\u pred) 文件“/home/ashutosh

  • 问题内容: 当我在终端尝试这个 我收到以下错误 但是,我可以分两个步骤执行此操作,例如, 为什么会有这种行为?用单行解决此问题的方法是什么? 问题答案: 提高功率优先于一元减号。 因此,您拥有的却不是您所期望的: 如果您希望它起作用,您应该写 或按照@TimPietzcker的说明切换Python 3。

  • 在中传递时,我得到以下错误: 回溯(最近一次呼叫最后一次): 文件“C:/Classify/classifier.py”,第95行,在 列车平均值,测试平均值,cms=列车模型(X,y,“ceps”,plot=True) 列车模型中第47行的文件“C:/Classify/classifier.py” clf.fit(X_train,y_train)文件“C:\Python27\lib\site p

  • 我正在尝试使用 JOLT 根据属性将数组拆分为多个数组。我已经尝试过 JOLT“移位”规范,但无法实现。 我已经查看了几个完成数组转换的链接,但是我找不到任何将数组拆分成多个数组的方法。 示例:根据属性“type”的值将以下数组转换为3个数组。 输入: 输出:

  • 我有一个子阵列: 我想将每个子数组的元素放入另一个数组中,但子数组大小的总和必须小于或等于6。所以我想得到这样的东西 我现在的代码是 我被困在这里,因为我的代码只有两个前元素。原始数组有大约1000个子数组,我的代码没有以那种形式分割它。