标签: k-fold

MemoryError:无法为形状为 (725000, 277, 76) 和数据类型 float64 的数组分配 30.4 GiB

它给出了内存错误,但内存容量从未达到。我在 SSH 上有 60 GB 的内存,完整的数据集处理消耗了 30 GB,我正在尝试用 k 倍训练自动编码器。如果没有 k 倍,训练效果很好。原始数据集包含 hdf5 中的 250,000 条数据。对于 K-fold,如果我使用的总数据少于 100000,它就可以工作。我已经将其转换为 float32 但仍然不起作用。我也尝试过 echo 1 但会自动终止 python 程序

memory-management out-of-memory hdf5 python-3.x k-fold

10
推荐指数
1
解决办法
6万
查看次数

强制sklearn交叉验证分数使用分层k折?

基于Sklearn 文档

  • 是否可以强制使用StratifiedKFold
  • 我如何知道哪个KFold已被使用?

python scikit-learn k-fold

9
推荐指数
1
解决办法
5075
查看次数

如何进行 groupKfold 验证并平衡数据?

我正在根据组值拆分训练和测试集中的一些数据。我怎样才能做到这一点以获得平衡的数据?

为了解决一个二元分类任务,我有 100 个样本,每个样本都有一个唯一的 ID,一个主题和一个标签(1 或 0)。

为了避免在人物识别任务中退化,我需要同一主题不能同时出现在训练和测试集中。

受试者的数量少于样本的数量 (57),某些受试者仅出现在一个样本中,而其他许多具有相同或不同的标签。

我可以简单地使用 sklearn 的 gropKfold 来做到这一点,但我希望我的数据是平衡的(或至少接近平衡)

我尝试使用以下代码:

n_shuffles = 2
group_k_fold = GroupKFold(n_splits=5)

        for i in range(n_shuffles):
            X_shuffled, y_shuffled, groups_shuffled = shuffle(idx, labels, subjects, random_state=i)
            splits = group_k_fold.split(X_shuffled, y_shuffled, groups_shuffled)

            for train_idx, val_idx in splits:     
                X = perezDataFrame.loc[perezDataFrame['ID'].isin(X_shuffled[train_idx]),AU_names].values
                X = preprocessing.normalize(X, norm='l2')
                y = perezDataFrame.loc[perezDataFrame['ID'].isin(X_shuffled[train_idx]),'label'].values

                XTest = perezDataFrame.loc[perezDataFrame['ID'].isin(X_shuffled[val_idx]),AU_names].values
                XTest = preprocessing.normalize(XTest, norm='l2')
                yTest = perezDataFrame.loc[perezDataFrame['ID'].isin(X_shuffled[val_idx]),'label'].values
Run Code Online (Sandbox Code Playgroud)

其中 idx、主题和标签分别是 ID、主题和标签的列表。

但数据非常不平衡。

我也试过这个:

