我是机器学习的新手,我无法根据具体问题调整我发现的任何示例。 scikit的官方文档非常简洁,并且充满了我不熟悉的术语,所以我不确定我应该使用哪种算法,如何正确地为其准备数据,以及如何在表单中获得预测我想要。
我已经有了适用于文本的特征提取功能,它返回一个从0.0到100.0的浮点元组。这些代表了文本中某个特征的普遍性百分比。因此,我对某段文字的功能看起来像(0.0, 17.31, 57.0, 93.2, ...)
。我不确定哪种算法最适合这种类型的数据。
根据标题,我还需要能够使用多个标签对一段文本进行分类。阅读其他一些SO问题后,我需要使用MultiLabelBinarizer
和OneVsRestClassifier
,但我仍然不确定如何将它们应用于我的数据以及我需要使用的算法。
我也没有找到任何能够以我想要的形式返回多个标签的预测结果的示例。也就是说,我不想使用二进制“是或不是这个标签”,而是希望文本具有特定标签的百分比。因此,在执行类似classifier.predict(testData)
之类的操作时,我希望返回{"spam":87.3, "code":27.9, "urlList":3.12}
而非类似["spam", "code", "urlList"]
的内容。通过这种方式,我可以更明确地决定如何处理某个文本。
我可能还应该提到我正在使用的数据集的一个特征,那就是85-90%的文本将是代码,因此只有一个标记“代码”。我想对算法需要进行一些调整吗?
一些简化且可能不合适的代码:
possibleLabels = ["code", "spam", "urlList"]
trainData, trainLabels = [ (0.0, 17.31, 57.0, 93.2), ... ], [ ["spam"], ["code"], ["code", "urlList"], ... ]
testData, testLabels = [], [] # Separate batch of samples in the same format as above
# Not sure if this is the proper way to prepare my labels,
# nor how to later resolve the binarized versions to their string counterparts.
mlb = preprocessing.MultiLabelBinarizer()
fitTrainLabels = mlb.fit_transform(trainLabels)
# Feels like I need more to make it suitable for my data
classifier = OneVsRestClassifier()
classifier.fit(trainData, fitTrainLabels)
# Need return as a list of dicts containing probability of tags, ie. [ {"spam":87.3, "code":27.9, "urlList":3.12}, {...}, ... ]
predicted = classifier.predict(testData)