当前位置: 首页 > 知识库问答 >
问题:

为什么我得到GroupShuffleSplit(列车测试拆分)的错误

荣轶
2023-03-14

我有2个数据集,应用了5个不同的ML模型。

数据集1:

def dataset_1():
    ...
    ...
    bike_data_hours = bike_data_hours[:500]
    X = bike_data_hours.iloc[:, :-1].values
    y = bike_data_hours.iloc[:, -1].values
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
    return X_train, X_test, y_train.reshape(-1, 1), y_test.reshape(-1, 1)

形状是(400,14)(100,14)(400,1)(100,1)dtypes:object(int64,float64)。

数据集2:

def dataset_2():
    ...
    ...
    final_movie_df = final_movie_df[:500]
    X = final_movie_df.iloc[:, :-1]
    y = final_movie_df.iloc[:, -1]
    gs = GroupShuffleSplit(n_splits=2, test_size=0.2)
    train_ix, test_ix = next(gs.split(X, y, groups=X.UserID))
    X_train = X.iloc[train_ix]
    y_train = y.iloc[train_ix]
    X_test = X.iloc[test_ix]
    y_test = y.iloc[test_ix]
    return X_train.shape, X_test.shape, y_train.values.reshape(-1,1).shape, y_test.values.reshape(-1,1).shape

形状是(400,25)(100,25)(400,1)(100,1)dtypes:object(int64,float64)。

我使用不同的型号。代码是

    X_train, X_test, y_train, y_test = dataset
    fold_residuals, fold_dfs = [], []
    kf = KFold(n_splits=k, shuffle=True)
    for train_index, _ in kf.split(X_train):
        if reg_name == "RF" or reg_name == "SVR":
            preds = regressor.fit(X_train[train_index], y_train[train_index].ravel()).predict(X_test)
        elif reg_name == "Knn-5":
            preds = regressor.fit(X_train[train_index], np.ravel(y_train[train_index], order="C")).predict(X_test)
        else:
            preds = regressor.fit(X_train[train_index], y_train[train_index]).predict(X_test)

但是我得到了一个常见的错误,比如这个,这个,还有这个。我已经浏览了所有这些帖子,但对错误一无所知。我使用了iloc值作为访问链接的解决方案

preds = regressor.fit(X_train[train_index], y_train[train_index]).predict(X_test)
  File "/home/fgd/.local/lib/python3.8/site-packages/pandas/core/frame.py", line 3030, in __getitem__
    indexer = self.loc._get_listlike_indexer(key, axis=1, raise_missing=True)[1]
  File "/home/fgd/.local/lib/python3.8/site-packages/pandas/core/indexing.py", line 1266, in _get_listlike_indexer
    self._validate_read_indexer(keyarr, indexer, axis, raise_missing=raise_missing)
  File "/home/fgd/.local/lib/python3.8/site-packages/pandas/core/indexing.py", line 1308, in _validate_read_indexer
    raise KeyError(f"None of [{key}] are in the [{axis_name}]")
KeyError: "None of [Int64Index([  0,   1,   3,   4,   5,   6,   7,   9,  10,  11,\n            ...\n            387, 388, 389, 390, 391, 392, 393, 395, 397, 399],\n           dtype='int64', length=320)] are in the [columns]"

在这里,如果我使用train\u test\u split而不是groupshuffliesplit,那么代码就正常工作了。但是,我希望基于用户ID使用GroupShuffleSplit,这样同一用户就不会同时进行训练和测试。在使用GroupShuffleSplit时,您能告诉我如何解决这个问题吗?

你能告诉我为什么我得到dataset_2的错误,而dataset_1工作完全正常(并且形状dtype)对于两个数据集是相同的。


共有1个答案

谢奇略
2023-03-14

您必须对数据集2使用。做改变

    X_train = X.iloc[train_ix].values
    y_train = y.iloc[train_ix].values
    X_test = X.iloc[test_ix].values
    y_test = y.iloc[test_ix].values
    return X_train.shape, X_test.shape, y_train.reshape(-1,1).shape, y_test.reshape(-1,1).shape

希望现在能奏效

 类似资料:
  • 有一个数据帧,它总共由14列组成,最后一列是整数值为0或1的目标标签。 我已经定义了- X=df。iloc[:,1:13]——由特征值组成 两者的长度相同,X是由13列组成的数据帧,shape(159880,13),y是具有shape(159880,)的数组类型 但是,当我在X,y上执行列车测试分割时,该功能无法正常工作。 下面是简单的代码- X_序列,y_序列,X_测试,y_测试=序列测试分割(

  • URL类 来自服务器的最终响应:

  • 很抱歉,我对Java知之甚少。我得到了这个代码来接管。基本上,我在 当我运行代码时。 下面是解析XML的块 这是Improts,不确定是否需要这样做 这是XML文件

  • 我刚刚开始了一个新的项目,正在尝试连接到FireBase。当我试图构建我的项目时,我得到了一个错误:无法解析Android应用程序模块的Gradle配置,所以我查看了构建,它告诉我jCenter()不推荐使用,我应该删除它。当我把它取下来的时候,一切都很好。但是,当我尝试连接到Firebase时,我得到了错误:AbstractDynamicObject$CustomMessageMissingMe

  • 问题内容: public class Category { 在正在生成。 问题答案: 当您执行时,您称呼孩子们的。这里没有问题,只不过您在这里调用了父对象。这将称呼孩子,等等。 不错的无限循环。 摆脱它的最好方法是将您的方法更改为: 这样,您将不打印parentCategory,而仅显示其名称,不显示无限循环,不显示StackOverflowError。 编辑: 正如博洛在下面说的那样,您将需要检

  • 下面是我遇到错误的程序: //导入扫描程序类导入java。util。扫描仪; 这些是我得到的错误: