如何从sci-kit学习解释随机森林分类器?

时间:2017-01-07 10:14:51

标签: python machine-learning scikit-learn random-forest ensemble-learning

我对随机森林的运作方式知之甚少。 通常在分类中,我可以将列车数据拟合到随机森林分类器中并要求预测测试数据。

目前我正在研究提供给我的巨大数据。这是数据集的顶行,有1300(大约)行。

survived pclass sex age sibsp parch fare embarked 0 1 1 female 29 0 0 211.3375 S 1 1 1 male 0.9167 1 2 151.55 S 2 0 1 female 2 1 2 151.55 S 3 0 1 male 30 1 2 151.55 S 4 0 1 female 25 1 2 151.55 S 5 1 1 male 48 0 0 26.55 S 6 1 1 female 63 1 0 77.9583 S 7 0 1 male 39 0 0 0 S 8 1 1 female 53 2 0 51.4792 S 9 0 1 male 71 0 0 49.5042 C 10 0 1 male 47 1 0 227.525 C 11 1 1 female 18 1 0 227.525 C 12 1 1 female 24 0 0 69.3 C 13 1 1 female 26 0 0 78.85 S

没有给出测试数据。因此,我希望随机森林预测整个数据集的生存率,并将其与实际值进行比较(更像是检查准确度得分)。

所以我所做的就是将我的完整数据集分成两部分;一个有特征,另一个有预测(幸存)。 功能包括除了幸存者以外的所有列,并且包含幸存列。

dfFeatures = df['survived']
dfTarget = dfCopy.drop('survived', 1)

注意:df是整个数据集。

以下是检查randomforest得分的代码

rfClf = RandomForestClassifier(n_estimators=100, max_features=10)
rfClf = rfClf.fit(dfFeatures, dfTarget)
scoreForRf = rfClf.score(dfFeatures, dfTarget)

我得到的分数输出

The accuracy score for random forest is :  0.983193277311

我发现很难理解上面代码中代码背后发生的事情。

是否,它根据其他功能(dfFeatures)预测所有元组的生存,并将其与测试数据(dfTarget)进行比较并给出预测分数或随机创建训练和测试数据根据提供的列车数据,比较它产生的测试数据的准确性?

更准确地说,在计算准确度分数时,它是否预测整个数据集或随机部分数据集的存活率?

1 个答案:

答案 0 :(得分:2)

不知怎的,我没有看到你试图将数据集分成火车和测试

dfWithTestFeature = df['survived']

dfWithTestFeature仅包含幸存的列,即标签。

dfWithTrainFeatures = dfCopy.drop('survived', 1)

dfWithTrainFeatures包含所有功能(pclass,性别,年龄等)。

现在跳转到代码,

rfClf = RandomForestClassifier(n_estimators=100, max_features=10)

上面的行是创建随机森林分类器,n_estimator是树的深度,更高的数量会导致数据过度拟合。

rfClf = rfClf.fit(dfWithTrainFeatures, dfWithTestFeature) 
上面的

行是训练过程,.fit()需要2个参数,首先是要素,第二个是来自要素的标签(或目标值,即'幸存'列中的值)。

scoreForRf = rfClf.score(dfWithTrainFeatures, dfWithTestFeature)

.score()需要2个参数,第一个是功能,第二个是标签。 这是为了使用我们使用.fit()函数创建的模型来预测第一个参数中的要素,而第二个参数将是验证值。

从我看到的,你使用相同的数据来训练和测试不好的模型。

  

更准确地说,在计算准确度分数时,它是否预测整个数据集或随机部分数据集的存活率?

您使用了所有数据来测试模型。

  

我可以使用交叉验证,但是对于随机森林我还有问题吗?对随机森林的交叉验证似乎也很慢

当然,您需要使用验证来测试您的模型。创建混淆矩阵,计算精度和召回,不仅仅取决于准确性。

如果您认为模型运行速度太慢,则降低n_esimators值。