如何使用交叉验证输出中的最佳模型来使用 keras model.predict()?

我有一个这样的 DNA 序列数据框:


Feature         Label

GCTAGATGACAGT   0

TTTTAAAACAG     1

TAGCTATACT      2    

TGGGGCAAAAAAAA  0

AATGTCG         3

AATGTCG         0

AATGTCG         1

其中有一列带有 DNA 序列,标签可以是 0、1、2、3(即该 DNA 序列的类别)。我想开发一个神经网络来预测每个序列分类为 1,2 或 3 类别的概率(不是 0,我不关心 0)。每个序列可以在数据框中出现多次,并且每个序列有可能出现在多个(或所有)类别中。所以输出应该是这样的:


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,2 和 3 中找到的概率。

它运行,并按预期打印精度(精度不是很好,62%,但我可以解决这个问题,这是我的第一个 NN,只想运行一个示例)。

我的问题专门针对预测。有人可以向我展示一个从拟合模型(我在上面有)到实际预测的跳跃示例。我认为该算法涉及:

  1. 从交叉验证中找到最佳模型(我试图将其与监视器 val 准确性部分结合起来)

  2. 预测类别的序列列表在 pred_list 中

  3. 拟合从训练到 pred_list 的最佳模型

  4. 如问题顶部所述的返回概率。

我从其他问题中知道这存在(例如这里):

prediction = model.predict(np.array(tk.texts_to_sequences(text)))
print(prediction)

....但我不知道如何将它与交叉验证结合起来,也不知道如何以一种方式获得我想要的输出(即在训练中每个序列被分配到 1,2 或 3 类的三类概率数据集,其中每个序列可以出现在多个类中)。



回首忆惘然
浏览 128回答 1
1回答

慕无忌1623718

你在一个问题中问了太多而且很不相关的东西,而且里面有好几个问题。我将尝试解决我认为最严重的问题。首先,如果您有以下形式的案例Feature         LabelAATGTCG         3AATGTCG         0AATGTCG         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 不会“保护”你,比如在多类问题中使用二元交叉熵,或在回归设置中使用准确性......
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python