我试图找到分类单个页面的最佳方法,基于在一些独特文档上训练分类器/分类器(让我们说350)。 这些文档中的每一个都可以是1到n页长。可能有10到1000个样本可用于训练每个文档的分类器。 问题是,我有一个来自这些文档的随机页面(测试集与训练集不同),我想将页面归类为其中一个文档。 我以前曾尝试构建一个单独的分类器并获得了良好的结果,但测试集是整个文档,现在它是来自这些文档的页面。
我已经形成了一个我在下面描述的部分解决方案,但我希望有更好的建议并完善它。
将数据拆分为70:30进行培训和测试,每个文档在培训集中有70%的文档,在测试集中有30%的文档。 (Splitting a list of file names in a predefined ratio)
#all_doc_types is a dictionary with unique documents and their total counts as key-value pairs
def split_data(sampleObjList):
trainingData = []
testData = []
temp_dict = {}
for x in sampleObjList:
ratio = int(0.7*all_doc_types[x.doc_type])+1
if x.doc_type not in temp_dict:
temp_dict[x.doc_type] = 1
trainingData.append(x)
else:
temp_dict[x.doc_type] += 1
if(temp_dict[x.doc_type] < ratio):
trainingData.append(x)
else:
testData.append(x)
return trainingData, testData
培训与每个文档相对应的唯一模型
classifier = GaussianNB()
for docType in trainingData:
fit = classifier.fit(trainingData[docType], [docType]*len(trainingData[docType]))
filename = 'NB_classifier_'+docType+'.pickle'
f = open(filename, 'wb')
pickle.dump(classifier, f)
f.close()
测试由给定唯一文档中随机选择的单页组成的测试数据。
我可以轻松地通过我训练过的每个模型运行测试数据集,但是我无法知道哪个是我将该测试页面分类的文档,因为我会有多个模型返回一个积极的结果。因此,我希望将Naive Bayes模型组合在一起,而不是单独的二元分类器,或者找到一种方法来获得最佳结果作为从多个二元分类器得到的结果解集的输出。
我在询问之前进行了搜索,这些是最接近的结果 -
我无法弄清楚是否将这两个用于我的具体问题。
非常感谢任何帮助。
注意:我之前遇到过一段糟糕的经历,人们在没有理由的情况下对我的问题进行了贬低,问题恰好是Splitting a list of file names in a predefined ratio。如果在我们每天都学习之后能够得到任何此类downvote的反馈,那将非常有用。