python - Pandas:快速随机负采样
问题描述
假设我有一个包含给定用户的正样本和上下文特征的 DataFrame:
target user cashtag sector industry
0 1 170 4979 3 70
1 1 170 5539 3 70
2 1 170 7271 3 70
3 1 170 7428 3 70
4 1 170 686 7 139
其中正样本是user
与 a 交互的 a cashtag
,用target
= 1 表示。
什么是我为每个交互生成比例为 1:2 (+ve:-ve) 的负样本的快速方法,用target
= -1 表示?
编辑:为了清楚起见,下面的样本(对于前两个阳性样本)
target user cashtag sector industry
0 1 170 4979 3 70
1 -1 170 3224 7 181
2 -1 170 4331 7 180
3 1 170 5539 3 70
4 -1 170 9304 4 59
5 -1 170 3833 6 185
例如,对于用户与之交互的每个现金标签,我想随机挑选 2 个他们没有与之交互的其他现金标签,并将它们作为负样本添加到数据框中;有效地将数据框的大小增加到其原始大小的 3 倍。
检查是否尚未为该组合输入负样本也user
很有帮助cashtag
。
解决方案
这是我的解决方案:
data="""
target user cashtag sector industry
1 170 4979 3 70
1 170 5539 3 70
1 170 7271 3 70
1 170 7428 3 70
1 170 686 7 139
"""
df = pd.read_csv(pd.compat.StringIO(data), sep='\s+')
df1 = pd.DataFrame(columns = df.columns)
cashtag = df['cashtag'].values.tolist()
#function to randomize some numbers
def randomnumber(v):
return np.random.randint(v, size=1)
def addNewRow(x):
for i in range(2): #add 2 new rows
cash = cashtag[0]
while cash in cashtag: #check if cashtag already used
cash = randomnumber(5000)[0] #random number between 0 and 5000
cashtag.append(cash)
sector = randomnumber(10)[0]
industry = randomnumber(200)[0]
df1.loc[df1.shape[0]] = [-1, x.user, cash, sector, industry]
df.apply(lambda x: addNewRow(x), axis=1)
df = df.append(df1).reset_index()
print(df)
输出:
index target user cashtag sector industry
0 0 1 170 4979 3 70
1 1 1 170 5539 3 70
2 2 1 170 7271 3 70
3 3 1 170 7428 3 70
4 4 1 170 686 7 139
5 0 -1 170 544 2 59
6 1 -1 170 3202 8 165
7 2 -1 170 2673 0 40
8 3 -1 170 4021 1 30
9 4 -1 170 682 6 3
10 5 -1 170 2446 1 80
11 6 -1 170 4026 9 193
12 7 -1 170 4070 9 197
13 8 -1 170 2900 1 57
14 9 -1 170 3287 0 21
新的随机行放在数据框的末尾
推荐阅读
- types - 我得到了一个预期的类型参数,即使我认为我已经返回了正确的类型数据
- samsung-smart-tv - 我可以在三星智能电视网络应用程序中使用外部库吗?
- sed - 替换变量替换的两个模式匹配之间的多行
- javascript - 循环遍历元素并检查 vanilla javascript 中的子类
- docker - 如何使用本地 IP 地址或 Pod 的主机名从一个 Pod 连接到另一个 Pod
- php - 如何修复,参考邮件中没有重复
- python - Python:如果两个单元格都包含某些字符串
- c# - 是否可以使用 HTML5 使用 WebApi REST 服务?
- amazon-web-services - 嵌套 AWS Cloudformation 堆栈与使用 SSM 参数存储
- python - 为什么没有安装 Pydot?