Ekspor bobot (formula) dari Regulator Hutan Acak di Scikit-Learn

9

Saya melatih model prediksi dengan Scikit Learn in Python (Random Forest Regressor) dan saya ingin mengekstraksi bobot setiap fitur untuk membuat alat excel untuk prediksi manual.

Satu-satunya hal yang saya temukan adalah model.feature_importances_tetapi tidak membantu.

Apakah ada cara untuk mencapainya?

def performRandomForest(X_train, y_train, X_test, y_test):

    '''Perform Random Forest Regression'''

    from sklearn.ensemble  import  RandomForestRegressor

    model  =  RandomForestRegressor()
    model.fit( X_train , y_train )

    #make predictions
    expected  = y_test
    predicted  = model.predict( X_test )

    #summarize the fit of the model
    mse  = np.mean(( predicted - expected )** 2)
    accuracy = ( model.score ( X_train , y_train ))

    return model, mse, accuracy

Saat ini, saya menggunakan model.predict([features])untuk melakukannya, tetapi saya membutuhkannya dalam file excel.

Tasos
sumber
2
decision treesRegresi hutan acak adalah hutan acak , sehingga Anda tidak akan mendapatkan satu persamaan seperti yang Anda lakukan dengan regresi linier. Sebaliknya Anda akan mendapatkan banyak if, then, elselogika dan banyak persamaan akhir untuk mengubah daun akhir menjadi nilai numerik. Bahkan jika Anda dapat memvisualisasikan pohon dan mengeluarkan semua logikanya, ini semua tampak seperti kekacauan besar. Jika Anda bekerja di excel, mungkin pikirkan tentang hanya melatih model Anda dalam excel menggunakan Azure. Namun, saya mungkin hanya akan memanggil python dari dalam excel.
AN6U5
Mengambil rata-rata setiap daun tidak akan berhasil? Saya mencoba juga model regresi linier dan perbedaannya ada di dalam batas. Jadi, jika tidak ada cara yang masuk akal dan efisien untuk mengekspor hutan acak, saya mungkin perlu mundur ke regresi linier.
Tasos
1
Terima kasih tetapi saya menyadari cara ini di LR. Bisakah Anda bergabung dengan komentar Anda pada jawaban sehingga saya dapat menandainya sebagai jawaban?
Tasos
Mungkin perlu dibiarkan / tidak dijawab selama beberapa hari untuk melihat apakah orang lain memiliki wawasan yang berguna. Pertukaran stack sains data jauh lebih kecil daripada stack overflow, sehingga dibutuhkan 2-3 hari untuk mendapatkan jawaban yang bagus.
AN6U5

Jawaban:

1

The SKompiler perpustakaan mungkin membantu:

from skompiler import skompile
skompile(rf.predict_proba).to('excel')

Lihat video ini .

KT.
sumber
0

Alih-alih mengekspor bobot, Anda dapat mengekspor model ke file acar dan menggunakan xlwings untuk membaca data dari spreadsheet, memuat model acar dan menjalankan prediksi. Berikut pertanyaan serupa .

Olel Daniel
sumber
0

Saya kira Anda ingin mengekstrak semua logika diikuti oleh pohon yang berbeda untuk berakhir pada regresi terakhir. Untuk itu, Anda perlu mengekstrak logika masing-masing pohon terlebih dahulu dan kemudian mengekstrak bagaimana jalur tersebut diikuti. Scikit belajar dapat menyediakannya melalui .decision_path (X), dengan X beberapa dataset untuk diprediksi. Dari sini Anda akan mendapatkan ide tentang prediksi hutan acak dan logika apa yang diikuti pada setiap langkah.

Setelah mengekstrak decision_path, Anda dapat menggunakan Penerjemah Pohon untuk mendapatkan "rumus" dari Hutan Acak yang Anda latih. Saya tidak terbiasa dengan Penafsir Pohon ini, tetapi tampaknya bekerja langsung pada pemodel yang telah Anda latih, yaitu,

from treeinterpreter import treeinterpreter as ti
# fit a scikit-learn's regressor model

rf = RandomForestRegressor()

rf.fit(trainX, trainY)

prediction, bias, contributions = ti.predict(rf, testX)
Diego
sumber