2

我对随机森林的工作原理知之甚少。通常在分类中,我可以将训练数据放入随机森林分类器并要求预测测试数据。

目前我正在处理提供给我的泰坦尼克号数据。这是数据集的顶部行,有 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 是整个数据集。

这是检查随机森林分数的代码

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产生在后面?

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

4

1 回答 1

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 值。

于 2017-01-07T18:01:19.390 回答