在python中按照类别将sklearn库中的红酒数据集划分为训练集和测试集,保证每个类的训练数据和测试数据的比例相同
时间: 2024-11-10 17:14:33 浏览: 18
Python分割训练集和测试集的方法示例
在Python中,我们可以使用scikit-learn库(sklearn)的`train_test_split`函数来按照类别平衡地划分红酒数据集(如Wine dataset)。这个数据集通常作为示例数据集附带在sklearn.datasets模块中。这里是一个简单的步骤:
```python
from sklearn import datasets
from sklearn.model_selection import train_test_split
import numpy as np
# 加载葡萄酒数据集
wine = datasets.load_wine()
X = wine.data # 特征数据
y = wine.target # 类别标签
# 确保类别平衡,可以先计算各类别的数量
class_counts = np.unique(y, return_counts=True)
min_count = min(class_counts[1])
# 对于每个类别,随机选择指定数量的数据
indices_per_class = {label: np.random.choice(np.where(y == label)[0], size=min_count, replace=False)
for label in np.unique(y)}
# 使用这些索引来切分数据
X_train_balanced, X_test_balanced, y_train_balanced, y_test_balanced = train_test_split(
X[[ind for sublist in indices_per_class.values() for ind in sublist]], # 选择对应类别的样本
y[[ind for sublist in indices_per_class.values() for ind in sublist]],
test_size=0.2, # 测试集占总样本比例,默认为0.25,你可以调整
stratify=y, # 确保类别分布一致
random_state=42 # 设置随机种子以保证结果可复现
)
```
这样你就得到了一个类别平衡的训练集和测试集。`stratify`参数确保了在划分过程中各类别的比例保持不变。
阅读全文