这是我的任务:
我有一套等级类(例如“对象/建筑/建筑/住宅楼/住宅/农舍”) - 我写了两种分类方法:
独立处理每个类(使用一个模型/分类器)
使用树,其中每个节点代表一个决策(根代表“object /”,每个级别降低一般性),以及每个节点的特定模型/分类器(这里,我考虑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的分类器似乎表现得差得多。
最终,我有两个问题:
logisticregression()
)在python中实现(可以是scikit或mlpy / nltk / orange / etc),它们可以(i)处理稀疏矩阵,(ii)生成(关闭的东西) to)概率,以及(iii)使用多类分类?答案 0 :(得分:0)
您可以尝试的一些想法: