【问题标题】:Combining multiple parameters for creating SVM vector组合多个参数以创建 SVM 向量
【发布时间】:2013-03-22 08:45:22
【问题描述】:

scikit-learn 的新手,我正在处理一些类似以下的数据。

data[0] = {"string": "some arbitrary text", "label1": "orange", "value1" : False }
data[0] = {"string": "some other arbitrary text", "label1": "red", "value1" : True }

对于单行文本,TfidfTransformer 之前的管道中有 CountVectorizerDictVectorizer。这些的输出可以连接起来,我希望有以下警告:我不希望任意文本与特定的、有限的和明确定义的参数同等重要。

最后,还有一些可能相关的问题

  • 这个数据结构可能表明哪个 SVM 内核最好?
  • 或者在这种情况下,随机森林/决策树、DBN 或贝叶斯分类器可能会做得更好吗?还是Ensemble method? (输出为multi-class
  • 我看到feature union 即将推出一个功能,但这是对相同数据运行不同的方法并将它们组合起来。
  • 我应该使用feature selection吗?

另见:

【问题讨论】:

    标签: python svm scikit-learn


    【解决方案1】:

    scikit-learn(*) 中的所有分类器都期望样本具有平面特征表示,因此您可能希望将 string 特征转换为向量。首先,让我们排除一些不正确的假设:

    • DictVectorizer 不是用于处理“文本行”,而是用于任意符号特征。
    • CountVectorizer 也不是用于处理行,而是用于整个文本文档。
    • 特征是否“同等重要”主要取决于学习算法,尽管使用核化 SVM,您可以人为地为特征分配较小的权重,以使其点积产生不同的结果。不过,我并不是说这是个好主意。

    处理这类数据有两种方式:

    1. 构建一个FeatureUnion,其中包含用于文本数据的CountVectorizer(或TfidfVectorizer)和用于附加功能的DictVectorizer
    2. 手动将文本数据拆分为单词,然后将每个单词用作DictVectorizer 中的特征,例如

      {"string:some": True, "string:arbitrary": True, "string:text": True,
       "label1": "orange", "value1" : False }
      

    然后是相关问题:

    • 这个数据结构可能表明哪个 SVM 内核最好?

    由于您正在处理文本数据,请先尝试 LinearSVC,如果不起作用,请尝试 2​​ 次多项式内核。 RBF 内核与文本数据不匹配,三次或更高阶的多边形内核往往会严重过度拟合。作为内核的替代方案,您可以手动构建单个功能的产品并在此基础上训练 LinearSVC;有时,它比内核效果更好。它还消除了特征重要性问题,因为 LinearSVC 会学习每个特征的权重。

    • 或者在这种情况下,随机森林/决策树、DBN 或贝叶斯分类器可能会做得更好吗?

    如果不尝试,这是无法判断的。不幸的是,scikit-learn 的随机森林和 dtree 不处理稀疏矩阵,因此它们很难应用。未实现 DBN。

    • 我应该使用特征选择吗?

    不看数据就无法判断。

    (*) 如果您实现自定义内核,则 SVM 除外,这是一个非常高级的话题,我现在不会讨论它。

    【讨论】:

    • 感谢您彻底回答具体和一般问题。 LinearSVC 可以具有类权重 [1]。你为什么反对?还是您不推荐,因为这是一个特定于数据的问题? [1] - scikit-learn.sourceforge.net/stable/modules/generated/…
    • 我不建议反对LinearSVC,我完全赞成处理文本数据。而班级权重与此无关。
    • 对不起,我的意思是我试图澄清你反对使用重量。 “……尽管使用核化 SVM,您可以人为地为特征分配较小的权重,以使其点积产生不同的结果。不过,我并不是说这是一个好主意。”再次感谢。
    • Feature 权重,而不是类权重。澄清此评论:与使用多项式内核和SVC相比,我个人在手动生成特征产品(然后是特征选择)方面有更好的经验。
    猜你喜欢
    • 1970-01-01
    • 2013-10-07
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多