Python 如何将数据集拆分为训练集和验证集,并保持类之间的比率?

Python 如何将数据集拆分为训练集和验证集,并保持类之间的比率?,python,numpy,pandas,machine-learning,scikit-learn,Python,Numpy,Pandas,Machine Learning,Scikit Learn,我有一个多类分类问题,我的数据集是倾斜的,我有100个特定类的实例,比如说10个不同类的实例,所以我想在类之间划分数据集的保留率,如果我有100个特定类的实例,并且我希望培训集中有30%的记录,那么我希望有30个代表100个记录的类的实例和3个代表10个记录的类的实例,依此类推。您可以从在线文档中使用sklearn: 分层K-折叠交叉验证迭代器 提供列车/测试 用于在列车测试集中分割数据的索引 此交叉验证对象 是KFold的一种变体,返回分层褶皱。褶皱是 通过保留每个类别的样本百分比来制作 这将

我有一个多类分类问题,我的数据集是倾斜的,我有100个特定类的实例,比如说10个不同类的实例,所以我想在类之间划分数据集的保留率,如果我有100个特定类的实例,并且我希望培训集中有30%的记录,那么我希望有30个代表100个记录的类的实例和3个代表10个记录的类的实例,依此类推。

您可以从在线文档中使用sklearn:

分层K-折叠交叉验证迭代器

提供列车/测试 用于在列车测试集中分割数据的索引

此交叉验证对象 是KFold的一种变体,返回分层褶皱。褶皱是 通过保留每个类别的样本百分比来制作

这将保留您的类比率,以便拆分保留类比率,这将与dfs配合使用

根据@Ali_m的建议,您可以使用接受分割比率参数的:

sss=StratifiedShuffleSplit(y,3,测试大小=0.7,随机状态=0)

将产生70%的分割。

简单到:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y,
                                                stratify=y, 
                                                test_size=0.25)
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y,
                                                stratify=y, 
                                                test_size=0.25)