for i in range(5):
    GSP = GroupShuffleSplit(n_splits =10, test_size =0.20, train_size=0.80 …
Run Code Online (Sandbox Code Playgroud)

python machine-learning pandas scikit-learn k-fold

8
推荐指数
1
解决办法
641
查看次数

使用 pytorch 和 sklearn 对 MNIST 数据集进行交叉验证

我是 pytorch 的新手,正在尝试实现一个前馈神经网络来对 mnist 数据集进行分类。我在尝试使用交叉验证时遇到了一些问题。我的数据具有以下形状 x_train:: torch.Size([45000, 784])y_traintorch.Size([45000])

我尝试使用 sklearn 中的 KFold。

kfold =KFold(n_splits=10)

这是我的训练方法的第一部分,我将数据分成几部分:

for  train_index, test_index in kfold.split(x_train, y_train): 
        x_train_fold = x_train[train_index]
        x_test_fold = x_test[test_index]
        y_train_fold = y_train[train_index]
        y_test_fold = y_test[test_index]
        print(x_train_fold.shape)
        for epoch in range(epochs):
         ...
Run Code Online (Sandbox Code Playgroud)

y_train_fold变量的索引是正确的,它只是: [ 0 1 2 ... 4497 4498 4499],但它不是 for x_train_fold,而是[ 4500 4501 4502 ... 44997 44998 44999]。测试折叠也是如此。

对于第一次迭代,我希望变量x_train_fold是前 4500 张图片,换句话说,具有 shape torch.Size([4500, 784]),但它具有 shapetorch.Size([40500, 784])

关于如何做到这一点的任何提示?

scikit-learn cross-validation mnist pytorch k-fold

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

如何使用accuracy_score(或其他建议的函数)测量xgboost回归器的准确性

我正在编写代码来解决一个简单的问题,即预测库存中物品丢失的概率。

我正在使用XGBoost预测模型来做到这一点。

我将数据分成两个 .csv 文件,一个是训练数据,另一个是测试数据

这是代码:

    import pandas as pd
    import numpy as np


    train = pd.read_csv('C:/Users/pedro/Documents/Pedro/UFMG/8o periodo/Python/Trabalho Final/train.csv', index_col='sku').fillna(-1)
    test = pd.read_csv('C:/Users/pedro/Documents/Pedro/UFMG/8o periodo/Python/Trabalho Final/test.csv', index_col='sku').fillna(-1)


    X_train, y_train = train.drop('isBackorder', axis=1), train['isBackorder']

    import xgboost as xgb
    xg_reg = xgb.XGBRegressor(objective ='reg:linear', colsample_bytree = 0.3, learning_rate = 0.1,
                    max_depth = 10, alpha = 10, n_estimators = 10)
    xg_reg.fit(X_train,y_train)


    y_pred = xg_reg.predict(test)

    # Create file for the competition submission
    test['isBackorder'] = y_pred
    pred = test['isBackorder'].reset_index()
    pred.to_csv('competitionsubmission.csv',index=False)
Run Code Online (Sandbox Code Playgroud)

这是我尝试测量问题准确性的函数(使用 RMSE …

python training-data scikit-learn xgboost k-fold

6
推荐指数
1
解决办法
7358
查看次数

获取类型错误:单例数组 array(None, dtype=object) 不能被视为有效集合

我正在使用不同的交叉验证方法。我首先在我的代码上使用 k Fold 方法,效果非常好,但是当我使用repeatedstratifiedkfold方法时,它给了我这个错误

TypeError: Singleton array array(None, dtype=object) cannot be considered a valid collection.
Run Code Online (Sandbox Code Playgroud)

任何人都可以在这方面帮助我吗?以下是产生该问题的最少代码。

import numpy as np
from sklearn.model_selection import RepeatedStratifiedKFold


ss = RepeatedStratifiedKFold(n_splits=5, n_repeats=2, random_state=0)

X = np.random.rand(100, 5)
y = np.random.rand(100, 1)

for train_index, test_index in ss.split(X):
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]
Run Code Online (Sandbox Code Playgroud)

这是完整的引用 -

start
Traceback (most recent call last):

  File "C:\Users\full details of final year project\AZU\test_tace_updated.py", line 81, in <module>
    main()

  File "C:\Users\AZU\test_tace_updated.py", line 54, in main …
Run Code Online (Sandbox Code Playgroud)

python machine-learning cross-validation k-fold

6
推荐指数
1
解决办法
3323
查看次数

StandardScaler 到整个训练数据集或单个折叠以进行交叉验证

我目前正在使用 cross_val_score 和 KFold 来评估在数据预处理中的不同点使用 StandardScaler 的影响,特别是在执行交叉验证之前缩放整个训练数据集是否会导致数据泄漏,以及与缩放相比有何影响来自管道内的数据(因此仅将其应用于训练折叠)。

我目前的流程如下:

实验A

  • 从 sklearn.datasets 导入波士顿住房数据集并拆分为数据 (X) 和目标 (y)
  • 创建一个 Pipeline (sklearn.pipeline),在应用线性回归之前应用 StandardScaler
  • 指定交叉验证方法为 KFold 5 折
  • 使用上述Pipeline和KFold方法进行交叉验证(cross_val_score)并观察分数

实验B

  • 使用与上面相同的波士顿住房数据
  • 整个数据集上的 fit_transform StandardScaler
  • 使用 cross_val_Score 再次执行交叉验证 5 倍,但这次直接输入 LinearRegression 而不是管道
  • 将此处的分数与实验 A 进行比较

获得的分数是相同的(大约小数点后 13 位),我对此表示怀疑,因为实验 B 在交叉验证过程中肯定会引入数据泄漏。

我看过帖子指出,在交叉验证之前是否对整个训练集进行缩放并不重要,如果这是真的,我想了解为什么,如果这不是真的,我想了解为什么分数数据泄露了还能这么相似吗?

请参阅下面我的测试代码:

import numpy as np
import pandas as pd
from sklearn.pipeline import Pipeline
from sklearn import datasets

from sklearn.preprocessing import StandardScaler
from sklearn.svm import LinearSVC
from sklearn.model_selection import KFold, StratifiedKFold

from sklearn.model_selection import cross_val_score, cross_val_predict …
Run Code Online (Sandbox Code Playgroud)

python scikit-learn cross-validation k-fold

5
推荐指数
0
解决办法
691
查看次数

我应该在 sklearn KFold 交叉验证中设置 shuffle=True 或 False 吗?

我正在研究我的数据集上的一些 cross_validation 分数cross_val_score,特别KFold 是我的代码如下所示:

cross_val_score(estimator=model, X=X, y=y, scoring='r2', cv=KFold(shuffle=True))
Run Code Online (Sandbox Code Playgroud)

shuffle=True我的问题是,将 :放入: 中是否是一种常见行为,KFold如果我这样做,则 r2 分数的回报为:

[0.5934, 0.60432, 0.45689, 0.6875, 0.5678]
Run Code Online (Sandbox Code Playgroud)

如果我把shuffle=False它返回

[0.3987, 0,4576, 0.3234, 0.4567. 0.3233]
Run Code Online (Sandbox Code Playgroud)

我不希望用于迭代训练的相同点在下一次迭代中重新考虑,最终得到交叉验证的乐观分数。我应该如何解释我使用 获得更好的分数shuffle=True

scikit-learn k-fold

5
推荐指数
1
解决办法
4839
查看次数

Huggingface Trainer():K-Fold 交叉验证

我正在遵循TowardsDataScience 的教程,使用 Huggingface Trainer 进行文本分类。为了获得更强大的模型,我想要进行 K 折交叉验证,但我不确定如何使用 Huggingface Trainer 来完成此操作。Trainer 是否有内置功能,或者如何在此处进行交叉验证?

提前致谢!

python cross-validation bert-language-model k-fold huggingface-transformers

5
推荐指数
1
解决办法
1829
查看次数

如何使用 tf.keras.utils.image_dataset_from_directory 应用 kfold 交叉验证

我的目标是应用 k 折交叉验证来训练 VGG19 模型。为此,我使用以下代码从目录中读取图像:

DIR = "/Images"
data_dir = pathlib.Path(os.getcwd() + '\\Images')

train_ds = tf.keras.utils.image_dataset_from_directory(
  data_dir,
  validation_split=0.2,
  subset="training",
  seed=123,
  image_size=(224, 224),
  batch_size=32)

val_ds = tf.keras.utils.image_dataset_from_directory(
  data_dir,
  validation_split=0.2,
  subset="validation",
  seed=123,
  image_size=(224, 224),
  batch_size=32)
Run Code Online (Sandbox Code Playgroud)

并且在不使用 kfold 交叉验证的情况下它也能正常工作。但是当我想使用 K 折交叉验证时,我必须train_ds分别使用标签和图像,并且我找不到解决方案,除非我需要使用另一种方法读取图像。因此,我决定使用ImageDataGenerator和来读取图像flow_from_directory。但据我了解,为了使用 加载图像flow_from_directory,我必须有两个单独的子集 astraningtestin 图像,而我的情况下没有traningtest文件夹。这两种方法有什么解决方案吗?

此外,使用第一种方法,即tf.keras.utils.image_dataset_from_directory,将找到的图像数量与 不同flow_from_directory。这是第一个方法的输出:

找到属于 4 个类别的 1060 个文件。使用848个文件进行训练。

这是第二种方法的输出:

img_gen = tf.keras.preprocessing.image.ImageDataGenerator(
    rescale=1.0 / 255,
    rotation_range=20,
    width_shift_range=0.2,
    height_shift_range=0.2,
    vertical_flip=True)
Wheat_data …
Run Code Online (Sandbox Code Playgroud)

python keras tensorflow k-fold

4
推荐指数
1
解决办法
3128
查看次数