多类别从文件夹中划分类别不平衡数据集代码,要求能够划分的类别不平衡差距大一些
时间: 2023-08-18 17:06:13 浏览: 49
以下是一个从文件夹中读取数据并进行类别不平衡处理的样例代码:
```python
import os
import random
import shutil
data_dir = "/path/to/data"
train_dir = "/path/to/train"
val_dir = "/path/to/val"
# 定义每个类别的比例
class_ratios = {
"class1": 0.6,
"class2": 0.3,
"class3": 0.1
}
# 统计每个类别的图像数量
class_counts = {}
for class_name in class_ratios:
class_path = os.path.join(data_dir, class_name)
class_count = len(os.listdir(class_path))
class_counts[class_name] = class_count
# 计算每个类别应该选择的图像数量
total_count = sum(class_counts.values())
class_targets = {}
for class_name in class_ratios:
class_ratio = class_ratios[class_name]
class_target = round(class_ratio * total_count)
class_targets[class_name] = class_target
# 对每个类别进行采样
for class_name in class_ratios:
class_path = os.path.join(data_dir, class_name)
class_target = class_targets[class_name]
class_count = class_counts[class_name]
# 如果目标数量小于等于原有数量,则不做处理
if class_target <= class_count:
continue
# 否则,从原有样本中随机选择一部分样本
class_files = os.listdir(class_path)
random.shuffle(class_files)
selected_files = class_files[:class_target - class_count]
# 将选择的样本复制到训练集目录中
for file_name in selected_files:
src_path = os.path.join(class_path, file_name)
dst_path = os.path.join(train_dir, class_name, file_name)
shutil.copyfile(src_path, dst_path)
# 将未选择的样本复制到验证集目录中
for file_name in class_files:
if file_name not in selected_files:
src_path = os.path.join(class_path, file_name)
dst_path = os.path.join(val_dir, class_name, file_name)
shutil.copyfile(src_path, dst_path)
```
在这个样例代码中,我们首先定义了每个类别的比例,然后统计了每个类别的图像数量。接着,我们计算了每个类别应该包含的样本数量,并从原有样本中随机选择一部分样本复制到训练集目录中,将未选择的样本复制到验证集目录中。这样,我们就可以得到一个类别不平衡的数据集。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)