相关疑难解决方法(0)

pleas上的sklearn train_test_split按多列分层

我是sklearn的一个相对较新的用户,并且在sklearn.model_selection的train_test_split中遇到了一些意想不到的行为.我有一个熊猫数据框,我想分成一个训练和测试集.我想将数据分层至少2个,但理想情况下我的数据框中有4列.

当我尝试这样做时,sklearn没有警告,但后来我发现我的最终数据集中有重复的行.我创建了一个示例测试来显示此行为:

from sklearn.model_selection import train_test_split
a = np.array([i for i in range(1000000)])
b = [i%10 for i in a]
c = [i%5 for i in a]
df = pd.DataFrame({'a':a, 'b':b, 'c':c})
Run Code Online (Sandbox Code Playgroud)

如果我按任一列分层,它似乎按预期工作:

train, test = train_test_split(df, test_size=0.2, random_state=0, stratify=df[['b']])
print(len(train.a.values))  # prints 800000
print(len(set(train.a.values)))  # prints 800000

train, test = train_test_split(df, test_size=0.2, random_state=0, stratify=df[['c']])
print(len(train.a.values))  # prints 800000
print(len(set(train.a.values)))  # prints 800000
Run Code Online (Sandbox Code Playgroud)

但是当我尝试按两列分层时,我得到重复的值:

train, test = train_test_split(df, test_size=0.2, random_state=0, stratify=df[['b', 'c']])
print(len(train.a.values))  # prints 800000
print(len(set(train.a.values)))  # prints 640000
Run Code Online (Sandbox Code Playgroud)

python pandas scikit-learn

15
推荐指数
3
解决办法
2万
查看次数

基于列的sklearn分层抽样

我有一个包含亚马逊评论数据的相当大的CSV文件,我将其读入大熊猫数据框.我想将数据分成80-20(训练测试),但在这样做时我想确保分割数据按比例代表一列(类别)的值,即所有不同类别的评论都存在于列车中并按比例测试数据.

数据如下所示:

**ReviewerID**       **ReviewText**        **Categories**       **ProductId**

1212                   good product         Mobile               14444425
1233                   will buy again       drugs                324532
5432                   not recomended       dvd                  789654123 
Run Code Online (Sandbox Code Playgroud)

我使用以下代码来执行此操作:

import pandas as pd
Meta = pd.read_csv('C:\\Users\\xyz\\Desktop\\WM Project\\Joined.csv')
import numpy as np
from sklearn.cross_validation import train_test_split

train, test = train_test_split(Meta.categories, test_size = 0.2, stratify=y)
Run Code Online (Sandbox Code Playgroud)

它给出了以下错误

NameError: name 'y' is not defined
Run Code Online (Sandbox Code Playgroud)

因为我对python相对较新,所以我无法弄清楚我做错了什么,或者这个代码是否会根据列类别进行分层.当我从train-test split中删除了stratify选项以及categories列时,它似乎工作正常.

任何帮助将不胜感激.

python pandas scikit-learn sklearn-pandas

14
推荐指数
2
解决办法
3万
查看次数

标签 统计

pandas ×2

python ×2

scikit-learn ×2

sklearn-pandas ×1