Scikit learn sklearn随机森林样本的拟合权重()

Scikit learn sklearn随机森林样本的拟合权重(),scikit-learn,random-forest,Scikit Learn,Random Forest,在sklearn的RF fit函数(或most fit()函数)中,可以传入“sample_weight”参数来称量不同的点。默认情况下,所有点的权重相等,如果我传入一个1s的数组作为样本权重,则它确实匹配原始模型,而不带参数 但是如果我传入一个0.1s或1/len(数组)的数组作为样本权重,它会改变模型(现在预测不同),尽管点的权重仍然相等。这是令人不安的,因为减肥似乎很重要。那么,什么是适当的缩放方式,以便我有一个独特的解决方案 示例如下: import numpy as np from s

在sklearn的RF fit函数(或most fit()函数)中,可以传入“sample_weight”参数来称量不同的点。默认情况下,所有点的权重相等,如果我传入一个1s的数组作为样本权重,则它确实匹配原始模型,而不带参数

但是如果我传入一个0.1s或1/len(数组)的数组作为样本权重,它会改变模型(现在预测不同),尽管点的权重仍然相等。这是令人不安的,因为减肥似乎很重要。那么,什么是适当的缩放方式,以便我有一个独特的解决方案

示例如下:

import numpy as np
from sklearn import datasets
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestRegressor
boston = datasets.load_boston()

X = boston.data
y = boston.target

reg = RandomForestRegressor(random_state=1, n_estimators=10)
reg.fit(X, y)

reg_eq = RandomForestRegressor(random_state=1, n_estimators=10)
reg_eq.fit(X, y, sample_weight=np.full(len(y),1))

reg_eq_bad = RandomForestRegressor(random_state=1, n_estimators=10)
reg_eq_bad.fit(X, y, sample_weight=np.full(len(y),0.1))


xt = X[:20]
print(reg.predict(xt))
print(reg_eq.predict(xt))
print(reg_eq_bad.predict(xt))

np.testing.assert_array_almost_equal(reg.predict(xt),reg_eq.predict(xt))
np.testing.assert_array_almost_equal(reg.predict(xt),reg_eq_bad.predict(xt)) # 75% mismatch

如果你用一个简单的决策树回归器替换随机森林回归器,你会发现预测值实际上是相等的

但是,对于随机森林,如果您使用
样本权重
参数欺骗输入数据,则由于这些模型引入的随机性/不确定性,无法确保预测保持不变


尽管如此,如果模型按其应有的方式工作,差异不应显著……

如果您用一个简单的
决策树回归器替换
随机森林回归器
,您将发现预测值确实相等

但是,对于随机森林,如果您使用
样本权重
参数欺骗输入数据,则由于这些模型引入的随机性/不确定性,无法确保预测保持不变


尽管如此,如果模型按其应有的方式运行,差异应该不会太大。…

问题可能真的与a有关,通过修改文档中的一些示例,这应该很简单。问题可能真的与a有关,通过修改文档中的一些示例,这应该很简单。由于“random_state”参数,您提到的随机性实际上是固定的。因此,这不应该成为分歧的根源。否则,为什么reg_eq会与原始匹配?嗯,是的,你可能是对的……我尝试使用带有参数的
discisiontreeregressor
,因为它是
随机森林回归器实际使用的拆分器,结果表明,所有预测值在不同的
样本权重下都是相同的(正如您所期望的)。因此,
random_state
在树的并行处理过程中传播不良,或者我遗漏了什么。您提到的随机性实际上是由于“random_state”参数而固定的。因此,这不应该成为分歧的根源。否则,为什么reg_eq会与原始匹配?嗯,是的,你可能是对的……我尝试使用带有参数的
discisiontreeregressor
,因为它是
随机森林回归器实际使用的拆分器,结果表明,所有预测值在不同的
样本权重下都是相同的(正如您所期望的)。因此,要么是树的并行处理过程中,
random_状态
传播不好,要么我错过了一些东西。