ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – 通过使用pandas中groupby()的百分比从Train集中获取验证集

2019-06-27 08:53:43  阅读:286  来源: 互联网

标签:python group-by pandas cross-validation train-test-split


拥有具有多类目标变量类别的训练数据集

train.groupby('category').size()

0     2220
1     4060
2      760
3     1480
4      220
5      440
6    23120
7     1960
8    64840

我想通过获得每个类的百分比(比如说20%)从列车集中获取新的验证数据集,以避免在验证集中丢失类并破坏模型.所以基本上理想的输出将是df具有相同的结构和信息,如火车组,但具有如下参数:

0     444
1     812
2     152
3     296
4      44
5      88
6    4624
7     392
8   12968

在熊猫中解决它是否有任何直接的方法?

解决方法:

Groupby和sample应该为您做到这一点

df = pd.DataFrame({'category': np.random.choice(['a', 'b', 'c', 'd', 'e'], 100), 'val': np.random.randn(100)})

idx = df.groupby('category').apply(lambda x: x.sample(frac=0.2, random_state = 0)).index.get_level_values(1)

test = df.iloc[idx, :].reset_index(drop = True)
train = df.drop(idx).reset_index(drop = True)

编辑:你也可以用scikit学习,

df = pd.DataFrame({'category': np.random.choice(['a', 'b', 'c', 'd', 'e'], 100), 'val': np.random.randn(100)})

X = df.iloc[:, :1].values
y = df.iloc[:, -1].values
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, stratify = X)

X_train.shape, X_test.shape, y_train.shape, y_test.shape

((80, 1), (20, 1), (80,), (20,))

标签:python,group-by,pandas,cross-validation,train-test-split
来源: https://codeday.me/bug/20190627/1303249.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有