Apache Spark的Mllib-LinearSVC和Sklearn的LinearSVC之间的区别

时间:2018-05-29 05:38:23

标签: python-3.x scala scikit-learn apache-spark-mllib

我正在处理一个multi-class文本分类问题,我已使用LinearSVC的pylele中的sklearn loss = 'hinge'库实现了我的模型,其他参数为默认值,并且给出了满意的结果现在。

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

  1. 删除特殊字符。
  2. 删除停用词。
  3. 词干。
  4. 代码部分:

    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

    注意:我在Linear SVC

    下使用spark 2.2.0和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 个答案:

没有答案