15、随机森林的OOB

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了15、随机森林的OOB相关的知识,希望对你有一定的参考价值。

参考技术A 15、随机森林的OOB

import matplotlib.pyplot as plt

from collections import OrderedDict

from sklearn.datasets import make_classification

from sklearn.ensemble import RandomForestClassifier

plt.rcParams['font.sans-serif'] = ['SimHei']

plt.rcParams['axes.unicode_minus'] = False

RANDOM_STATE = 123

# 生成二进制分类数据集。

X, y = make_classification(n_samples=500, n_features=25,

                          n_clusters_per_class=1, n_informative=15,

                          random_state=RANDOM_STATE)

ensemble_clfs = [

    ("RandomForestClassifier, max_features='sqrt'",

        RandomForestClassifier(warm_start=True, oob_score=True,

                              max_features="sqrt",

                              random_state=RANDOM_STATE)),

    ("RandomForestClassifier, max_features='log2'",

        RandomForestClassifier(warm_start=True, max_features='log2',

                              oob_score=True,

                              random_state=RANDOM_STATE)),

    ("RandomForestClassifier, max_features=None",

        RandomForestClassifier(warm_start=True, max_features=None,

                              oob_score=True,

                              random_state=RANDOM_STATE))

]

# 将分类器名称映射到(<N_Estimators>,<Error Rate>)对的列表

error_rate = OrderedDict((label, []) for label, _ in ensemble_clfs)

# 探索的'N_Estimators'值范围

min_estimators = 15

max_estimators = 175

for label, clf in ensemble_clfs:

    for i in range(min_estimators, max_estimators + 1):

        clf.set_params(n_estimators=i)

        clf.fit(X, y)

        # 记录每个'N_Estimators=I'设置的OOB错误。

        oob_error = 1 - clf.oob_score_

        error_rate[label].append((i, oob_error))

# 生成“OOB错误率”与“N_Estimators”的关系图。

for label, clf_err in error_rate.items():

    xs, ys = zip(*clf_err)

    plt.plot(xs, ys, label=label)

plt.xlim(min_estimators, max_estimators)

plt.xlabel("n_estimators")

plt.ylabel("OOB error rate")

plt.legend(loc="upper right")

plt.title('随机森林的OOB')

plt.show()

使用 Python 的随机森林的高 OOB 错误

【中文标题】使用 Python 的随机森林的高 OOB 错误【英文标题】:High OOB error for Random forest with Python 【发布时间】:2018-09-15 19:39:44 【问题描述】:

我正在尝试在 Python 中使用来自 scikit learn 的随机森林分类器来预测股票走势。我的数据集有 8 个特征和 1201 条记录。但是在拟合模型并使用它进行预测之后,它出现了 100% 的准确率和 100% 的 OOB 错误。我将 n_estimators 从 100 修改为一个较小的值,但 OOB 错误刚刚下降了几个 %。这是我的代码:

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
import numpy as np
import pandas as pd

#File reading
df = pd.read_csv('700.csv')
df.drop(df.columns[0],1,inplace=True)
target = df.iloc[:,8]
print(target)

#train test split
X_train, X_test, y_train, y_test = train_test_split(df, target, test_size=0.3)

#model fit
clf = RandomForestClassifier(n_estimators=100, criterion='gini',oob_score= True)
clf.fit(X_train,y_train)

pred = clf.predict(X_test)
accuaracy = accuracy_score(y_test,pred)
print(clf.oob_score_)
print(accuaracy)

如何修改代码以减少 oob 错误?谢谢。

【问题讨论】:

oob_score_ 是得分,而不是错误。越高越好。 100% 准确率和 100% oob_score 对我来说似乎很好。您确定要减少它,还是在谈论其他事情? 【参考方案1】:

如果您想检查错误,请使用/修改您的代码,如下所示:

oob_error = 1 - clf.oob_score_

【讨论】:

以上是关于15、随机森林的OOB的主要内容,如果未能解决你的问题,请参考以下文章

随机森林的oob估计是怎样选取数据的

随机森林的高OOB错误率

使用 Python 的随机森林的高 OOB 错误

sklearn 随机森林:.oob_score_ 太低?

随机森林之oob的计算过程

python 随机森林中的OOB