【问题标题】:Bagging using random forest classifier in sklearn在 sklearn 中使用随机森林分类器进行装袋
【发布时间】:2025-12-06 01:30:01
【问题描述】:

我建立了一个随机森林,我想找到袋外分数。但我的袋外分数是 1.0,但应该小于 1。我的样本大小由 20000 个元素组成。这里是python代码。请告诉要完成的更改。这里X是一个numpy数据集数组,Z包含真正的标签。

import csv

import numpy as np

from sklearn import preprocessing

from sklearn import cross_validation

from sklearn.ensemble import RandomForestClassifier

with open('C:\Users\Harsh Bhandari\Desktop\letter.csv') as f:

reader = csv.reader(f, delimiter='\t')

    data = [(col1, int(col2), int(col3), int(col4),int(col5),int(col6),int(col7),int(col8),int(col9),int(col10),int(col11),int(col12),int(col13),int(col14),int(col15),int(col16),int(col17))

                for col1,col2,col3,col4,col5,col6,col7,col8,col9,col10,col11,col12,col13,col14,col15,col16,col17 in reader]

X=[]

Y=[]

i=0

while i<20000:

        t=data[i][1:]

        X.append(t)

        t=data[i][0]

        Y.append(t)

        i=1+i

X=np.asarray(X)

Y=np.asarray(Y)

le = preprocessing.LabelEncoder()

Z=le.fit_transform(Y)

clf = RandomForestClassifier(n_estimators=100,oob_score=True)

clf=clf.fit(X,Z)

a=clf.predict(X)

scores=clf.score(X,a)

print scores

【问题讨论】:

    标签: random-forest


    【解决方案1】:

    http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html 在分数中,您发送测试数据及其实际标签,在这里您传递与预测匹配的预测标签本身,因此您是 获得 1.0 分。

    【讨论】:

      【解决方案2】:

      我在这里看到了几件事。

      你在做 clf.score(X, a) 但你应该做 clf.score(X, Z) 其中 Z 是 X 的真实标签

      score 参数定义为这样 clf.score(X, true_labels_for_X) 相反,您将预测的值设置为 y_true ,这没有意义。因为 Sklearn 已经在 X 上运行 predict,所以你不需要通过 a.

      另外,你可以通过做找到 oobscore 打印 clf.oob_score_

      【讨论】: