已知:垃圾短信占1/10,非垃圾短信占9/10。帮我写一个python欠采样的预处理代码。
时间: 2024-05-08 14:16:32 浏览: 83
假设已经有一个数据集,其中包含垃圾短信和非垃圾短信。可以使用下面的代码进行欠采样:
```python
import pandas as pd
from sklearn.utils import resample
# 读取数据集
df = pd.read_csv("data.csv")
# 分离垃圾短信和非垃圾短信
spam = df[df["label"] == "spam"]
ham = df[df["label"] == "ham"]
# 对垃圾短信进行欠采样
spam_downsampled = resample(spam,
replace=False, # 没有重复的抽样
n_samples=len(ham), # 与非垃圾短信数量相同
random_state=42) # 设置随机种子
# 合并垃圾短信和非垃圾短信
df_downsampled = pd.concat([spam_downsampled, ham])
# 打乱数据集
df_downsampled = df_downsampled.sample(frac=1, random_state=42)
# 保存处理后的数据集
df_downsampled.to_csv("downsampled_data.csv", index=False)
```
这段代码使用了`resample`函数进行欠采样,它的参数包括:
- `replace`:是否有重复的抽样,这里设置为`False`表示不重复抽样。
- `n_samples`:抽样后的样本数量,这里设置为非垃圾短信的数量。
- `random_state`:随机种子,保证每次运行结果相同。
最后,将欠采样后的数据集打乱顺序,并保存为新的CSV文件。
阅读全文