我编写了Python代码,使用LSTM对降雨数据集进行不平衡的多类分类,输入变量是以数值形式表示的温度、阳光和湿度,目标有四个类别:无雨、轻雨、中雨和大雨,但模型在混淆矩阵中如以下代码所示仅分类出一个类别。
我还尝试了SMOTE和类权重技术来平衡类别,但结果没有变化。
有谁能帮助我提供完整的LSTM代码用于不平衡的多类分类吗?
混淆矩阵
数据集截图
这段代码不需要翻译
回答:
我认为你的代码中有一些错误。例如,你没有解释为什么要对标签调用stats.mode(labels)
。此外,我无法判断你是否正确使用了SMOTE等技术。
然而,由于你无法在StackOverflow上提供任何数据,我从Kaggle上获取了澳大利亚降雨数据集。
它看起来与你的数据集非常相似。最大的区别是我们只有两个类别用于“明天是否会下雨”:yes
和no
。但它也相当不平衡:
yes 77%no 23%
我实现了一个简单的模型,并进行了一些非常简单的预处理(所以所有这些都可能有很大的改进空间)。然而,这应该足以让你从这个例子中学习并与你的进行比较。简单地从这里下载数据并尝试一下。
在没有任何调整和平衡的情况下,我能够在测试数据上获得大约82%的准确率。在Kaggle上我看到人们在这个数据集上获得了88%的准确率,所以我们肯定可以改进我们的模型。
你需要做的就是确保weatherAUS.csv
在你的系统上可用,并且你已经安装了TensorFlow(我使用的是2.4.1版本)和其他依赖项。
之后,你应该能够修改代码以使其在你的数据集上运行。现在,先不考虑不平衡数据。一旦你的模型开始预测更合理的结果,我们可以尝试通过使用一些平衡技术来改进它。
代码(适用于weatherAUS.csv)
这段代码不需要翻译
输出
这段输出不需要翻译
针对原始问题数据的代码与结果
注意:提供的数据集非常小(约3000个样本)。
这段代码不需要翻译
这段输出不需要翻译