Mendorong pohon keputusan dengan python? [Tutup]

13

Apakah ada perpustakaan python yang bagus untuk pelatihan pohon keputusan yang didorong?

Andre Holzner
sumber
3
Rpy, tentu saja ;-)
Saya setuju dengan mbq. Apakah ada alasan yang sangat bagus mengapa Anda harus melakukan itu dengan Python? Kalau tidak, saya akan menggunakan kuda pekerja R sebagai back-end juga.
Joris Meys
satu-satunya alasan adalah bahwa saya telah menggunakan R hanya beberapa kali dalam setahun atau lebih yang lalu dan python yang saya gunakan setiap hari ...
Andre Holzner
2
Rpy adalah ketergantungan yang sangat buruk. R memiliki serangkaian fitur yang besar, dan karena itu bagus untuk dapat menggali di dalamnya menggunakan Rpy, tetapi jika Anda harus berbagi pekerjaan itu, Anda mungkin berada dalam masalah, bahkan jika itu berada di komputer yang berbeda dari lab yang sama, jika lab Anda berada dalam lingkungan komputasi yang heterogen. Hal ini disebabkan oleh kenyataan bahwa Rpy tergantung pada memiliki versi minor yang tepat dari Python, numpy dan R. Misalnya, itu terus rusak di distribusi Linux utama.
Gael Varoquaux
3
Jawaban di sini tampaknya sudah ketinggalan zaman - mereka tampaknya datang dari waktu ketika scikit.learn pada awalnya. Saya pikir pembaca dan situs akan mendapat manfaat jika seseorang yang berpengetahuan memberikan jawaban yang diperbarui.
Pere

Jawaban:

5

Jawaban yang Diperbarui

Lanskap telah banyak berubah dan jawabannya jelas saat ini:

  • scikit-belajar adalah dengan perpustakaan di python dan memiliki beberapa algoritma besar untuk pohon keputusan didorong
  • pohon keputusan terdorong "terbaik" dengan python adalah implementasi XGBoost .

Perbarui 1

  • Sementara itu, LightGBM , meskipun masih cukup "baru", tampaknya sama-sama bagus atau bahkan lebih baik daripada XGBoost
Mayou36
sumber
12

Penampilan pertama saya adalah di Orange , yang merupakan aplikasi berfitur lengkap untuk ML, dengan backend dalam Python. Lihat misalnya orngEnsemble .

Proyek menjanjikan lainnya adalah mlpy dan scikit.learn .

Saya tahu bahwa PyCV mencakup beberapa prosedur peningkatan, tetapi tampaknya tidak untuk CART. Lihatlah juga MLboost

chl
sumber
6

Saya mendapatkan kesuksesan yang baik dengan pelajar berbasis pohon di Milk: Machine Learning Toolkit for Python . Tampaknya sedang dalam pengembangan aktif, tetapi dokumentasinya agak jarang ketika saya menggunakannya. Test suite (github.com/luispedro/milk/blob/master/tests/test_adaboost.py) berisi "tunggul yang dikuatkan", yang bisa membuat Anda bergerak cukup cepat:

import numpy as np
import milk.supervised.tree
import milk.supervised.adaboost

def test_learner():
    from milksets import wine
    learner = milk.supervised.adaboost.boost_learner(milk.supervised.tree.stump_learner())
    features, labels = wine.load()
    features = features[labels < 2]
    labels = labels[labels < 2] == 0
    labels = labels.astype(int)
    model = learner.train(features, labels)
    train_out = np.array(map(model.apply, features))
    assert (train_out == labels).mean() > .9
Abraham Flaxman
sumber
4
Saya menghasilkan susu. Jika salah satu dari Anda mengalami masalah, beri tahu saya melalui email (lpc di cmu dot edu). Laporan bug umumnya diperbaiki dalam waktu kurang dari 24 jam.
luispedro
Sementara itu, saya telah menambahkan sedikit lebih banyak dokumentasi tentang adaboost: packages.python.org/milk/adaboost.html sehingga komentar di atas mungkin kurang valid daripada sebelumnya.
luispedro
4

Scikit-learn sekarang memiliki penerapan regresi (dan klasifikasi) pohon yang baik dan implementasi hutan acak . Namun, pohon yang dikuatkan masih belum termasuk. Orang-orang sedang mengusahakannya, tetapi perlu waktu untuk mendapatkan implementasi yang efisien.

Penafian: Saya adalah pengembang scikit-learn.

Gael Varoquaux
sumber
1

JBoost adalah perpustakaan yang luar biasa. Ini jelas tidak ditulis dalam Python, tetapi Agnostik agak bahasa, karena dapat dieksekusi dari baris perintah dan semacamnya sehingga dapat "didorong" dari Python. Saya telah menggunakannya di masa lalu dan sangat menyukainya, terutama hal-hal visualisasi.

carlosdc
sumber
1

Saya memiliki masalah yang sama sekarang: Saya kode dalam Python setiap hari, gunakan R sesekali, dan perlu algoritma pohon regresi yang baik. Meskipun ada banyak paket Python yang bagus untuk analitik tingkat lanjut, pencarian saya belum menemukan penawaran yang bagus untuk algoritma khusus ini. Jadi, rute saya pikir saya akan mengambil dalam beberapa minggu mendatang adalah dengan menggunakan paket GBM di R . Ada kertas bagus yang menunjukkan masalah praktis dengan menggunakannya yang dapat ditemukan di sini . Yang penting, paket GBM pada dasarnya digunakan "off the shelf" untuk digunakan pada KDD Cup 2009 . Jadi, saya mungkin akan melakukan semua pemodelan pra dan posting saya di Python dan menggunakan RPy untuk bolak-balik dengan R / GBM.

Josh Hemann
sumber
0

Saya telah mengalami situasi yang sama dengan Anda, saya menemukan Orange sulit untuk dicari (mungkin itu masalah saya). Pada akhirnya, saya menggunakan kode Peter Norivig untuk bukunya yang terkenal, di sana ia memberikan kerangka kode yang ditulis dengan baik untuk pohon, yang Anda butuhkan hanyalah menambahkan peningkatan di dalamnya. Dengan cara ini, Anda dapat membuat kode apa pun yang Anda suka.

aurora1625
sumber
0

Pohon Keputusan - Ada Meningkatkan

from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import AdaBoostClassifier
from sklearn.metrics import accuracy_score

Pohon Keputusan tanpa Peningkatan

clf_entropy_no_ada = DecisionTreeClassifier(criterion = "entropy", random_state = 100,
 max_depth=5, min_samples_leaf=5)
clf_entropy_no_ada.fit(X_train, y_train)

Pohon Keputusan dengan Ada Boosting

clf_entropy_ada = AdaBoostClassifier(base_estimator= clf_entropy_no_ada,n_estimators=400,learning_rate=1)
clf_entropy_ada.fit(X_train, y_train)

Pas Model dan menghitung Akurasi

y_predict_no_ada = clf_entropy_no_ada.predict(X_test)
print ("Accuracy is ", accuracy_score(y_test,y_predict_no_ada)*100)

y_predict_ada = clf_entropy_ada.predict(X_test)
print ("Accuracy is ", accuracy_score(y_test,y_predict_ada)*100)
Sudharsana Rajasekaran
sumber