我正在处理一个multi-class
文本分类问题,我已使用LinearSVC
的pylele中的sklearn loss = 'hinge'
库实现了我的模型,其他参数为默认值,并且给出了满意的结果现在。
在传递数据之前执行的步骤:
代码部分:
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
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中更改哪些参数才能获得类似的结果。
非常感谢任何帮助。感谢。