Python 为什么LightGBM的R2分数为零?
R2得分为零,那么为什么在LGBM回归器中获得零值呢?Python 为什么LightGBM的R2分数为零?,python,lightgbm,Python,Lightgbm,R2得分为零,那么为什么在LGBM回归器中获得零值呢? 我没有分割我的数据序列测试,因为我的数据集很小。由于未包含“Prali Marble.xlsx”的内容,因此此示例不完全可复制 但是,我可以用下面的代码重现一个0.0 R2,我认为它与您的示例非常匹配。与您的代码类似,这在具有单个特征的数据集上训练LightGBM回归模型 此代码在Python 3.8上使用lightgbm3.1.1 将numpy导入为np 作为pd进口熊猫 将lightgbm作为lgb导入 从sklearn.metrics
我没有分割我的数据序列测试,因为我的数据集很小。由于未包含
“Prali Marble.xlsx”
的内容,因此此示例不完全可复制
但是,我可以用下面的代码重现一个0.0 R2,我认为它与您的示例非常匹配。与您的代码类似,这在具有单个特征的数据集上训练LightGBM回归模型
此代码在Python 3.8上使用lightgbm
3.1.1
将numpy导入为np
作为pd进口熊猫
将lightgbm作为lgb导入
从sklearn.metrics导入r2_分数,均方误差为MSE
X=pd.DataFrame({
“feat1”:np.append(np.repeat(0.599),np.one(1))
})
Y=np.随机.随机(100,)
lgb_r=lgb.LGBMRegressor()
lgb_r.配合(X,Y)
y_pred=lgb_r.predict(X)
打印(“LGBM R2_分数:”,R2_分数(Y,lgb_r.预测(X)))
LGBM R2_分数:0.0
在这种情况下,R2为0,因为模型只是预测Y
的平均值。通过检查模型的结构可以看到这一点
lgb_r.booster_.trees_to_dataframe()
这将返回一行数据帧,这发生在LightGBM不添加任何树时
LightGBM具有一些用于防止过度装配的参数。这里有两个相关问题:
- (默认值=20)
- (默认值=0.001)
将numpy导入为np
作为pd进口熊猫
将lightgbm作为lgb导入
从sklearn.metrics导入r2_分数
X=pd.DataFrame({
“feat1”:np.append(np.repeat(0.599),np.one(1))
})
Y=np.随机.随机(100,)
lgb_r=lgb.lgbm回归器(
叶子中的最小数据=0,
叶中的最小和=0.0
)
lgb_r.配合(X,Y)
y_pred=lgb_r.predict(X)
打印(“LGBM R2_分数:”,R2_分数(Y,lgb_r.预测(X)))
谢谢你的回复。嗨@JamesLamb,谢谢你,伙计!!我已经试过了,我得到了R2_分数:0.78很多感谢,很高兴它有帮助!
import numpy as np
import pandas as pd
import lightgbm
from sklearn.metrics import r2_score,mean_squared_error as MSE
dataset = pd.read_excel("Prali Marble.xlsx")
X = dataset.iloc[:,2].values.reshape((-1, 1))
Y = dataset.iloc[:,3].values
from lightgbm import LGBMRegressor
lgb_r = LGBMRegressor()
lgb_r.fit(X,Y)
y_pred = lgb_r.predict(X)
print("LGBM R2_SCORE:", r2_score(Y, lgb_r.predict(X)))