Machine learning 为什么使用LGB时10倍交叉验证比1倍拟合更快?

Machine learning 为什么使用LGB时10倍交叉验证比1倍拟合更快?,machine-learning,scikit-learn,cross-validation,model-fitting,lightgbm,Machine Learning,Scikit Learn,Cross Validation,Model Fitting,Lightgbm,我使用LGB来处理机器学习任务。但我发现,当我使用sklearn APIcross_val_score并设置cv=10时,时间成本比单次拟合要低。我使用train\u test\u split分割数据集,然后在训练集上安装LGBC分类器。后者的时间成本比前者高很多,为什么 对不起,我的英语不好 环境:Python 3.5、scikit learn 0.20.3、lightgbm 2.2.3 至强CPU E5-2650 v4 内存128GB X=列车方向下降(['uId','age'],轴=1)

我使用LGB来处理机器学习任务。但我发现,当我使用sklearn API
cross_val_score
并设置
cv=10
时,时间成本比单次拟合要低。我使用
train\u test\u split
分割数据集,然后在训练集上安装LGBC分类器。后者的时间成本比前者高很多,为什么

对不起,我的英语不好

环境:Python 3.5、scikit learn 0.20.3、lightgbm 2.2.3 至强CPU E5-2650 v4 内存128GB

X=列车方向下降(['uId','age'],轴=1)
Y=列车方向位置[:,“年龄”]
X_测试=测试方向下降(['uId'],轴=1)
X_列,X_val,Y_列,Y_val=列测试分割(X,Y,测试尺寸=0.1,
分层=Y)
# (1809000, 12) (1809000,) (201000, 12) (201000,) (502500, 12)
打印(X_train.shape,Y_train.shape,X_val.shape,Y_val.shape,X_test.shape)
从lightgbm导入LGBMClassifier
从sklearn.preprocessing导入标签编码器
从sklearn.model_选择导入交叉值_分数
从sklearn.metrics导入准确性\u分数
导入时间
lgb=LGBMClassifier(n_作业=-1)
tic=time.time()
分数=交叉分数(lgb,X,Y,
得分=‘准确度’,cv=10,n_作业=-1)
toc=时间。时间()
# 0.3738402985074627 0.0009231167322574765 300.1487271785736
打印(np.平均值(分数)、np.标准值(分数)、toc tic)
tic=time.time()
lgb.fit(X_系列、Y_系列)
toc=时间。时间()
#0.3751492537313433472.1763586997986(远远超过300)
打印(准确度评分(Y值,lgb.预测(X值)),toc tic)

对不起,我找到了答案。在LightGBM的文档中写到:“为了获得最佳速度,请将其设置为实际CPU内核的数量,而不是线程的数量”。所以设置
n\u jobs=-1
不是最好的选择。

对不起,我找到了答案。在LightGBM的文档中写到:“为了获得最佳速度,请将其设置为实际CPU内核的数量,而不是线程的数量”。因此,设置
n\u jobs=-1
并不是最佳选择。

您对分类器和
cross\u val\u score
都使用
n\u jobs=-1
,这将使用所有核心,无论您是否进行交叉验证。运行完全相同的代码,但这次设置
n\u jobs=None
,并查看性能。您正在使用
n_jobs=-1
用于分类器和
cross_val_score
,无论是否进行交叉验证,都将使用所有核心。运行完全相同的代码,但这次设置
n_jobs=None
并查看性能。