使用xgboost以及lgbm

xgboost:
这里列举的代码,是一个对10分类结果进行预测,max_depth参数控制树的深度,objective控制的是训练的目标,multi:softprob即多分类预测概率,num_class为需要分类的类数。
这里输入的x的维度为n40000,输入的y的维度为n1,即y的每一行都是一个数字,0-9,代表所属的10分类
eval_metric这个参数指定的是训练的时候loss的类别。获得结果后,可以用predict方法获得分类的结果(1维标签,0-9),用predict_proba可以获得预测分类的概率(10维,分别代表10分类各自的概率)

from xgboost import XGBClassifier
import pickle
def xgboost(x, y):
    model = XGBClassifier(max_depth=25, objective='multi:softprob', num_class=10,n_estimators=1000)
    x_train, x_test_valid, y_train, y_test_valid = train_test_split(x, y, test_size=0.2, random_state=1)
    model.fit(x_train, y_train, early_stopping_rounds=10, eval_set=[(x_train, y_train), (x_test_valid, y_test_valid)],
              eval_metric="mlogloss", verbose=True)

    # make prediction
    preds = model.predict(x_test_valid)
    print(preds[0:10])
    prob_pre = model.predict_proba(x_test_valid)
    print(prob_pre[0:10])
    test_accuracy = accuracy_score(y_test_valid, preds)
    print("Test Accuracy: %.2f%%" % (test_accuracy * 100.0))
    if test_accuracy > 0.999:
        #保存代码
        pickle.dump(model, open("xgboostmodel2.pickle.dat", "wb"))

lgbm:和xbgoost的使用比较类似,需要注意的是在使用lgbm进行多分类时,使用predict方法输出的就是分类的预测概率,以0-9的10分类为例,lgbm的predict方法输出的就是10分类的预测概率,因此lgbm没有predict_proba方法,需要自己写函数将预测的结果转化成标签。此外,同样是多分类预测概率,lgbm里的objective

import pickle
from lightgbm import LGBMRegressor

def turn_prob_to_label(prob_data):
    # 将检测概率转化成一维数字标签
    prob_data = list(prob_data)
    result = []
    for each_data in prob_data:
        max_loc = list(each_data).index(max(list(each_data)))
        result.append(str(max_loc))
    return result


def lightgbm(x, y):
    model = LGBMRegressor(max_depth=30, objective='multiclass', num_class=10,n_estimators=1000)
    x_train, x_test_valid, y_train, y_test_valid = train_test_split(x, y, test_size=0.2, random_state=1)
    model.fit(x_train, y_train, early_stopping_rounds=30, eval_set=[(x_train, y_train), (x_test_valid, y_test_valid)],
              eval_metric="multi_error", verbose=True)

    preds = model.predict(x_test_valid)
    test_result = np.array(turn_prob_to_label(preds))
    print(test_result[0:10])
    print(y_test_valid[0:10])
    test_accuracy = accuracy_score(y_test_valid, test_result)
    print("Test Accuracy: %.2f%%" % (test_accuracy * 100.0))
    if test_accuracy > 0.999:
        pickle.dump(model, open("lgboostmodel2.pickle.dat", "wb"))
        # loaded_model = pickle.load(open("pima.pickle.dat", "rb"))

在训练完模型后,可以用pickle来保存和读取模型
如果训练效果不佳,可以主动用numpy的shuffle方法来打乱数组(类似于修改字典,不用返回值也能生效)

def shuffleData(data_x, data_y):
    """
    对输入的numpy数组进行手动打乱
    """
    np.random.seed(207)
    np.random.shuffle(data_x)
    np.random.seed(207)
    np.random.shuffle(data_y)

如果想要获取之前过程中的打印历史,可以通过evals_result_的方法来获取

history=self.model.fit(x_train, y_train,
                       eval_set=[(x_train, y_train), (x_test_valid, y_test_valid)],
                       eval_metric="multi_error")
print(history.evals_result_)

在更新后,lightGBM会提示early_stopping_rounds要被弃用了,要求换成callbacks传参的形式:

from lightgbm import log_evaluation, early_stopping
callbacks = [log_evaluation(period=100), early_stopping(stopping_rounds=30)]

其中period=100指每迭代100次打印一次log;stopping_rounds=30指如果验证集的误差在30次迭代内没有降低,则停止迭代。

部分参数选项

metric:
用于指定评估指标,可以传递各种评估方法组成的list。常用的评估指标如下:
‘mae’,用于回归任务,效果与 ‘mean_absolute_error’, ‘l1’ 相同。
‘mse’,用于回归任务,效果与 ‘mean_squared_error’, ‘l2’ 相同。
‘rmse’,用于回归任务,效果与 ‘root_mean_squared_error’, ‘l2_root’ 相同。
‘auc’,用于二分类任务。
‘binary’,用于二分类任务。
‘binary_logloss’,用于二分类任务。
‘binary_error’,用于二分类任务。
‘multiclass’,用于多分类。
‘multi_logloss’, 用于多分类。
‘multi_error’, 用于多分类。
seed / random_state 指定随机数种子


objective:指定目标可选参数如下:
“regression”,使用L2正则项的回归模型(默认值)。
“regression_l1”,使用L1正则项的回归模型。
“mape”,平均绝对百分比误差。
“binary”,二分类。
“multiclass”,多分类。
num_class用于设置多分类问题的类别个数。
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值