随机产生6类数据,要求其中每一类数据的样本数分别有249,48,23,23,16,11;使用SMOTE过采样对一些样本较少的类产生一些数据,最后通过三维可视化图表现过采样前后的数据样本分布
时间: 2024-09-25 13:03:34 浏览: 26
机器学习SVM作业基于Iris鸢尾花的数据样本实现SVM分类项目源码+实验报告(高分)
随机生成六类数据,你可以使用Python的`numpy`库来创建这种分层的数据集,比如:
```python
import numpy as np
# 每一类数据的原始样本数
counts = [249, 48, 23, 23, 16, 11]
data = {f"类{i}": np.random.randn(counts[i], 3) for i in range(1, 7)}
```
这里我们假设每类数据都有三个特征维度(x, y, z)。`np.random.randn`用于生成正态分布的随机数值。
SMOTE(Synthetic Minority Over-sampling Technique)是一种常用的过采样策略,适用于处理类别不平衡问题。对于样本量较小的类别,可以使用`imblearn`库中的`SMOTE`类来增加样本:
```python
from imblearn.over_sampling import SMOTE
smote = SMOTE(random_state=42)
for key, values in data.items():
if counts[int(key)-1] < len(values):
# 对于小于249的类应用SMOTE
data[key] = smote.fit_resample(values)
```
过采样后的数据分布,通常可以使用matplotlib或seaborn等可视化工具来进行三维散点图展示:
```python
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
for i, (key, values) in enumerate(data.items()):
ax.scatter(*values.T, label=key, c='C{}'.format(i))
ax.legend()
plt.show()
```
这个图形会显示出过采样前后各类别在三维空间中的分布变化,可以看到原本样本少的类别由于SMOTE产生了更多的模拟样本,使得整体数据分布更加均衡。
阅读全文