Scikit-Learn의 Random Forest Regressor에서 가중치 (수식) 내보내기


9

Python (Random Forest Regressor)의 Scikit Learn을 사용하여 예측 모델을 훈련했으며 수동 예측을위한 Excel 도구를 만들기 위해 각 기능의 가중치를 추출하고 싶습니다.

내가 찾은 유일한 것은 model.feature_importances_도움이되지 않습니다.

그것을 달성 할 수있는 방법이 있습니까?

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

현재는을 사용하여 사용 model.predict([features])하지만 Excel 파일에 필요합니다.


2
랜덤 포레스트 회귀는의 임의 포레스트 decision trees이므로 선형 회귀를 사용하는 것처럼 하나의 방정식을 얻지 못합니다. 대신 if, then, else마지막 잎을 숫자 값으로 바꾸는 많은 논리와 많은 최종 방정식을 얻게 됩니다. 트리를 시각화하고 모든 논리를 제거 할 수 있더라도이 모든 것이 큰 혼란처럼 보입니다. Excel에서 작업하는 경우 Azure를 사용하여 Excel에서 모델을 훈련시키는 것에 대해 생각해보십시오. 그러나 아마도 Excel 내에서 파이썬을 호출 할 것입니다.
AN6U5

각 잎의 평균을 복용하면 작동하지 않습니까? 나는 또한 선형 회귀 모델을 시도했고 그 차이는 한계 안에 있습니다. 따라서 임의 포리스트를 내보내는 합리적이고 효율적인 방법이 없다면 선형 회귀로 돌아 가야 할 수도 있습니다.
Tasos


1
고맙지 만 LR에서 이런 식으로 알고있었습니다. 답변으로 표시하여 답변으로 표시 할 수 있습니까?
Tasos

다른 사람이 유용한 통찰력을 가지고 있는지 확인하기 위해 며칠 동안 떠날 가치가 있습니다. 데이터 과학 스택 교환은 스택 오버플로보다 훨씬 작으므로 통찰력있는 답변을 얻는 데 2-3 일이 걸립니다.
AN6U5

답변:




0

최종 논리에 도달하기 위해 모든 논리와 다른 트리를 추출하려고합니다. 이를 위해서는 먼저 각 트리의 논리를 추출한 다음 해당 경로를 따르는 방법을 추출해야합니다. Scikit learn은 .decision_path (X)를 통해 X에 예측할 데이터 세트를 제공합니다. 여기에서 임의 포리스트가 어떻게 예측되고 각 단계에서 어떤 논리가 따라야하는지에 대한 아이디어를 얻을 수 있습니다.

decision_path를 추출하면 Tree Interpreter 를 사용하여 훈련 한 랜덤 포레스트의 "수식"을 얻을 수 있습니다 . 나는이 Tree Interpreter에 익숙하지 않지만, 훈련 한 모델러에서 직접 작동하는 것 같습니다.

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)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.