ทรัพยากรที่ดีที่มีการเปรียบเทียบข้อดีข้อเสียของตัวแยกประเภทที่แตกต่างกันคืออะไร?


15

ตัวจําแนกคลาส 2 ระดับที่ดีที่สุดคืออะไร? ใช่ฉันเดาว่าเป็นคำถามล้านดอลลาร์และใช่ฉันรู้ว่าไม่มีทฤษฎีอาหารกลางวันฟรีและฉันได้อ่านคำถามก่อนหน้านี้ด้วย:

แต่ถึงกระนั้นฉันสนใจที่จะอ่านเพิ่มเติมเกี่ยวกับเรื่องนี้

แหล่งข้อมูลที่ดีที่มีการเปรียบเทียบลักษณะทั่วไปประโยชน์และคุณสมบัติของตัวแยกประเภทที่แตกต่างกันคืออะไร


+ โปรดยกโทษให้ฉันด้วยว่าฉันไม่ใช่เจ้าของภาษาอังกฤษ :)
Dov

คำตอบ:


9

ESLดังกล่าวแล้วโดยปีเตอร์ Flom เป็นข้อเสนอแนะที่ดีเยี่ยม (ทราบว่าการเชื่อมโยงของฉันคือในหน้าแรกของผู้เขียนที่หนังสือเล่มนี้สามารถได้รับเป็นไฟล์ PDF ฟรี) ให้ฉันเพิ่มสิ่งที่เจาะจงมากขึ้นสองสามอย่างเพื่อค้นหาในหนังสือ:

  • ตารางที่ 10.1 (หน้า 351) ให้ผู้เขียนประเมินคุณสมบัติบางประการของ Neural Nets, SVM, Trees, MARS และ k-NN kernels ซึ่งดูเหมือนว่าเป็นวิธีที่ผู้เขียนต้องการรวมไว้ในรายการ "off-the-" ชั้นวาง "วิธีการ
  • บทที่ 10 ถือว่าการส่งเสริมซึ่งฉันพบว่าขาดหายไปในรายการวิธีการในแบบสำรวจที่อ้างโดย OP การไล่ระดับสีแบบไล่ระดับดูเหมือนจะเป็นหนึ่งในวิธีการที่มีประสิทธิภาพดีกว่าในตัวอย่างจำนวนหนึ่ง
  • บทที่ 9 การปฏิบัติทั่วไปรุ่นสารเติมแต่ง (Gams) ซึ่งจะเพิ่มรูปแบบการถดถอยโลจิสติก (อันดับในการสำรวจความคิดเห็น ) ความยืดหยุ่นของผลกระทบสารเติมแต่งที่ไม่ใช่เชิงเส้นของการพยากรณ์ที่ Gams จะไม่เกือบเป็นเรื่องง่ายที่จะใช้เป็นถดถอยโลจิสติกับทุกพารามิเตอร์ที่ราบเรียบที่จะต้องได้รับการแต่งตั้งถ้ามันไม่ได้สำหรับการใช้งานที่ดีอย่างหนึ่งในแพคเกจการ R mgcv

เพิ่มลงในหนังสือเล่มนี้ว่าMachine Learning Task Viewสำหรับ R ซึ่งให้ความประทับใจกับสิ่งที่ชุดการเรียนรู้ของเครื่องมากมายสามารถทำได้จริงแม้ว่าจะไม่มีการเปรียบเทียบจริง สำหรับผู้ใช้ Python ฉันคิดว่าscikit.learnเป็นสถานที่ที่น่ามอง วิธีการ "out-of-the-box" หรือ "off-the-shelf" นั้นถูกกำหนดโดยวิธีการดำเนินการที่เกี่ยวข้องกับการปรับอัตโนมัติให้เข้ากับสถานการณ์ของข้อมูลเมื่อเทียบกับการปรับรายละเอียดให้กับผู้ใช้ ในใจของฉัน mgcv สำหรับ R เป็นตัวอย่างที่ดีที่ทำให้รูปแบบของสารเติมแต่งทั่วไปที่ดีพอสมควรนั้นง่ายและไม่จำเป็นต้องให้ผู้ใช้ "ปรับจูน" อะไรเลย


8

