Hướng dẫn how to split data into training and validation in python - cách chia dữ liệu thành đào tạo và xác thực trong python

Dưới đây là một chức năng Python phân chia khung dữ liệu của Pandas thành Train, Xác thực và Kiểm tra DataFrames với lấy mẫu phân tầng. Nó thực hiện sự phân chia này bằng cách gọi chức năng của Scikit-Learn train_test_split() hai lần.

import pandas as pd
from sklearn.model_selection import train_test_split

def split_stratified_into_train_val_test(df_input, stratify_colname='y',
                                         frac_train=0.6, frac_val=0.15, frac_test=0.25,
                                         random_state=None):
    '''
    Splits a Pandas dataframe into three subsets (train, val, and test)
    following fractional ratios provided by the user, where each subset is
    stratified by the values in a specific column (that is, each subset has
    the same relative frequency of the values in the column). It performs this
    splitting by running train_test_split() twice.

    Parameters
    ----------
    df_input : Pandas dataframe
        Input dataframe to be split.
    stratify_colname : str
        The name of the column that will be used for stratification. Usually
        this column would be for the label.
    frac_train : float
    frac_val   : float
    frac_test  : float
        The ratios with which the dataframe will be split into train, val, and
        test data. The values should be expressed as float fractions and should
        sum to 1.0.
    random_state : int, None, or RandomStateInstance
        Value to be passed to train_test_split().

    Returns
    -------
    df_train, df_val, df_test :
        Dataframes containing the three splits.
    '''

    if frac_train + frac_val + frac_test != 1.0:
        raise ValueError('fractions %f, %f, %f do not add up to 1.0' % \
                         (frac_train, frac_val, frac_test))

    if stratify_colname not in df_input.columns:
        raise ValueError('%s is not a column in the dataframe' % (stratify_colname))

    X = df_input # Contains all columns.
    y = df_input[[stratify_colname]] # Dataframe of just the column on which to stratify.

    # Split original dataframe into train and temp dataframes.
    df_train, df_temp, y_train, y_temp = train_test_split(X,
                                                          y,
                                                          stratify=y,
                                                          test_size=(1.0 - frac_train),
                                                          random_state=random_state)

    # Split the temp dataframe into val and test dataframes.
    relative_frac_test = frac_test / (frac_val + frac_test)
    df_val, df_test, y_val, y_test = train_test_split(df_temp,
                                                      y_temp,
                                                      stratify=y_temp,
                                                      test_size=relative_frac_test,
                                                      random_state=random_state)

    assert len(df_input) == len(df_train) + len(df_val) + len(df_test)

    return df_train, df_val, df_test

Dưới đây là một ví dụ làm việc hoàn chỉnh.

Hãy xem xét một bộ dữ liệu có nhãn mà bạn muốn thực hiện phân tầng. Nhãn này có phân phối riêng trong bộ dữ liệu gốc, giả sử 75% NO___Trans___Pre___6, 15% NO___Trans___Pre___7 và 10% NO___Trans___Pre___8. Bây giờ chúng ta hãy chia bộ dữ liệu thành đào tạo, xác thực và kiểm tra thành các tập hợp con bằng tỷ lệ 60/20/20, trong đó mỗi phân chia giữ lại cùng một phân phối của nhãn. Xem hình minh họa dưới đây:

Hướng dẫn how to split data into training and validation in python - cách chia dữ liệu thành đào tạo và xác thực trong python

Dưới đây là bộ dữ liệu ví dụ:

df = pd.DataFrame( { 'A': list(range(0, 100)),
                     'B': list(range(100, 0, -1)),
                     'label': ['foo'] * 75 + ['bar'] * 15 + ['baz'] * 10 } )

df.head()
#    A    B label
# 0  0  100   foo
# 1  1   99   foo
# 2  2   98   foo
# 3  3   97   foo
# 4  4   96   foo

df.shape
# (100, 3)

df.label.value_counts()
# foo    75
# bar    15
# baz    10
# Name: label, dtype: int64

Bây giờ, chúng ta hãy gọi chức năng NO___TRANS___PRE___9 từ trên cao để có được các khung dữ liệu, xác thực và kiểm tra theo tỷ lệ 60/20/20.

df_train, df_val, df_test = \
    split_stratified_into_train_val_test(df, stratify_colname='label', frac_train=0.60, frac_val=0.20, frac_test=0.20)

Ba DataFrames no___Trans___Pre___10, no___trans___pre___11 và no___trans___pre___12 chứa tất cả các hàng ban đầu nhưng kích thước của chúng sẽ tuân theo tỷ lệ trên.

df_train.shape
#(60, 3)

df_val.shape
#(20, 3)

df_test.shape
#(20, 3)

Hơn nữa, mỗi trong số ba lần phân chia sẽ có cùng phân phối của nhãn, cụ thể là 75% no___trans___pre___6, 15% no___trans___pre___7 và 10% no___trans___pre___8.

df_train.label.value_counts()
# foo    45
# bar     9
# baz     6
# Name: label, dtype: int64

df_val.label.value_counts()
# foo    15
# bar     3
# baz     2
# Name: label, dtype: int64

df_test.label.value_counts()
# foo    15
# bar     3
# baz     2
# Name: label, dtype: int64

Làm thế nào để bạn phân chia dữ liệu đào tạo và dữ liệu xác thực?

Nói chung, việc đặt 80% dữ liệu vào tập huấn luyện, 10% trong tập xác thực và 10% trong bộ thử nghiệm là một sự phân chia tốt để bắt đầu. Sự phân chia tối ưu của thử nghiệm, xác nhận và tập hợp đào tạo phụ thuộc vào các yếu tố như trường hợp sử dụng, cấu trúc của mô hình, kích thước của dữ liệu, v.v.putting 80% of the data in the training set, 10% in the validation set, and 10% in the test set is a good split to start with. The optimum split of the test, validation, and train set depends upon factors such as the use case, the structure of the model, dimension of the data, etc.

Làm thế nào để bạn chia dữ liệu thành đào tạo và kiểm tra trong dataFrame Python?

Làm thế nào để phân chia các bộ dữ liệu đào tạo và kiểm tra trong Python ?..
Nhập toàn bộ bộ dữ liệu.Chúng tôi đang sử dụng bộ dữ liệu nhà ở California cho toàn bộ hướng dẫn.Hãy bắt đầu với việc nhập dữ liệu vào khung dữ liệu bằng gấu trúc.....
Chia dữ liệu bằng Sklearn.Để phân chia dữ liệu, chúng tôi sẽ sử dụng Train_Test_Split từ Sklearn ..

Làm thế nào để bạn chia một bộ dữ liệu trong Python?

Scikit Tìm hiểu dữ liệu phân chia..
x, y = num.....
mảng = () được sử dụng để xác định mảng ..
Danh sách (y) được sử dụng để in danh sách dữ liệu trên màn hình ..
X_TRAIN, X_TEST, Y_TRAIN, Y_TEST = Train_Test_Split (X, Y, Test_Size = 0.33, Random_State = 42) được sử dụng để chia dữ liệu dữ liệu thành tập hợp và thử nghiệm dữ liệu ..