Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Machine learning python中适合稀疏高维特征的理想分类器(具有层次分类)_Machine Learning_Scipy_Classification_Sparse Matrix_Scikit Learn - Fatal编程技术网

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个)从每个节点中出来的最高概率,并将概率向下传播(将日志项求和))。选择最高的 我还必须引入一种方法来激励进一步深入到树下(因为它可以停在对象/架构/建筑(如果有相应的培训数据)),并使用任意的试错过程来

这是我的任务:

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

  • 独立处理每个类(整体使用一个模型/分类器)

  • >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的分类器的性能似乎要差得多

    最后,我有两个问题:

  • 在python中实现的分类器(可以是scikit或mlpy/nltk/orange/etc)是否比scikit的
    logisticregression()
    )更好(i)处理稀疏矩阵,(ii)产生(接近)概率,以及(iii)处理多类分类
  • 有没有更好的方法来处理方法二? 2.a。具体来说,是否有更好的方法来处理激励分类器生成树下更远的结果

  • 您可以尝试以下几个想法:

  • 在特征上应用一些嵌入技术,以避免出现大型稀疏矩阵。然而,它并不适合所有情况,还需要大量的工作
  • 将XGBoost与自定义丢失功能一起使用。在这个损失函数中,您基本上可以应用您描述的关于预测类深度的逻辑,并为模型提供更频繁地获得更深层预测类的激励。此外,基于树的模型将考虑特征之间的相关性,从而使您受益
  • (1) 有更好的分类器吗?您是否尝试过优化scikit学习分类器的参数?标准化特征、标准化样本和惩罚参数对分类精度有很大影响。至于(2),也许一些定制结构的学习者会做得更好。嗨,larsmans——(1)是的,但我想使用比逻辑回归更好的方法(在我意识到我需要接近“真实”概率的方法之前,我在linearsvc(比逻辑回归好得多)方面运气很好)(2)同意
        if numcategories == 4:
            tempscore +=1
        elif numcategories ==5:
            tempscore +=1.3
        elif numcategories ==6:
            tempscore +=1.5
        elif numcategories >6:
            tempscore +=2