Xuất trọng lượng (công thức) từ Công cụ hồi quy rừng ngẫu nhiên trong Scikit-Learn


9

Tôi đã đào tạo một mô hình dự đoán với Scikit Learn in Python (Random Forest Regressor) và tôi muốn trích xuất trọng lượng của từng tính năng để tạo ra một công cụ excel để dự đoán thủ công.

Điều duy nhất tôi tìm thấy là model.feature_importances_nhưng nó không có ích.

Có cách nào để đạt được nó?

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

Hiện tại, tôi sử dụng model.predict([features])để làm điều đó, nhưng tôi cần nó trong một tệp excel.


2
Một hồi quy rừng ngẫu nhiên là một rừng ngẫu nhiên decision trees, vì vậy bạn sẽ không nhận được một phương trình giống như bạn làm với hồi quy tuyến tính. Thay vào đó, bạn sẽ nhận được một loạt if, then, elselogic và nhiều phương trình cuối cùng để biến những chiếc lá cuối cùng thành giá trị số. Ngay cả khi bạn có thể hình dung cây và rút ra tất cả logic, tất cả điều này có vẻ như là một mớ hỗn độn lớn. Nếu bạn đang làm việc trong excel, có thể nghĩ về việc chỉ đào tạo mô hình của bạn trong excel bằng Azure. Tuy nhiên, tôi có lẽ sẽ chỉ gọi con trăn từ bên trong excel.
AN6U5

Lấy trung bình của mỗi lá sẽ không hoạt động? Tôi cũng đã thử một mô hình hồi quy tuyến tính và sự khác biệt nằm trong giới hạn. Vì vậy, nếu không có cách hợp lý và hiệu quả để xuất rừng ngẫu nhiên, tôi có thể cần phải quay lại hồi quy tuyến tính.
TASos


1
Cảm ơn bạn nhưng tôi đã nhận thức được theo cách này trong LR. Bạn có thể vui lòng tham gia ý kiến ​​của bạn về một câu trả lời để tôi có thể đánh dấu nó là câu trả lời?
TASos

Có lẽ nó đáng để rời khỏi / không được trả lời trong một vài ngày để xem nếu người khác có cái nhìn sâu sắc hữu ích. Trao đổi ngăn xếp khoa học dữ liệu nhỏ hơn nhiều so với tràn stack, do đó phải mất 2-3 ngày để có câu trả lời sâu sắc.
AN6U5

Câu trả lời:


1

Các SKompiler thư viện có thể giúp:

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

Kiểm tra video này .



0

Tôi đoán bạn muốn trích xuất tất cả logic theo sau bởi các cây khác nhau để kết thúc với bộ hồi quy cuối cùng. Để làm được điều đó, trước tiên bạn cần trích xuất logic của từng cây và sau đó trích xuất cách các đường dẫn đó được theo dõi. Scikit learn có thể cung cấp thông qua .decision_path (X), với X một số dữ liệu để dự đoán. Từ đây bạn sẽ có một ý tưởng về cách rừng ngẫu nhiên dự đoán và logic nào được tuân theo ở mỗi bước.

Khi bạn trích xuất quyết định, bạn có thể sử dụng Trình thông dịch cây để lấy "công thức" của Khu rừng ngẫu nhiên mà bạn đã đào tạo. Tôi không quen thuộc với Trình thông dịch cây này, nhưng nó dường như hoạt động trực tiếp trên trình tạo mô hình mà bạn đã đào tạo, nghĩa là,

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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.