python中的理想分类器,适合稀疏的高维特征(具有分层分类)

问题描述 投票:3回答:1

这是我的任务:

我有一组分层类(例如“对象/建筑/建筑/住宅楼/房屋/农舍”) - 我写了两种分类方法:

  1. 独立处理每个类别(使用一个模型/分类器)
  2. 使用树,其中每个节点代表一个决策(根表示“对象/”,每个级别降低一般性),以及每个节点的特定模型/分类器(这里,我认为c(通常是3)出现的最高概率每个节点,并将概率向下传播(将log probs总和)传播到叶子,并选择最高。 我还必须引入一种方法来激励树木进一步向下(因为它可以停在对象/架构/建筑物(如果有相应的训练数据)),并使用任意的试错过程来具体决定怎么样(我对此感到不舒服): if numcategories == 4: tempscore +=1 elif numcategories ==5: tempscore +=1.3 elif numcategories ==6: tempscore +=1.5 elif numcategories >6: tempscore +=2

同样重要的是要注意我有大约290k训练样本和~150k(当前/大多数)布尔特征(用1.0或0.0表示) - 尽管它非常稀疏,所以我使用scipy的稀疏矩阵。此外,还有大约6500个独立的类(尽管方法2中的每个节点都少了很少)

使用方法1,使用scikit的sgdclassifier(loss=hinge),我得到大约75-76%的准确度,并且使用linearsvc,我得到大约76-77%(尽管它慢了8-9倍)。

然而,对于第二种方法(我认为可以/应该最终表现得更好)这些分类器都没有产生真正的概率,虽然我试图扩大他们的.decision_functions()产生的置信度分数,但它并不能很好地工作(精确度) 10-25%)。因此,我切换到logisticregression(),这让我的准确率达到了62-63%。而且,基于NB的分类器似乎表现得差得多。

最后,我有两个问题:

  1. 是否有更好的分类器(比scikit的logisticregression())在python中实现(可以是scikit或mlpy / nltk / orange / etc),它可以(i)处理稀疏矩阵,(ii)产生(接近)概率,以及(iii) )使用多类分类?
  2. 有没有办法更好地处理方法二? 2.A.具体来说,有没有办法更好地处理激励分类器在树下进一步产生结果?
machine-learning scipy classification sparse-matrix scikit-learn
1个回答
0
投票

您可以尝试一些想法:

  1. 在您的特征上应用一些嵌入技术,以避免大的稀疏矩阵。但是,它并不适合所有情况,也需要大量工作
  2. 使用XGBoost和自定义丢失功能。在这个损失函数中,您基本上可以应用您所描述的关于预测类深度的逻辑,并为模型提供激励,以便更频繁地预测更深层次的类。此外,基于树的模型将通过考虑您的功能之间的相关性而使您受益
© www.soinside.com 2019 - 2024. All rights reserved.