集成模型是什么?

集成是一种机器学习概念,使用相同的学习算法训练多个模型。Bagging是一种减少预测方差的方法,通过使用重复组合生成多组原始数据,从数据集生成额外的训练数据。Boosting 是一种基于最后分类调整观测值权重的迭代技术。如果一条观察数据被错误地分类,它会试图增加这个观察数据的权重。总体而言,Boosting 建立了强大的预测模型。

导入所需要的包

from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
from pandas import DataFrame

make_blobs用于生成数据

它的参数如下:

参数

N_samples:如果为int,则为集群间平均分配的点数总数。如果是数组,则序列的每个元素表示每个集群的样本数量。

n_features: 每个样本的特征数量。

centers:生成的中心数量,或固定的中心位置。如果n_samples为int且centers为None,则生成3个中心。如果n_samples是数组,那么centers必须是None或者是长度等于n_samples长度的数组。

cluster_std:生成簇的标准差。

center_box: 每个簇中心随机生成时的边界框。

shuffle:是否打乱样本。

random_state:确定用于创建数据集的随机数生成。通过多个函数调用传递一个int类型的可复现输出。

return_centers: 如果为True,则返回每个集群的中心

返回值

X: 生成的样本。 ndarray (n_samples, n_features)

Y: 每个样本的集群成员的整数标签。ndarray (n_samples,)

中心:centers 每个集群的中心。仅当return_centers=True时返回 ndarray(n_centers, n_features)

一般的训练流程

创建2d分类数据集

X, y = make_blobs(n_samples=1000, centers=5, n_features=2, cluster_std=2, random_state=2)
print(X)

print(y)

将X和y转换到pandas df

df = DataFrame(dict(x=X[:,0], y=X[:,1], label=y))
df.head()

散点图可视化,按类值着色的点

colors = {0:'red', 1:'blue', 2:'green', 3:'yellow', 4:'purple'}
fig, ax = plt.subplots()
grouped = df.groupby('label')
for key, group in grouped:group.plot(ax=ax, kind='scatter', x='x', y='y', label=key, color=colors[key])plt.show()

from tensorflow.keras.utils import to_categoricaly = to_categorical(y)
print(y)

划分数据集

n_train = int(0.9 * X.shape[0])
trainX, testX = X[:n_train, :], X[n_train:, :]
trainy, testy = y[:n_train], y[n_train:]

定义模型

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
model = Sequential()
model.add(Dense(50, input_dim=2, activation='relu'))
model.add(Dense(5, activation='softmax'))
model

编译和训练

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
history = model.fit(trainX, trainy, validation_data=(testX, testy), epochs=50, verbose=0)
history

评估模型

train_loss, train_acc = model.evaluate(trainX, trainy, verbose=0)
test_loss, test_acc = model.evaluate(testX, testy, verbose=0)
print('Train: %.3f, Test: %.3f' % (train_acc, test_acc))Output: Train: 0.749, Test: 0.750

绘制模型精度的学习曲线

每个训练阶段训练和测试数据集模型精度的线图学习曲线

plt.figure(figsize=(8, 5))
plt.plot(history.history['accuracy'], label='train')
plt.plot(history.history['val_accuracy'], label='test')
plt.legend()
plt.show()

使用Bagging集成

Bootstrap aggregating,又称bagging (from Bootstrap aggregating),是一种用于提高统计分类和回归中机器学习算法的稳定性和准确性的机器学习集成元算法。

在Bagging法中,训练集中的随机数据样本是用替换法选择的——这意味着单个数据点可以被选择不止一次。在生成几个数据样本后,这些弱模型将被独立地训练,根据任务的类型——例如,回归或分类——这些预测的平均或众数将产生更准确的估计。

它还减少了方差,并有助于避免过拟合。虽然它通常应用于决策树方法,但它可以用于任何类型的方法。Bagging是模型平均法的一种特殊情况。

Bootstrapping 使用带有替换的随机抽样的测试或度量,并且属于更广泛的重抽样方法类别。 Bootstrapping 为样本估计分配准确性度量(偏差、方差、置信区间、预测误差等)。该技术允许使用随机抽样方法估计几乎任何统计量的抽样分布。

让我们创建额外的数据集

