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 的一些基本代码行,我将不胜感激。
首先,您使用的是已弃用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 文档是我见过的最好的文档之一。以下链接可能会帮助您更多地了解它们: