首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何分割和训练生物学数据模型

如何分割和训练生物学数据模型
EN

Data Science用户
提问于 2021-06-10 10:14:53
回答 2查看 100关注 0票数 1

我使用的基因表达数据,是浮动数字,并希望训练分类器考虑到二进制分类。由于我是这个领域的新手,我有一些问题:

  1. 我使用的第一个分类器是SVM。我正在使用sklearn工具,它需要在培训和测试数据集中分离数据集。据我所知,为了构建模型,需要将数据集中的数据集和验证数据集(找到模型的参数)分开,而对于超参数的微调,则需要一个测试数据集。有趣的是,考虑到我在查看sklearn文档时发现的情况,建议只对火车和测试数据集进行分割。验证数据集上没有断言。因此,我怀疑,我是否正确地运行分类器。

下面是我使用的代码:

代码语言:javascript
复制
   from sklearn.model_selection import train_test_split
   from sklearn.utils import shuffle
   from sklearn import svm
   from sklearn.metrics import roc_curve, auc
   xall, yall = shuffle(x_sm, y_sm, random_state=21)
   x_train, x_test, y_train, y_test = train_test_split(xall, yall, test_size=0.3,   random_state=3, stratify=y_sm)
   x_train.shape, x_test.shape`
   classifier = svm.SVC(kernel='linear', gamma='auto', C=2,probability=True)
   classifier.fit(x_train, y_train)
   y_predict = classifier.predict(x_test)
   probs= classifier.predict_proba(x_test)
   fpr, tpr, threshold = roc_curve(y_test, preds)

如果隐式sklearn在内部使用训练、验证和测试数据集中的三重分割,那么有人能解释吗?如果没有,我应该如何修改代码以包括已知的分拆、验证和测试数据集的方案?如果不是随机分裂,而是使用k倍交叉验证,结果会再次分裂成两个而不是三个数据集吗?

  1. 在训练模型之前,我使用标准化工具和PCA进行特征和降维。在此之后,我采取了前10个PCA-在培训模型的组成部分,如上文所述。这是我们建议的正确方式吗?除了PCA,还有其他降维工具。一个人应该使用其中的几个,训练模型并在最后根据模型的性能来决定,一个特定的分类器使用哪一个降维工具?
  2. 除了SVM之外,我还想在相同的数据集中多使用3个分类器,并比较它们的性能。考虑到我所拥有的数据的性质,我应该选择哪个分类器?

我将非常感谢你的回答。谢谢。

EN

回答 2

Data Science用户

发布于 2021-06-10 12:24:03

你问的问题太多了。我会试着回答一个接一个的问题。记住,这只是我的观点,有些人可能不同意我的答案。

1.训练、测试和验证数据集

首先,我将尝试解释我如何看待数据集的3分裂:训练、测试和验证集。

  1. 训练集是用来训练模型的一组,用它计算损失函数,然后通过梯度下降对模型进行改进。这是模型通常能提供最佳性能的集合。
  2. 测试集是用来测试模型和计算度量的集合(在您的示例中,度量是精确的)。此集合用于查找模型的良好体系结构和超参数。
  3. 验证集不那么常见,因为它只在工作结束时使用。当您对所有模型进行了培训,找到了最佳的超级参数和体系结构之后,最后只需在验证数据集上尝试您的模型,看看它是否正常工作。此集合仅用于“验证”模型按预期工作的事实。这就是为什么我们通常不考虑使用它,而sklearn只建议您使用培训和测试集。

为了让您了解如何拆分数据集,我们通常使用以下方法进行拆分:

  • 80%-90%用于培训
  • 15-5%的测试设备
  • <5%关于验证集

您在代码中选择的测试大小(30%)似乎相当高,我会将其减少到15 %或10%。我不会使用验证数据集,就好像您的模型在您的训练集和测试集上工作一样,它很可能在任何其他集合上工作。

2.关于降维

我们在训练模型时通常不使用降维方法,因为我们通常希望模型具有尽可能好的精度,并且在大多数情况下计算时间并不重要。你应该问自己的问题是,‘我需要我的模型快速运行吗?'

  • 如果您需要它快速运行,那么使用PCA或任何降维技术都是明智的,将有助于减少计算时间。
  • 如果运行时间不是问题,那么就不要使用降维技术,因为它们可能会降低您的模型性能。

我对减少维数的所有算法不太了解,所以如果我不得不减少维数,不管我的分类器是什么,我都会使用PCA。

3.分类算法

它们是一些其他的算法,你可以用在你的数据分类。以下是我要尝试的(从最不喜欢到最喜欢的):

  • K-最近的邻居
  • Perceptron
  • 支持向量机
  • 随机林
  • 多层感知器

很抱歉给你这么长的答案,我希望这能帮上忙。

票数 0
EN

Data Science用户

发布于 2021-06-10 15:12:28

如果含蓄地学习是在内部使用的三分法在培训,验证和测试数据集?如果没有,我应该如何修改代码以包括已知的分拆、验证和测试数据集的方案?如果不是随机分裂,而是使用k倍交叉验证,结果会再次分裂成两个而不是三个数据集吗?

如果你知道你所有数据的真实或真实的标签,那么一列火车和一辆有效的火车和测试是一样的。

如果您有一个单独的“测试”集,您不知道标签,那么您将从您的列车(标签)设置一个有效的集合,以帮助调整和调整您的模型。在您的模型准备好之后,您可以在测试集上使用它。

sklearn中的有效集合是将训练数据的一个子集分离出来,标签完好无损地对模型进行验证(看看有多好)。这允许您微调算法。因此,您可以根据80%或90%的标签数据来训练您的模型,然后以验证集的形式使用其余的20%的标签数据,您可以知道模型是否做得很好。

所以,你不需要分成三人。

K折叠将训练数据的随机子集视为验证子,其余的处理为培训,因此您只需指定它执行此操作的次数(折叠)。

票数 0
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/96470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档