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:

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 ..

Chủ đề