แหล่งข้อมูลที่ระบุโดยผู้อื่นล้วนมีประโยชน์อย่างแน่นอน แต่ฉันจะพูดสอดและเพิ่มสิ่งต่อไปนี้ตัวแยกประเภท "ดีที่สุด" น่าจะเป็นบริบทและข้อมูลเฉพาะ ในการจู่โจมเมื่อเร็ว ๆ นี้เพื่อประเมินตัวแยกประเภทไบนารีที่แตกต่างกันฉันพบต้นไม้ที่ได้รับการส่งเสริมให้ทำงานได้ดีกว่าวิธีอื่น ๆ ที่ฉันเคยเข้าถึง สิ่งสำคัญสำหรับฉันคือการเรียนรู้วิธีใช้เครื่องมือขุดข้อมูลออเรนจ์ พวกเขามีเอกสารที่ดีในการเริ่มต้นสำรวจวิธีการเหล่านี้กับข้อมูลของคุณ ตัวอย่างเช่นต่อไปนี้เป็นสคริปต์ Python สั้น ๆ ที่ฉันเขียนเพื่อประเมินคุณภาพของตัวแยกประเภทหลายตัวสำหรับการวัดความแม่นยำหลายระดับโดยใช้การตรวจสอบความถูกต้องของ k-fold

import orange, orngTest, orngStat, orngTree , orngEnsemble, orngSVM, orngLR
import numpy as np

data = orange.ExampleTable("performance_orange_2.tab")
bayes = orange.BayesLearner(name="Naive Bayes")
svm = orngSVM.SVMLearner(name="SVM")
tree = orngTree.TreeLearner(mForPruning=2, name="Regression Tree")
bs = orngEnsemble.BoostedLearner(tree, name="Boosted Tree")
bg = orngEnsemble.BaggedLearner(tree, name="Bagged Tree")
forest = orngEnsemble.RandomForestLearner(trees=100, name="Random Forest")
learners = [bayes, svm, tree, bs, bg, forest]
results = orngTest.crossValidation(learners, data, folds=10)
cm = orngStat.computeConfusionMatrices(results,
                             classIndex=data.domain.classVar.values.index('1'))

stat = (('ClsAcc', 'CA(results)'),
        ('Sens', 'sens(cm)'),
        ('Spec', 'spec(cm)'),
        ('AUC', 'AUC(results)'),
        ('Info', 'IS(results)'),
        ('Brier', 'BrierScore(results)'))
scores = [eval("orngStat." + s[1]) for s in stat]
print "Learner        " + "".join(["%-9s" % s[0] for s in stat])
print "-----------------------------------------------------------------"
for (i, L) in enumerate(learners):
    print "%-15s " % L.name + "".join(["%5.3f   " % s[i] for s in scores])

print "\n\n"
measure = orngEnsemble.MeasureAttribute_randomForests(trees=100)
print "Random Forest Variable Importance"
print "---------------------------------"
imps = measure.importances(data)
for i,imp in enumerate(imps):
    print "%-20s %6.2f" % (data.domain.attributes[i].name, imp)

print '\n\n'
print 'Predictions on new data...'
bs_classifier = bs(data)
new_data = orange.ExampleTable('performance_orange_new.tab')
for obs in new_data:
    print bs_classifier(obs, orange.GetBoth)

เมื่อฉันเรียกใช้รหัสนี้ในข้อมูลของฉันฉันได้รับผลลัพธ์เช่น

In [1]: %run binary_predict.py
Learner        ClsAcc   Sens     Spec     AUC      Info     Brier
-----------------------------------------------------------------
Naive Bayes     0.556   0.444   0.643   0.756   0.516   0.613
SVM             0.611   0.667   0.714   0.851   0.264   0.582
Regression Tree 0.736   0.778   0.786   0.836   0.945   0.527
Boosted Tree    0.778   0.778   0.857   0.911   1.074   0.444
Bagged Tree     0.653   0.667   0.786   0.816   0.564   0.547
Random Forest   0.736   0.667   0.929   0.940   0.455   0.512


Random Forest Variable Importance
---------------------------------
Mileage            2.34
Trade_Area_QI      2.82
Site_Score         8.76

ยังมีอะไรอีกมากมายที่คุณสามารถทำกับวัตถุสีส้มเพื่อใคร่ครวญประสิทธิภาพและทำการเปรียบเทียบ ฉันพบว่าแพคเกจนี้มีประโยชน์อย่างมากในการเขียนโค้ดจำนวนเล็กน้อยเพื่อใช้วิธีการกับข้อมูลของฉันด้วย API ที่สอดคล้องกันและปัญหาที่เป็นนามธรรม (เช่นฉันไม่จำเป็นต้องใช้แพ็กเกจที่แตกต่างกันหกชุดจากผู้เขียนที่ต่างกันหกคน แนวทางการออกแบบและเอกสาร API ฯลฯ )



4

แหล่งข้อมูลอื่น ๆ ที่ฉันพบเกี่ยวกับเรื่องนี้ (มี PDF ฟรี):


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.