dataX, datay = make_blobs(n_samples=55000, centers=5, n_features=2, cluster_std=2, random_state=2)
X, newX = dataX[:5000, :], dataX[5000:, :]
y, newy = datay[:5000], datay[5000:]

打印 dataX 和 datay 形状

dataX.shape, datay.shape

Output:((55000, 2), (55000,))

X.shape, newX.shape

Output:((5000, 2), (50000, 2))

y.shape, newy.shape

Output:((5000, 2), (50000, ))

现在我们有 5,000 个示例来训练我们的模型并估计其总体性能。 我们还有 30,000 个示例,可用于更好地近似单个模型或集成的真实总体性能。

创建函数,该函数用于在训练数据集上拟合和评估模型。它将返回对测试数据的拟合模型的执行情况。

import numpy as np
from sklearn.metrics import accuracy_score
def evaluateModel(trainX, trainy, testX, testy):#Convert trainy and testy into categoricaltrainy_enc = to_categorical(trainy)testy_enc = to_categorical(testy)# Create a modelmodel = Sequential()model.add(Dense(50, input_dim=2, activation='relu'))model.add(Dense(5, activation='softmax'))model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])# fit modelmodel.fit(trainX, trainy_enc, epochs=50, verbose=0)# evaluate the modeltest_loss, test_acc = model.evaluate(testX, testy_enc, verbose=0)# return the model and accuracy of test datareturn model, test_accpass

对多类分类进行集成预测

def ensemblePredictions(members, testX):# make predictionsyhats = [model.predict(testX) for model in members]yhats = np.array(yhats)# sum across ensemble memberssummed = np.sum(yhats, axis=0)# argmax across classesresult = np.argmax(summed, axis=1)# return the resultreturn resultpass

创建一个函数来评估集成中特定数量的模型

def evaluateNMembers(members, n_members, testX, testy):# select a subset of memberssubset = members[:n_members]# make predictionyhat = ensemblePredictions(subset, testX)# calculate accuracyreturn accuracy_score(testy, yhat)pass

使用重采样分割训练和测试集

from sklearn.utils import resample
n_splits = 10scores, members = list(), list()
for m in range(n_splits):# select indexesix = [i for i in range(len(X))]train_ix = resample(ix, replace=True, n_samples=4500)test_ix = [x for x in ix if x not in train_ix]# select datatrainX, trainy = X[train_ix], y[train_ix]testX, testy = X[test_ix], y[test_ix]# evaluate modelmodel, test_acc = evaluateModel(trainX, trainy, testX, testy)print(f'test_acc: {test_acc:.2f}')scores.append(test_acc)members.append(model)

评估不同数量的集成效果

single_scores, ensemble_scores = list(), list()
for i in range(1, n_splits+1):ensemble_score = evaluateNMembers(members, i, newX, newy)newy_enc = to_categorical(newy)_, single_score = members[i-1].evaluate(newX, newy_enc, verbose=0)print(f'{i}: single={single_score: .2f}, ensemble={ensemble_score: .2f}')ensemble_scores.append(ensemble_score)single_scores.append(single_score)pass

print(ensemble_scores)
print(single_scores)

查看分数和集成数量的关系

print(f'Accuracy {np.mean(single_scores): .2f} ({np.std(single_scores): .3f})')x_axis = [i for i in range(1, n_splits+1)]
plt.plot(x_axis, single_scores, marker='o', linestyle='None')
plt.plot(x_axis, ensemble_scores, marker='o')
plt.show()

本文作者:nutan

