catboost cv 初探
怎样用catboost进行cv?
from catboost import cv,Pool
#读取数据集
df_train = pd.read_csv()
x_train = df_train.iloc[:,:-1]
y_train = df_train.iloc[:,-1]
#生成一个Pool结构
#这个结构中定义category的feature,是一个list,这些feature的index
pool = Pool(x_train, y_train, cat_features=[0,1,2,3,4,5,6,7])
#定义训练参数,和其他算法类似,是一个dict结构
params= {'iterations':2000, 'depth':5, 'loss_function':'Logloss','eval_metric':'AUC','learning_rate':0.03}
#关于定义损失函数和评价指标我这里浪费了点儿时间,AUC是评价指标,而GBDT问题求解的目标函数是logloss,那问题来了?可不可以设置一个最大化AUC的目标函数?
#接下来就是直接CV
scores = cv(pool, params, nfold=5, stratified = True)
#这个CV中有参数可以直接设置分层抽样stratified,我以前直接是使用StratifiedKFold,sklearn中的一个函数来得到index的cv分组,不知道这个函数是否支持,可以验证一下,顺便验证这个分层抽样的参数是否有效?
最后得到的AUC普遍偏高,这是因为因变量太不平衡了吗?跟不平衡是无关的啊,因为AUC相当于是好除以好,坏除以坏,还是要在前面(probability很大的时候)就要发现坏人多,这样AUC才高啊,但是如果好人很多的话,比如分五份,每个点都是20/40/60/80/100左右的,只有坏人除以坏人,这部分变动很大,不影响,好人和坏人均分的情况,前面坏人占比虽然不大,但是x轴向右移动也慢,这种AUC依然高,所以不影响还是说明区隔能力很强
from catboost import cv,Pool
#读取数据集
df_train = pd.read_csv()
x_train = df_train.iloc[:,:-1]
y_train = df_train.iloc[:,-1]
#生成一个Pool结构
#这个结构中定义category的feature,是一个list,这些feature的index
pool = Pool(x_train, y_train, cat_features=[0,1,2,3,4,5,6,7])
#定义训练参数,和其他算法类似,是一个dict结构
params= {'iterations':2000, 'depth':5, 'loss_function':'Logloss','eval_metric':'AUC','learning_rate':0.03}
#关于定义损失函数和评价指标我这里浪费了点儿时间,AUC是评价指标,而GBDT问题求解的目标函数是logloss,那问题来了?可不可以设置一个最大化AUC的目标函数?
#接下来就是直接CV
scores = cv(pool, params, nfold=5, stratified = True)
#这个CV中有参数可以直接设置分层抽样stratified,我以前直接是使用StratifiedKFold,sklearn中的一个函数来得到index的cv分组,不知道这个函数是否支持,可以验证一下,顺便验证这个分层抽样的参数是否有效?
最后得到的AUC普遍偏高,这是因为因变量太不平衡了吗?跟不平衡是无关的啊,因为AUC相当于是好除以好,坏除以坏,还是要在前面(probability很大的时候)就要发现坏人多,这样AUC才高啊,但是如果好人很多的话,比如分五份,每个点都是20/40/60/80/100左右的,只有坏人除以坏人,这部分变动很大,不影响,好人和坏人均分的情况,前面坏人占比虽然不大,但是x轴向右移动也慢,这种AUC依然高,所以不影响还是说明区隔能力很强
留言
張貼留言