Các tài nguyên được liệt kê bởi những người khác chắc chắn rất hữu ích, nhưng tôi sẽ đồng ý và thêm vào những điều sau đây: trình phân loại "tốt nhất" có thể là bối cảnh và dữ liệu cụ thể. Trong một bước đột phá gần đây để đánh giá các phân loại nhị phân khác nhau, tôi đã tìm thấy Cây hồi quy Boosted hoạt động tốt hơn so với các phương thức khác mà tôi có quyền truy cập. Điều quan trọng đối với tôi là học cách sử dụng các công cụ khai thác dữ liệu Orange . Họ có một số tài liệu tuyệt vời để bắt đầu khám phá những phương pháp này với dữ liệu của bạn . Ví dụ, đây là một đoạn mã Python ngắn mà tôi đã viết để đánh giá chất lượng của nhiều phân loại qua nhiều thước đo độ chính xác bằng cách sử dụng xác thực chéo 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)
Khi tôi chạy mã này trên dữ liệu của mình, tôi nhận được kết quả như
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
Có rất nhiều điều bạn có thể làm với các đối tượng Orange để xem xét hiệu năng và so sánh. Tôi thấy gói này cực kỳ hữu ích khi viết một lượng nhỏ mã để thực sự áp dụng các phương thức cho dữ liệu của mình bằng API nhất quán và trừu tượng hóa vấn đề (nghĩa là tôi không cần sử dụng sáu gói khác nhau từ sáu tác giả khác nhau, mỗi gói có một tác giả khác cách tiếp cận để thiết kế và tài liệu API, v.v.).