我使用的基因表达数据,是浮动数字,并希望训练分类器考虑到二进制分类。由于我是这个领域的新手,我有一些问题:
SVM。我正在使用sklearn工具,它需要在培训和测试数据集中分离数据集。据我所知,为了构建模型,需要将数据集中的数据集和验证数据集(找到模型的参数)分开,而对于超参数的微调,则需要一个测试数据集。有趣的是,考虑到我在查看sklearn文档时发现的情况,建议只对火车和测试数据集进行分割。验证数据集上没有断言。因此,我怀疑,我是否正确地运行分类器。下面是我使用的代码:
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倍交叉验证,结果会再次分裂成两个而不是三个数据集吗?
SVM之外,我还想在相同的数据集中多使用3个分类器,并比较它们的性能。考虑到我所拥有的数据的性质,我应该选择哪个分类器?我将非常感谢你的回答。谢谢。
发布于 2021-06-10 12:24:03
你问的问题太多了。我会试着回答一个接一个的问题。记住,这只是我的观点,有些人可能不同意我的答案。
首先,我将尝试解释我如何看待数据集的3分裂:训练、测试和验证集。
为了让您了解如何拆分数据集,我们通常使用以下方法进行拆分:
您在代码中选择的测试大小(30%)似乎相当高,我会将其减少到15 %或10%。我不会使用验证数据集,就好像您的模型在您的训练集和测试集上工作一样,它很可能在任何其他集合上工作。
。
我对减少维数的所有算法不太了解,所以如果我不得不减少维数,不管我的分类器是什么,我都会使用PCA。
它们是一些其他的算法,你可以用在你的数据分类。以下是我要尝试的(从最不喜欢到最喜欢的):
很抱歉给你这么长的答案,我希望这能帮上忙。
发布于 2021-06-10 15:12:28
如果含蓄地学习是在内部使用的三分法在培训,验证和测试数据集?如果没有,我应该如何修改代码以包括已知的分拆、验证和测试数据集的方案?如果不是随机分裂,而是使用k倍交叉验证,结果会再次分裂成两个而不是三个数据集吗?
如果你知道你所有数据的真实或真实的标签,那么一列火车和一辆有效的火车和测试是一样的。
如果您有一个单独的“测试”集,您不知道标签,那么您将从您的列车(标签)设置一个有效的集合,以帮助调整和调整您的模型。在您的模型准备好之后,您可以在测试集上使用它。
sklearn中的有效集合是将训练数据的一个子集分离出来,标签完好无损地对模型进行验证(看看有多好)。这允许您微调算法。因此,您可以根据80%或90%的标签数据来训练您的模型,然后以验证集的形式使用其余的20%的标签数据,您可以知道模型是否做得很好。
所以,你不需要分成三人。
K折叠将训练数据的随机子集视为验证子,其余的处理为培训,因此您只需指定它执行此操作的次数(折叠)。
https://datascience.stackexchange.com/questions/96470
复制相似问题