何时使用随机森林

数据挖掘 Python 回归 随机森林 逻辑回归
2021-10-15 01:39:42

我了解随机森林模型可用于分类和回归情况。

是否有更具体的标准来确定随机森林模型在哪里比普通回归(线性、套索等)更好地估计值或分类的逻辑回归?

3个回答

在前面的答案中添加一些额外的一般要点:

  • 作为一种决策树算法,与其他算法相比,随机森林受异常值的影响较小。关于它的一个很好的讨论是here
  • 它们也不会对数据的潜在分布做出任何假设,并且可以隐式处理特征中的共线性,因为如果您有两个高度相似的特征,则从其中一个特征上拆分获得的信息也会耗尽预测能力另一个特点。在这里阅读
  • 随机森林可用于特征选择,因为如果你用无用的特征拟合算法,算法根本不会使用它们来分割数据。可以提取“最佳”特征(可能是一个特征被用来分割数据的总次数,或者杂质的平均减少等)。但是,就像我上面的观点一样,您不能过多地了解特征的相对重要性,尤其是当您拥有高度相关的特征时。
  • 我认为是否使用 RF 或其他算法的最大决定因素可能是您是否想更多地了解特征与目标的关系以及它们的影响程度。如果这对您的用例很重要(例如,您想知道一个特征是否与目标具有正或负关系以及它对结果的影响程度),那么其他像 Logistic Regression 和 Lasso 是更好的选择。
  • 此外,如果您希望您的模型推断超出原始训练数据范围的数据的预测,那么随机森林将不是一个好的选择。

希望这可以帮助!

请考虑以下几点:

1) Random forest algorithm can be used for both classifications and regression task.
2) It typically provides very high accuracy.
3) Random forest classifier will handle the missing values and maintain the accuracy of a large proportion of data.
4) If there are more trees, it usually won’t allow overfitting trees in the model.
5) It has the power to handle a large data set with high dimensionality

最终,您选择使用哪种算法取决于您自己。你肯定希望算法的预测能力非常高(超过 90%)。有时其他算法会击败 RF 算法,但我发现 RF 通常非常好!通常,我从 RF 开始,如果我看到不错的性能,我就完成了。我相信,在大约 80% 的时间里,我已经完成了。如果您没有从 RF 算法中获得好的结果,请测试其他一些算法。

这很好地比较了几种不同的算法。

import pandas
import matplotlib.pyplot as plt
from sklearn import model_selection
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC
# load dataset
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = pandas.read_csv(url, names=names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
# prepare configuration for cross validation test harness
seed = 7
# prepare models
models = []
models.append(('LR', LogisticRegression()))
models.append(('LDA', LinearDiscriminantAnalysis()))
models.append(('KNN', KNeighborsClassifier()))
models.append(('CART', DecisionTreeClassifier()))
models.append(('NB', GaussianNB()))
models.append(('SVM', SVC()))
# evaluate each model in turn
results = []
names = []
scoring = 'accuracy'
for name, model in models:
    kfold = model_selection.KFold(n_splits=10, random_state=seed)
    cv_results = model_selection.cross_val_score(model, X, Y, cv=kfold, scoring=scoring)
    results.append(cv_results)
    names.append(name)
    msg = "%s: %f (%f)" % (name, cv_results.mean(), cv_results.std())
    print(msg)
# boxplot algorithm comparison
fig = plt.figure()
fig.suptitle('Algorithm Comparison')
ax = fig.add_subplot(111)
plt.boxplot(results)
ax.set_xticklabels(names)
plt.show()

参考:如何将 Python 中的机器学习算法与 scikit-learn 进行比较

这只是一个一般性的答案,但如果它有帮助:

  • 一般来说,决策树往往是“健壮的”,因为它们几乎可以处理任何类型的数据,特别是在线性或逻辑回归等其他方法可能遇到困难的情况下。例如,它们在异构特征的情况下没有问题,例如在混合分类和数字特征时,或者混合完全不同的值范围等时。

  • 随机森林将集成学习添加到组合中,使决策树更加健壮,并且特别适合处理噪声数据,而标准回归方法很容易被噪声混淆。

直觉上,我将决策树(包括随机森林)视为监督学习的“瑞士军刀”:高效、通用、易于使用。