keras做二分类,多分类以及回归任务

qlmx
qlmx
qlmx
50
文章
2
评论
2020年2月7日14:34:01 评论 1,453阅读8分17秒

1.简介

该部分是比较基础的深度网络部分,是基于keras实现的多层感知机网络(mlp),使用nn个人感觉最大的一个好处就是目标函数自定义很方便,下面将从数据处理、网络搭建和模型训练三个部分介绍。如果只是想要阅读代码,可直接移步到尾部链接。

2. 数据处理

神经网络对数据的要求比较多,不能处理缺失值,并且数据分布对其影响也很大,输入模型前需要对数据做预处理。具体需要做如下处理

  • onehot:参考上一节

  • 填充:常用的有均值填充,常数值填充,中位数填充等,根据数据场景做选择,这里直接填充的常数值-1

    for i in train_x.columns:
      if train_x[i].isnull().sum() != 0:
          train_x[i] = train_x[i].fillna(-1)
          test[i] = test[i].fillna(-1)
    
  • 归一化:如果各个特征值差距很大,会严重影响模型参数分布,需要对整体数据进行归一化处理
    scaler = StandardScaler()
    train_X = scaler.fit_transform(train_x)
    test_X = scaler.transform(test)
    

3.模型部分

def MLP(dropout_rate=0.25, activation='relu'):
    start_neurons = 512
    model = Sequential()
    model.add(Dense(start_neurons, input_dim=train_X.shape[1], activation=activation))
    model.add(BatchNormalization())
    model.add(Dropout(dropout_rate))

    model.add(Dense(start_neurons // 2, activation=activation))
    model.add(BatchNormalization())
    model.add(Dropout(dropout_rate))

    model.add(Dense(start_neurons // 4, activation=activation))
    model.add(BatchNormalization())
    model.add(Dropout(dropout_rate))

    model.add(Dense(start_neurons // 8, activation=activation))
    model.add(BatchNormalization())
    model.add(Dropout(dropout_rate / 2))

    model.add(Dense(classes, activation='sigmoid'))
    return model

这里定义的是四层感知网络,为了提高网络的性能,添加的dropout层和BN层。Dropout的具体工作原理是随机的使一些神经元失活,从而达到防止过拟合的作用。直观的理解的话,dropout有点像集成学习中的bagging的思路,每次训练的时候只训练一部分神经元,相当于训练了多个弱分类器,预测的时候则是全部分类器同时作用。而bagging的作用也是为了减少方差(防止过拟合)。BN,Batch Normalization,就是在深度神经网络训练过程中使得每一层神经网络的输入保持相近的分布,可以加速训练。

针对不同的网络,输出层的激活函数不同

  • 二分类:sigmoid
  • 多分类:softmax
  • 回归:linear

4. 模型训练

首先需要定义网络模型,然后定义loss优化和目标函数,keras训练函数和sklearn很相似,直接调用fit函数即可。

model = MLP(dropout_rate=0.5, activation='relu')
model.compile(optimizer='adam', loss='binary_crossentropy',  metrics=['accuracy'])
history = model.fit(x_train, y_train,
                    validation_data=[x_valid, y_valid],
                    epochs=epochs,
                    batch_size=batch_size,
                    callbacks=[call_ES, ],
                    shuffle=True,
                    verbose=1)
  • optimizer:loss优化函数,常用的有sgd, rmsprop, adam等

  • loss:常用的loss损失函数

    • 二分类:binary_crossentropy等
    • 多分类:categorical_crossentropy等
    • 回归:mse,mae等
  • metrics:评价函数:
    • 分类:accuracy等
    • 回归:mse, mae等
  • callbacks:这个是回调函数,该函数是在加载完一次数据后调用,可以用他来加载loss,打印tensorboard,提前停止等,这里给出了提前停止的代码
    call_ES = keras.callbacks.EarlyStopping(monitor='val_loss', min_delta=0, patience=patience, verbose=1, mode='auto', baseline=None)
    

模型预测部分

##分类
predictions = model.predict_proba(test_X, batch_size=batch_size)

##回归&分类
oof_preds[val_] = model.predict(x_valid, batch_size=batch_size)

分类任务可以通过第一个式子预测每个类别的概率。对于二分类任务可以自定义阈值,得到最终的分类结果

threshold = 0.5
result = []
for pred in predictions:
    result.append(1 if pred > threshold else 0)

对于多分类:

result = np.argmax(predictions, axis=1)

代码地址:data_mining_models

写在最后

欢迎关注作者和专栏,和作者一块成长:ML与DL实践之路

继续阅读
  • 我的微信小程序
  • 这是我的微信小程序扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin
qlmx
  • 本文由 发表于 2020年2月7日14:34:01
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
推荐系统工业界召回论文调研 深度学习

推荐系统工业界召回论文调研

1. 2020_KDD_ComiRec 论文综述:主要是应用于召回,是序列化推荐的解决方案。提出一个新的序列化推荐模块-ComiRec 解决问题: 聚焦匹配问题,提升召回的性能,也就是候选物的精度 解...
详细图像数据集增强原理的python代码 计算机视觉

详细图像数据集增强原理的python代码

导读 在深度学习时代,数据的规模越大、质量越高,模型就能够拥有更好的泛化能力,数据直接决定了模型学习的上限。然而在实际工程中,采集的数据很难覆盖全部的场景,比如图像的光照条件,同一场景拍摄的图片可能由...
python磨皮祛斑了解一下 计算机视觉

python磨皮祛斑了解一下

前言 在深度学习的加持下,计算机视觉进入了快车道,在使用深度的同时,自己可做的东西就比较局限,为了更深入的学习计算机视觉,对传统数字图像处理做了一下回顾。本文分享的就是基于传统的数字图像滤波技术:高斯...
CRNN翻译 深度学习

CRNN翻译

摘要 ​ 基于图像的序列识别一直是计算机视觉中长期存在的研究课题。在本文中,我们研究了场景文本识别的问题,这是基于图像的序列识别中最重要和最具挑战性的任务之一。提出了一种整合 特征提取,序列建模和转录...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: