从头开始构建带有交叉验证的随机森林回归器

Cag*_*nar 1 regression machine-learning random-forest scikit-learn cross-validation

我知道这是一个非常经典的问题,可能会在本论坛中多次回答,但是我找不到任何明确的答案从头开始清楚地解释这一点。

首先,我的数据集 my_data 有 4 个变量,例如 my_data = variable1、variable2、variable3、target_variable

所以,让我们来解决我的问题。我将解释我的所有步骤,并就我遇到的问题寻求您的帮助:

# STEP1 : split my_data into [predictors] and [targets]

predictors = my_data[[
'variable1',
'variable2',
'variable3'
]]


targets = my_data.target_variable

# STEP2 : import the required libraries

from sklearn import cross_validation
from sklearn.ensemble import RandomForestRegressor

#STEP3 : define a simple Random Forest model attirbutes

model = RandomForestClassifier(n_estimators=100)


#STEP4 : Simple K-Fold cross validation. 3 folds.

cv = cross_validation.KFold(len(my_data), n_folds=3,  random_state=30)

# STEP 5
Run Code Online (Sandbox Code Playgroud)

在这一步,我想根据训练数据集拟合我的模型,然后在测试数据集上使用该模型并预测测试目标。我还想计算所需的统计数据,例如 MSE、r2 等,以了解我的模型的性能。

如果有人帮助我了解 Step5 的一些基本代码行,我将不胜感激。

Viv*_*mar 6

首先,您使用的是已弃用cross-validation的 scikit 库包。新包名为model_selection. 所以我在这个答案中使用了它。

其次,您正在导入RandomForestRegressor,但RandomForestClassifier在代码中定义。我选择RandomForestRegressor这里,因为您想要的指标(MSE、R2 等)仅针对回归问题而不是分类定义。

有多种方法可以做你想做的事。我假设由于您在这里尝试使用 KFold 交叉验证,因此您希望使用每个折叠的遗漏数据作为测试折叠。为了做到这一点,我们可以这样做:

predictors = my_data[[
'variable1',
'variable2',
'variable3'
]]


targets = my_data.target_variable

from sklearn import model_selection
from sklearn.ensemble import RandomForestRegressor
from sklearn import metrics

model = RandomForestRegressor(n_estimators=100)

cv = model_selection.KFold(n_splits=3)

for train_index, test_index in kf.split(predictors):
    print("TRAIN:", train_index, "TEST:", test_index)
    X_train, X_test = predictors[train_index], predictors[test_index]
    y_train, y_test = targets[train_index], targets[test_index]

    # For training, fit() is used
    model.fit(X_train, y_train)

    # Default metric is R2 for regression, which can be accessed by score()
    model.score(X_test, y_test)
 
    # For other metrics, we need the predictions of the model
    y_pred = model.predict(X_test)

    metrics.mean_squared_error(y_test, y_pred)
    metrics.r2_score(y_test, y_pred)
Run Code Online (Sandbox Code Playgroud)

对于所有这些,文档是您最好的朋友。scikit-learn 文档是我见过的最好的文档之一。以下链接可能会帮助您更多地了解它们: