Machine learning python中适合稀疏高维特征的理想分类器(具有层次分类)
这是我的任务: 我有一组分层类(例如“对象/建筑/建筑/住宅建筑/房屋/农舍”)——我写了两种分类方法:Machine learning python中适合稀疏高维特征的理想分类器(具有层次分类),machine-learning,scipy,classification,sparse-matrix,scikit-learn,Machine Learning,Scipy,Classification,Sparse Matrix,Scikit Learn,这是我的任务: 我有一组分层类(例如“对象/建筑/建筑/住宅建筑/房屋/农舍”)——我写了两种分类方法: 独立处理每个类(整体使用一个模型/分类器) >P>使用一个树,其中每个节点代表一个决定(根表示“对象/”),每个级别都降低通用性,每个节点都有一个特定的模型/分类器(这里,我考虑C(通常是3个)从每个节点中出来的最高概率,并将概率向下传播(将日志项求和))。选择最高的 我还必须引入一种方法来激励进一步深入到树下(因为它可以停在对象/架构/建筑(如果有相应的培训数据)),并使用任意的试错过程来
还需要注意的是,我有大约290k个训练样本和~150k(目前/大部分)布尔特征(用1.0或0.0表示)——尽管它是高度稀疏的,所以我使用了scipy的稀疏矩阵。此外,还有大约6500个独立类(尽管方法2中每个节点的独立类要少得多) 使用方法1,使用scikit的
SGDClassizer(loss=铰链)
,我获得了大约75-76%的准确率,使用linearsvc,我获得了大约76-77%(尽管速度慢了8-9倍)
然而,对于第二种方法(我认为它最终可以/应该表现得更好),这两种分类器都不能产生真实的概率,虽然我试图衡量它们的.decision_functions()
产生的置信度,但效果并不好(准确率为10-25%)。因此,我切换到logisticregression()
,这使我获得了约62-63%的准确率。此外,基于NB的分类器的性能似乎要差得多
最后,我有两个问题:
logisticregression()
)更好(i)处理稀疏矩阵,(ii)产生(接近)概率,以及(iii)处理多类分类您可以尝试以下几个想法:
if numcategories == 4:
tempscore +=1
elif numcategories ==5:
tempscore +=1.3
elif numcategories ==6:
tempscore +=1.5
elif numcategories >6:
tempscore +=2