如何将没有目标值的训练和测试拆分作为单独的数据帧?

问题描述

我只能将 scikit-learn 函数 train_test_split 应用于具有训练数据和目标数据的两个数据帧。但是如何将包含目标值的数据帧按 0.75 的比例拆分为训练数据帧和测试数据帧?我不想只选择占所有行 75% 的前 n 行,我希望像 train_test_split 中那样随机选择,但训练和测试数据中不应有相同的行。

解决方法

这应该将您的数据帧拆分成训练并按照您指定的比例进行测试

import pandas as pd
from sklearn.model_selection import train_test_split
        
df = pd.DataFrame({'numbers': [1,2,3,4,5],'colors': ['red','white','blue','green','black']},columns=['numbers','colors'])
        
training_dataset,test_dataset = train_test_split(df,train_size=0.75)
,

train_test_split 的第一个参数是一个数组序列,该序列只能是一个长度。

from sklearn.model_selection import train_test_split
from sklearn import datasets

iris = datasets.load_iris()
cols = [f.replace(' (cm)','').replace(' ','_') for f in iris.feature_names] + ['target']
df = pd.DataFrame(np.c_[iris['data'],iris['target']],columns=cols)

df_train,df_test = train_test_split(df,train_size=0.75)

print(len(df_train) / len(iris.data))

如果传递了多个数据帧/数组,则它们必须具有相同的长度,并且每个都以相同的方式拆分,因此可以通过数据帧或每个列/特征的多个数组/列表灵活地执行此操作。这通常用于将标签保存在单独的容器中。