代码之家  ›  专栏  ›  技术社区  ›  Sumit S Chawla

Apache Spark的Mllib LinearSVC和Sklearn的LinearSVC之间的差异

  •  4
  • Sumit S Chawla  · 技术社区  · 7 年前

    我正在做一个 multi-class 我已经使用sklearn实现了我的模型的文本分类问题 LinearSVC python中的库 loss = 'hinge' 和其他参数作为默认值,目前正在给出令人满意的结果。

    传递数据之前执行的步骤:

    1. 特殊字符删除。
    2. 停止字删除。
    3. 堵塞。

    代码部分:

    vectorizerPipe = Pipeline([('tfidf', TfidfVectorizer(lowercase=True,
            stop_words='english')),
    ('classification', OneVsRestClassifier(LinearSVC(penalty='l2', loss='hinge'))),])
    

    现在,我想在scala中使用MLlib在Spark中实现同样的功能。我已经完成了培训和测试部分。但是,结果却大相径庭。

    val classifier = new LinearSVC()
      .setMaxIter(1000)
      .setRegParam(0.01)
      .setThreshold(0.5)
      .setTol(1E-4)
    
    val ovr = new OneVsRest().setClassifier(classifier)
    
    val pipeline = new Pipeline()
          .setStages(Array(tokenizer, stopword_removal, stemming, hashingTF, idf, indexer, ovr))
    

    相比之下,python给出了更正确的结果。

    我使用下面的文章来理解这两个库之间的基本区别,并应用了相同的方法。但结果没有太大差别。

    should-mllib-linearsvc-behave-the-same-way-as-scik

    注意:我使用的是spark 2.2.0和 Linear SVC 在下面 OneVsRest Classifier

    数据结构:

    ----------------------------------------------------------------------------------------
    | product_title          | Key_value_pairs                               | taxonomy_id (Output) |
    ----------------------------------------------------------------------------------------
      Samsung S7 Edge        | Color:black,Display Size:5.5 inch,Internal    | 211 
                              Storage:128 GB, RAM:4 GB,Primary Camera:12 MP  
    
      Case cover Honor 8     | Color:transparent,Height:15 mm,width:22 mm    | 212 
    
      Ruggers Men's T-Shirt  | Size:L,ideal for:men,fit:regular,             | 111
                              sleeve:half sleeve
    
      Optimum Nutrition Gold | Flavor:chocolate,form:powder,size:34 gm       | 311
      Standard Whey Protein  
    

    我想了解这两个库之间的基本区别,以及需要在MlLib的LinearSVC中更改哪些参数才能获得类似的结果。

    非常感谢您的帮助。谢谢

    0 回复  |  直到 7 年前