在深度学习中使用Bagging集成模型相关推荐

  1. 深度学习中的Normalization模型(附实例公式)

    来源:运筹OR帷幄 本文约14000字,建议阅读20分钟. 本文以非常宏大和透彻的视角分析了深度学习中的多种Normalization模型,从一个新的数学视角分析了BN算法为什么有效. [ 导读 ]不 ...

  2. 前向传播和反向传播_深度学习的地基模块:模型、参数、非线性、前向传播、反向偏微分

    头条ID:钱多多先森,关注更多AI.CV.数码.个人理财领域知识,关注我,一起成长 在深度学习中,数据.模型.参数.非线性.前向传播预测.反向偏微分参数更新等等,都是该领域的基础内容.究竟他们最基础的 ...

  3. 深度学习中的3个秘密:集成、知识蒸馏和蒸馏

    作者:Zeyuan Allen-Zhu 来源:AI公园 编译:ronghuaiyang 在现在的标准技术下,例如过参数化.batch-normalization和添加残差连接,"现代&quo ...

  4. AI部署:聊一聊深度学习中的模型权重

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨Oldpan 来源丨Oldpan博客 编辑丨极市平台 导读 本文简要介绍了模型权重的统计方法,以 ...

  5. ML之模型文件:机器学习、深度学习中常见的模型文件(.h5、.keras)简介、h5模型文件下载集锦、使用方法之详细攻略

    ML之模型文件:机器学习.深度学习中常见的模型文件(.h5..keras)简介.h5模型文件下载集锦.使用方法之详细攻略 目录 ML/DL中常见的模型文件(.h5..keras)简介及其使用方法 一. ...

  6. 深度学习中的Lipschitz约束:泛化与生成模型

    作者丨苏剑林 单位丨广州火焰信息科技有限公司 研究方向丨NLP,神经网络 个人主页丨kexue.fm 去年写过一篇 WGAN-GP 的入门读物互怼的艺术:从零直达WGAN-GP,提到通过梯度惩罚来为 ...

  7. [转载] python实现语义分割_使用Keras实现深度学习中的一些语义分割模型

    参考链接: Keras中的深度学习-数据预处理 Keras-Sematic-Segmentation 使用Keras实现深度学习中的一些语义分割模型. 配置 tensorflow 1.13.1+ten ...

  8. 【深度学习中模型评价指标汇总(混淆矩阵、recall、precision、F1、AUC面积、ROC曲线、ErrorRate)】

    深度学习中模型好坏的所有评价指标汇总(混淆矩阵.recall.precision.F1score.AUC面积.ROC曲线.ErrorRate) 导航 0.混淆矩阵 1.AUC面积 2.ROC曲线 3. ...

  9. 深度学习中模型训练效果不好的原因以及防止过拟合的方法

    深度学习中模型训练效果不好的原因 1. 是否选择合适的损失函数 2. 是否选择了合适的Mini-batch size 3. 是否选择了合适的激活函数 4. 是否选择了合适的学习率 5. 优化算法是否使 ...

最新文章

  1. mybatis 一对多_Springboot整合Mybatis实现级联一对多CRUD操作
  2. 第二次数据库作业--gui
  3. 深度学习:推动NLP领域发展的新引擎
  4. 输入整型数组和排序标识,对其元素按照升序或降序进行排序(华为OJ系列)
  5. Java常用类(4)--System类
  6. java学习(168):java连接SQL server数据库
  7. notepad++正则表达式去掉关键字所在行
  8. 厉害了!90后奥运冠军被北大录取
  9. 使用Newtonsoft.Json格式化JSON文档
  10. 邀请合作如何表达_如何邀请大咖嘉宾来商群分享
  11. 抖音发布女性数据报告:平均每天31.8万女性发布自拍视频又删除
  12. Linux_异常_03_Failed to restart iptables.service: Unit not found.
  13. ubuntu文件夹建立软链接方法
  14. 正确的Kado ED「永遠のこたえ」
  15. 【离散数学】集合论 第三章 集合与关系(2) 集合的基本运算
  16. 【设计】全差分设计报告
  17. spring源码解析大体流程
  18. Linux服务器建立IP隧道,变更访问出口
  19. 多个订单待付款半小时倒计时功能
  20. 航迹推演通过左右轮速度得到机器人前进线速度和角速度

热门文章

  1. 学习Matlab的第一个程序——用二分法求根
  2. 企业微信审批弹窗在苹果手机弹不出来的可能问题之一
  3. 泰康人寿java开发待遇怎么样_宋晓伟-泰康人寿-5年Java开发高级工程师-猿急送
  4. linux pv命令,linux运维系列pv指令
  5. 摘抄Django项目(一)
  6. js Web APIs
  7. 面剔除 Face culling
  8. 汇聚优质AR应用开发者,技术助力AR领域繁荣生态
  9. jcharArray转化为char [ ]
  10. 杂记二 · 永远不服输