我对随机森林的工作原理知之甚少。通常在分类中,我可以将训练数据拟合到随机森林分类器中,并要求预测测试数据。
目前我正在处理提供给我的巨大数据。这是数据集的顶部行,大约有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
没有给出测试数据。所以我想让随机森林预测整个数据集的生存率,并将其与实际值进行比较(更像是检查准确性分数)。
因此,我所做的是将我的完整数据集分为两部分;一个有特征,另一个预测(幸存)。Features由除幸存列之外的所有列组成,predict由幸存列组成。
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
)进行比较并给出预测分数,还是基于提供的训练数据随机创建训练和测试数据并比较其后面生成的测试数据的准确性?
更准确地说,在计算准确度得分时,它预测的是整个数据集的生存率,还是只是随机的部分数据集?
不知怎么的,我看不出你试图将数据集拆分为训练和测试
dfWithTestFeature = df['survived']
dfWithTestFeature只包含幸存的列,即标签。
dfWithTrainFeatures = dfCopy.drop('survived', 1)
dfWithTrainFeatures包含所有功能(类别、性别、年龄等)。
现在跳转到代码,
rfClf = RandomForestClassifier(n_estimators=100, max_features=10)
上面的一行是创建随机森林分类器,n_estimator是树的深度,这个数字越大就会导致数据过拟合。
rfClf = rfClf.fit(dfWithTrainFeatures, dfWithTestFeature)
上面一行是训练过程,.fit()
需要两个参数,第一个是特征,第二个是特征的标签(或目标值,即"存活"列中的值)。
scoreForRf = rfClf.score(dfWithTrainFeatures, dfWithTestFeature)
.score()
需要2个参数,第一个是特征,第二个是标签。这是为了使用我们使用.fit()
函数创建的模型来预测第一个参数中的特征,而第二个参数将是验证值。
据我所见,您使用相同的数据来训练和测试模型,这并不好。
更准确地说,在计算准确度得分时,它预测的是整个数据集的生存率,还是只是随机的部分数据集?
您使用了所有数据来测试模型。
我可以使用交叉验证,但问题是我必须对随机林进行验证吗?此外,随机森林的交叉验证似乎是非常缓慢的
当然,您需要使用验证来测试您的模型。创建混淆矩阵,计算准确度和召回率,而不仅仅取决于准确度。
如果您认为模型运行得太慢,那么请减小n_esimators值。