现在的比赛,想要拿到一个好的名次,就一定要进行模型融合,这里总结一下三种基础的模型:
- lightgbm:由于现在的比赛数据越来越大,想要获得一个比较高的预测精度,同时又要减少内存占用以及提升训练速度,lightgbm是一个非常不错的选择,其可达到与xgboost相似的预测效果。
- xgboost:在lightgbm出来之前,是打比赛的不二之选,现在由于需要做模型融合以提高预测精度,所以也需要使用到xgboost。
- ANN:得益于现在的计算机技术的高度发展,以及GPU性能的提高,还有Keras,tensorflow,pytorch等多重工具的使用,人工神经网络也可以作为最后模型融合的子模型之一,可以有效地提升最终的预测结果。

下面附上使用三个函数的Python代码,可以直接运行。(参考:https://blog.csdn.net/meyh0x5vdtk48p2/article/details/78816334)

LGB

  1. def LGB_predict(train_x,train_y,test_x,res,index):
  2. print("LGB test")
  3. clf = lgb.LGBMClassifier(
  4. boosting_type='gbdt', num_leaves=31, reg_alpha=0.0, reg_lambda=1,
  5. max_depth=-1, n_estimators=5000, objective='binary',
  6. subsample=0.7, colsample_bytree=0.7, subsample_freq=1,
  7. learning_rate=0.05, min_child_weight=50, random_state=2018, n_jobs=-1
  8. )
  9. clf.fit(train_x, train_y, eval_set=[(train_x, train_y)], eval_metric='auc',early_stopping_rounds=100)
  10. res['score'+str(index)] = clf.predict_proba(test_x)[:,1]
  11. res['score'+str(index)] = res['score'+str(index)].apply(lambda x: float('%.6f' % x))
  12. print(str(index)+' predict finish!')
  13. gc.collect()
  14. res=res.reset_index(drop=True)
  15. return res['score'+str(index)]

XGB

  1. def XGB_predict(train_x,train_y,val_X,val_Y,test_x,res):
  2. print("XGB test")
  3. # create dataset for lightgbm
  4.  
  5. xgb_val = xgb.DMatrix(val_X, label=val_Y)
  6. xgb_train = xgb.DMatrix(X_train, label=y_train)
  7. xgb_test = xgb.DMatrix(test_x)
  8. # specify your configurations as a dict
  9. params = {
  10. 'booster': 'gbtree',
  11. # 'objective': 'multi:softmax', # 多分类的问题、
  12. # 'objective': 'multi:softprob', # 多分类概率
  13. 'objective': 'binary:logistic',
  14. 'eval_metric': 'auc',
  15. # 'num_class': 9, # 类别数,与 multisoftmax 并用
  16. 'gamma': 0.1, # 用于控制是否后剪枝的参数,越大越保守,一般0.1、0.2这样子。
  17. 'max_depth': 8, # 构建树的深度,越大越容易过拟合
  18. 'alpha': 0, # L1正则化系数
  19. 'lambda': 10, # 控制模型复杂度的权重值的L2正则化项参数,参数越大,模型越不容易过拟合。
  20. 'subsample': 0.7, # 随机采样训练样本
  21. 'colsample_bytree': 0.5, # 生成树时进行的列采样
  22. 'min_child_weight': 3,
  23. # 这个参数默认是 1,是每个叶子里面 h 的和至少是多少,对正负样本不均衡时的 0-1 分类而言
  24. # ,假设 h 在 0.01 附近,min_child_weight 为 1 意味着叶子节点中最少需要包含 100 个样本。
  25. # 这个参数非常影响结果,控制叶子节点中二阶导的和的最小值,该参数值越小,越容易 overfitting。
  26. 'silent': 0, # 设置成1则没有运行信息输出,最好是设置为0.
  27. 'eta': 0.03, # 如同学习率
  28. 'seed': 1000,
  29. 'nthread': -1, # cpu 线程数
  30. 'missing': 1,
  31. 'scale_pos_weight': (np.sum(y==0)/np.sum(y==1)) # 用来处理正负样本不均衡的问题,通常取:sum(negative cases) / sum(positive cases)
  32. # 'eval_metric': 'auc'
  33. }
  34.  
  35. plst = list(params.items())
  36. num_rounds = 5000 # 迭代次数
  37. watchlist = [(xgb_train, 'train'), (xgb_val, 'val')]
  38. # 交叉验证
  39. # result = xgb.cv(plst, xgb_train, num_boost_round=200, nfold=4, early_stopping_rounds=200, verbose_eval=True, folds=StratifiedKFold(n_splits=4).split(X, y))
  40. # 训练模型并保存
  41. # early_stopping_rounds 当设置的迭代次数较大时,early_stopping_rounds 可在一定的迭代次数内准确率没有提升就停止训练
  42. model = xgb.train(plst, xgb_train, num_rounds, watchlist, early_stopping_rounds=200)
  43. res['score'] = model.predict(xgb_test)
  44. res['score'] = res['score'].apply(lambda x: float('%.6f' % x))
  45. return res

CNN

  1. imp = Imputer(missing_values='NaN', strategy='mean', axis=0)
  2. X_train = imp.fit_transform(X_train)
  3. sc = StandardScaler(with_mean=False)
  4. sc.fit(X_train)
  5. X_train = sc.transform(X_train)
  6. val_X = sc.transform(val_X)
  7. X_test = sc.transform(X_test)
  8.  
  9. ann_scale = 1
  10.  
  11. from keras.layers import Embedding
  12.  
  13. model = Sequential()
  14.  
  15. model.add(Embedding(X_train.shape[1] + 1,
  16. EMBEDDING_DIM,
  17. input_length=MAX_SEQUENCE_LENGTH))
  18. #model.add(Dense(int(256 / ann_scale), input_shape=(X_train.shape[1],)))
  19. model.add(Dense(int(256 / ann_scale)))
  20. model.add(Activation('tanh'))
  21. model.add(Dropout(0.3))
  22. model.add(Dense(int(512 / ann_scale)))
  23. model.add(Activation('relu'))
  24. model.add(Dropout(0.3))
  25. model.add(Dense(int(512 / ann_scale)))
  26. model.add(Activation('tanh'))
  27. model.add(Dropout(0.3))
  28. model.add(Dense(int(256 / ann_scale)))
  29. model.add(Activation('linear'))
  30. model.add(Dense(1))
  31. model.add(Activation('sigmoid'))
  32. # For a multi-class classification problem
  33. model.summary()
  34.  
  35. class_weight1 = class_weight.compute_class_weight('balanced',
  36. np.unique(y),
  37. y)
  38.  
  39. #-----------------------------------------------------------------------------------------------------------------------------------------------------
  40. # AUC for a binary classifier
  41. def auc(y_true, y_pred):
  42. ptas = tf.stack([binary_PTA(y_true,y_pred,k) for k in np.linspace(0, 1, 1000)],axis=0)
  43. pfas = tf.stack([binary_PFA(y_true,y_pred,k) for k in np.linspace(0, 1, 1000)],axis=0)
  44. pfas = tf.concat([tf.ones((1,)) ,pfas],axis=0)
  45. binSizes = -(pfas[1:]-pfas[:-1])
  46. s = ptas*binSizes
  47. return K.sum(s, axis=0)
  48.  
  49. # PFA, prob false alert for binary classifier
  50. def binary_PFA(y_true, y_pred, threshold=K.variable(value=0.5)):
  51. y_pred = K.cast(y_pred >= threshold, 'float32')
  52. # N = total number of negative labels
  53. N = K.sum(1 - y_true)
  54. # FP = total number of false alerts, alerts from the negative class labels
  55. FP = K.sum(y_pred - y_pred * y_true)
  56. return FP/N
  57.  
  58. # P_TA prob true alerts for binary classifier
  59. def binary_PTA(y_true, y_pred, threshold=K.variable(value=0.5)):
  60. y_pred = K.cast(y_pred >= threshold, 'float32')
  61. # P = total number of positive labels
  62. P = K.sum(y_true)
  63. # TP = total number of correct alerts, alerts from the positive class labels
  64. TP = K.sum(y_pred * y_true)
  65. return TP/P
  66. #-----------------------------------------------------------------------------------------------------------------------------------------------------
  67.  
  68. model.compile(loss='binary_crossentropy',
  69. optimizer='rmsprop',
  70. # metrics=['accuracy'],
  71. metrics=[auc])
  72. epochs = 100
  73. model.fit(X_train, y, epochs=epochs, batch_size=2000,
  74. validation_data=(val_X, val_y), shuffle=True,
  75. class_weight = class_weight1)

LGB+XGB+CNN一般写法的更多相关文章

  1. XAI/MLI 可解释机器学习系列1- 开源&paper汇总

    一直在关注可解释机器学习领域,因为确实在工作中有许多应用 模型检查,特征重要性是否符合预期和AUC一样重要 模型解释,比起虚无缥缈的模型指标,解释模型学到的规律更能说服业务方 样本解释,为什么这些用户 ...

  2. xgb, lgb, Keras, LR(二分类、多分类代码)

    preprocess # 通用的预处理框架 import pandas as pd import numpy as np import scipy as sp # 文件读取 def read_csv_ ...

  3. 网站SEO优化之Robots.txt文件写法。

    作为网站开发者或网站管理员一定知道网站对搜索引擎的优化有多重要,好的网站不仅要有漂亮的界面,良好的用户体验,还要有较高的更新频率.要被百度.google这样的搜索引擎大量收录,才能增加网站展示量,访问 ...

  4. 卷积神经网络CNN全面解析

    卷积神经网络(CNN)概述 从多层感知器(MLP)说起 感知器 多层感知器 输入层-隐层 隐层-输出层 Back Propagation 存在的问题 从MLP到CNN CNN的前世今生 CNN的预测过 ...

  5. qwe框架- CNN 实现

    CNN实现 概述 我在qwe中有两种,第一种是按照Ng课程中的写法,多层循环嵌套得到每次的"小方格",然后WX+b,这样的做法是最简单,直观.但是效率极其慢.基本跑个10张以内图片 ...

  6. 详解卷积神经网络(CNN)

    详解卷积神经网络(CNN) 详解卷积神经网络CNN 概揽 Layers used to build ConvNets 卷积层Convolutional layer 池化层Pooling Layer 全 ...

  7. 使用CNN做数字识别和人脸识别

    上次写的一层神经网络也都贴这里了. 我有点困,我先睡觉,完了我再修改 这个代码写法不太符合工业代码的规范,仅仅是用来学习的的.还望各位见谅 import sys,ossys.path.append(o ...

  8. paper 162:卷积神经网络(CNN)解析

    卷积神经网络(CNN)解析: 卷积神经网络CNN解析 概揽 Layers used to build ConvNets 卷积层Convolutional layer 池化层Pooling Layer ...

  9. obj.style.z-index的正确写法

    obj.style.z-index的正确写法 今天发现obj.style.z-index在js里面报错,后来才知道在js里应该把含"-"的字符写成驼峰式,例如obj.style.z ...

随机推荐

  1. [翻译]Introduction to JSON Web Tokens

    JWT: Json Web Tokens JWT是一种开放标准(RFC 7519),它定义了一种紧凑且独立的方式,用于将各方之间的信息安全地传输为JSON对象.因为它是经过数字签名的,所以该信息可以进 ...

  2. Azure AD Domain Service(二)为域服务中的机器配置 Azure File Share 磁盘共享

    一,引言 Azure File Share 是支持两种认证方式的! 1)Active Directory 2)Storage account key 记得上次分析的 "Azure File ...

  3. Java中Integer 和 int的区别

    基本概念的区分: 1.Integer 是 int 的包装类,int 则是 java 的一种基本数据类型 2.Integer 变量必须实例化后才能使用,而int变量不需要 3.Integer 实际是对象 ...

  4. ybt的坑

    emmmm ybt 字符串处理 例2题解错了 AC自动机板子错了(据说) 另外字符串处理的题解写的我一脸懵逼 网站上eeeee 点击查看E. 1.排队接水 #include <iostream& ...

  5. Spring IOC-基于XML配置的容器

    Spring IOC-基于XML配置的容器 我们先分析一下AbstractXmlApplicationContext这个容器的加载过程. AbstractXmlApplicationContext的老 ...

  6. Solution -「AGC 029E」「AT 4504」Wandering TKHS

    \(\mathcal{Description}\)   Link.   给一棵 \(n\) 个点的树,从某个点出发,遍历时必须走到已经走过的连通块所邻接的编号最小的结点.求从每个点出发,走到 \(1\ ...

  7. CentOS8上安装MySQL

    没有选择Win10上安装MySQL,个人感觉比较傻瓜式.同时相对Win10操作系统,个人更熟悉Unix/Linux操作系统,所以选择在CentOS8上安装MySQL数据库. 还是熟悉的yum安装,前提 ...

  8. v-model指令的学习

    v-model的原理 v-model="message"   ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓就相当于先用一个v-bind绑定一个 ...

  9. ASP.NET Core 6框架揭秘实例演示[11]:诊断跟踪的几种基本编程方式

    在整个软件开发维护生命周期内,最难的不是如何将软件系统开发出来,而是在系统上线之后及时解决遇到的问题.一个好的程序员能够在系统出现问题之后马上定位错误的根源并找到正确的解决方案,一个更好的程序员能够根 ...

  10. 我哭了 看到RCNN 和FAST RCNN时 想着为什么要选候选框呢?能不能直接回归出来候选框?

    这是不是一个超级好的IDEA 我是不是要发顶会了!!! 看到yolo  直接绝望 果然 你能想到的都已经被发表了. 生不逢时啊!!!