Python 在循环中拟合集合回归器会生成重复值
我正试图使用一个集合回归器来预测基于两个材料测量的产量。我的数据是年度数据,可以追溯到1965年。(由于这是针对使用敏感数据的工作项目而使用的,因此删除了一些细节并使用了随机数据。) 我已经将代码精简到最低限度,但我仍然看到了这个问题:Python 在循环中拟合集合回归器会生成重复值,python,regression,boosting,Python,Regression,Boosting,我正试图使用一个集合回归器来预测基于两个材料测量的产量。我的数据是年度数据,可以追溯到1965年。(由于这是针对使用敏感数据的工作项目而使用的,因此删除了一些细节并使用了随机数据。) 我已经将代码精简到最低限度,但我仍然看到了这个问题: import pandas as pd import numpy as np from sklearn.ensemble import GradientBoostingRegressor, RandomForestRegressor from xgboost.
import pandas as pd
import numpy as np
from sklearn.ensemble import GradientBoostingRegressor, RandomForestRegressor
from xgboost.sklearn import XGBRegressor
X_past = pd.DataFrame(index = range(1965, 2020), data = dict(
A = np.random.randint(4170, 19091, size = 55),
B = np.random.randint(74, 337, size = 55)
))
X_future = pd.DataFrame(index = range(2020, 2023), data = dict(
A = np.random.randint(4170, 19091, size = 3),
B = np.random.randint(74, 337, size = 3)
))
y_past = pd.DataFrame(index = range(1965, 2020), data = dict(
C = np.random.randint(12163, 42580, size = 55)
))
predictions = None
predictions = pd.DataFrame()
i = 0
while i < 10:
i += 1
reg = None
y_pred = None
X = X_past.values
y = y_past.values.ravel()
#reg = RandomForestRegressor(n_estimators = 300)
reg = GradientBoostingRegressor(n_estimators = 300)
#reg = XGBRegressor(n_estimators = 640, silent = True)
reg.fit(X, y)
y_pred = reg.predict(np.array(X_future))
predictions = predictions.append(pd.Series(y_pred), ignore_index = True,)
predictions.columns = [2020, 2021, 2022]
predictions['Row-wise Duplicates'] = (predictions[2021] == predictions[2022])
predictions
将熊猫作为pd导入
将numpy作为np导入
从sklearn.employ导入GradientBoostingRegressor,RandomForestRegressor
从xgboost.sklearn导入XGBRegressor
X_过去=局部数据帧(索引=范围(19652020),数据=指令(
A=np.random.randint(417019091,size=55),
B=np.random.randint(74337,大小=55)
))
X_future=pd.DataFrame(指数=范围(2020年、2023年),data=dict(
A=np.random.randint(417019091,大小=3),
B=np.random.randint(74337,大小=3)
))
y_过去=局部数据帧(索引=范围(19652020),数据=指令(
C=np.random.randint(1216342580,大小=55)
))
预测=无
预测=pd.DataFrame()
i=0
当我<10时:
i+=1
reg=无
y_pred=无
X=X_过去的值
y=y_pass.values.ravel()
#reg=随机森林回归器(n_估计值=300)
reg=梯度增强回归器(n_估计值=300)
#reg=XGBRegressor(n_估计值=640,静默值=True)
注册适合度(X,y)
y_pred=reg.predict(np.array(X_future))
预测=预测.append(pd.Series(y\u pred),ignore\u index=True,)
expections.columns=[2020、2021、2022]
预测['Row-wise Duplicates']=(预测[2021]==预测[2022])
预言
产生如下结果:
2020
2021
2022
行复制
13211.008045
29624.483861
34110.523735
假的
13211.008045
29624.483861
33462.196606
假的
13211.008045
29624.483861
33867.781932
假的
13211.008045
29624.483861
33999.203849
假的
13211.008045
29624.483861
33947.950436
假的
13211.008045
29624.483861
33550.338744
假的
13211.008045
29624.483861
34079.297200
假的
13211.008045
29624.483861
33924.349324
假的
13211.008045
29624.483861
33195.847833
假的
13211.008045
29624.483861
33922.391200
假的
您使用的算法,以及您使用的参数,没有随机的内部元素。因此,给它相同的训练集和测试集(就像你在代码中做的那样)将产生相同的结果 您可以使用值小于
1
的子样本
参数,使其使用不同的随机子样本来训练每个基础学习者(参见文档)
因此,如果您将线路替换为以下线路:
reg = GradientBoostingRegressor(n_estimators = 300, subsample = 0.9)
该算法将使用90%的随机数据子集来训练每个学习者,每次调用都会得到不同的结果。如果将其与
random_state
参数结合使用,您仍然可以使结果重现。您至少应该提到从何处导入GradientBoostingRegressionor
(我想是scikit learn,但我必须猜测吗?:)哦,哇。。。是的,我要学习。XGBoostingRegressionor来自xgboost。您在每次迭代中为算法提供相同的训练输入和相同的测试输入,为什么您期望不同的输出?这是有道理的,但为什么有时每行的输出不同呢?此外,为什么它有时会重复2021和2022列的结果?这些应该从三个不同的特征数组中预测出来。我不知道,根据你问题的输入,它会产生相同的行。但是我只运行了几次,你确定在多次运行脚本时不会产生不同的行吗?因为这是由您创建的随机输入引起的。。。抱歉,如果它是琐碎的,但有时很难看到简单的东西:)