1 回答
TA贡献1744条经验 获得超4个赞
你在一个问题中问了太多而且很不相关的东西,而且里面有好几个问题。我将尝试解决我认为最严重的问题。
首先,如果您有以下形式的案例
Feature Label
AATGTCG 3
AATGTCG 0
AATGTCG 1
即,完全相同的单个特征可以属于 0、1 或 3 类,没有任何其他特征存在,那么这里的信息是监督分类可能不适合您手头的问题;为此,您应该使用附加功能。
如果,如您所说,您只对第 1、2 和 3 类感兴趣,并且
不是 0,我不关心 0
那么在数据准备阶段你应该做的第一件事就是从你的数据集中删除类 0 的所有实例;不清楚你是否在这里这样做,即使你这样做了,也不清楚为什么你仍然将 0 类留在讨论中。
其次(假设您的分类问题中确实只剩下 3 个类),您显示的是模型的预期输出:
GCTAGATGACAGT (0.9,0.1,0.2)
TTTTAAAACAG (0.7,0.6,0.3)
TAGCTATACT (0.3,0.3,0.2)
TGGGGCAAAAAAAA (0.1,0.5,0.6)
不正确;在多类分类中,返回的概率(即此处括号中的数字)加起来必须正好为1,而这里不是这种情况。
第三,由于您有一个多类分类问题,您的损失应该是categorical_crossentropy,而不是binary_crossentropy,它仅用于二元分类问题。
第四,再次假设你只剩下 3 个类,模型的最后一层应该是
model.add(Dense(3, activation='softmax') # no. of units here should be equal to the no. of classes)
而你的标签y应该是一次性编码的(你可以使用 Keras 函数轻松做到这一点to_categorical)。
第五,仔细查看循环开头的数据定义:
X_train, X_test = data_encoded[train], data_encoded[test]
y_train, y_test = data_encoded[train], data_encoded[test]
您可以很容易地看到您将特征作为特征和标签传递。我只能猜测这一定是你方的错字;标签应该是:
y_train, y_test = y[train], y[test]
关于您的预测时间错误
Error when checking input: expected embedding_3_input to have shape (5,) but got array with shape (1,)
这是由于input_length=5嵌入层中的参数。我在这里承认,我一点也不熟悉 Keras 嵌入层;您可能需要查看文档以确保此参数和分配的值确实符合您的想法/打算做的事情。
除此之外,关于您的具体问题:
我的问题专门针对预测。有人可以向我展示一个从拟合模型(我在上面有)到实际预测的跳跃示例。
您应该在 CV 循环之外再次重新编译和重新拟合模型(可能使用 CV 期间发现的“最佳”时期数)和整个数据,然后将其用于预测。
我想现在应该很清楚了,鉴于上述问题,你报告的 62% 的准确率实际上没有任何意义;无论好坏,如果你试图做从建模角度来看没有意义的事情(就像我上面提到的大多数事情),Keras 不会“保护”你,比如在多类问题中使用二元交叉熵,或在回归设置中使用准确性......
添加回答
举报
