当前位置: 首页 > news >正文

www.ccb.com建设银行网站首页网站热度查询

www.ccb.com建设银行网站首页,网站热度查询,唐山seo推广,wordpress 主页 导航集成学习是一种机器学习方法,旨在提高单个模型的性能和鲁棒性。它基于这样一个假设:通过结合多个模型的预测结果,可以获得更好的预测性能,因为每个模型都可能从数据中提取不同的信息,因此他们的错误也可能是不同的&…

集成学习是一种机器学习方法,旨在提高单个模型的性能和鲁棒性。它基于这样一个假设:通过结合多个模型的预测结果,可以获得更好的预测性能,因为每个模型都可能从数据中提取不同的信息,因此他们的错误也可能是不同的,通过整合他们的预测结果可以减少这种错误的影响。

集成学习可以分为两类:bagging和boosting。

Bagging:是bootstrap aggregating的缩写,即自举汇聚法。它通过从原始数据集中进行有放回的随机抽样来创建多个训练集,每个训练集都用于训练一个独立的模型。这些模型的预测结果被组合起来,例如通过平均,以生成最终的集成模型的预测结果。Bagging可以用于降低模型方差,因为通过使用不同的训练集训练多个模型,我们可以减少模型对特定训练集的敏感性。

  1. Boosting:是一种迭代算法,它通过逐步改善模型的预测能力来构建一个强大的集成模型。每个迭代的模型都是在先前模型的基础上构建的,即每个模型都尝试学习之前模型的错误。通过这种方式,Boosting可以减少模型偏差,因为它们能够逐步拟合训练数据中更复杂的模式。

  2. 除了Bagging和Boosting,还有其他类型的集成学习方法,例如Stacking和Blending。Stacking通过训练多个不同类型的基本模型,并使用第二个元模型(或叫做“超级学习器”)来组合它们的预测结果。Blending是一种类似于Stacking的技术,它在训练数据集上训练多个不同的模型,并使用一个加权平均来组合它们的预测结果。

集成学习可以提高预测性能和鲁棒性,但需要更多的计算资源和时间。它适用于大型数据集和需要高度精确的预测的情况。

使用pytorch分别实现bagging、boosting、stacking和blending

下面是使用PyTorch实现集成学习的例子:

首先,我们需要准备数据。这里我们使用PyTorch的MNIST数据集作为例子。我们将训练集和测试集分别加载进来:

import torch
import torch.nn as nn
import torch.optim as optim
import torchvision.datasets as datasets
import torchvision.transforms as transforms# 定义数据转换
transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.1307,), (0.3081,))
])# 加载数据集
train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
test_dataset = datasets.MNIST(root='./data', train=False, download=True, transform=transform)# 定义数据加载器
train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=64, shuffle=False)

接下来,我们可以定义基本模型,这里使用简单的卷积神经网络:

class CNN(nn.Module):def __init__(self):super(CNN, self).__init__()self.conv1 = nn.Conv2d(1, 10, kernel_size=5)self.conv2 = nn.Conv2d(10, 20, kernel_size=5)self.dropout = nn.Dropout2d()self.fc1 = nn.Linear(320, 50)self.fc2 = nn.Linear(50, 10)def forward(self, x):x = self.conv1(x)x = nn.functional.relu(nn.functional.max_pool2d(x, 2))x = self.conv2(x)x = nn.functional.relu(nn.functional.max_pool2d(self.dropout(x), 2))x = x.view(-1, 320)x = nn.functional.relu(self.fc1(x))x = self.dropout(x)x = self.fc2(x)return nn.functional.log_softmax(x, dim=1)

现在,我们可以使用这个基本模型来构建集成学习模型。

bagging

首先是Bagging。在Bagging中,我们通过随机抽样训练集数据来构建多个基本模型。每个模型都是独立训练的,我们可以将它们的预测结果平均得到集成模型的输出。

# Bagging
n_models = 5
models = []
for i in range(n_models):model = CNN()optimizer = optim.Adam(model.parameters(), lr=0.01)criterion = nn.CrossEntropyLoss()for epoch in range(10):for batch_idx, (data, target) in enumerate(train_loader):optimizer.zero_grad()output = model(data)loss = criterion(output, target)loss.backward()optimizer.step()models.append(model)# 预测
def bagging_predict(models, data):outputs = torch.zeros(data.shape[0], 10)for model in models:output = torch.exp(model(data))outputs += outputreturn outputs.argmax(dim=1)# 评估
correct = 0
total = 0
with torch.no_grad():for data, target in test_loader:outputs = bagging_predict(models, data)total += target.size(0)correct += (outputs == target).sum().item()
print(f"Accuracy: {100 * correct / total:.2f}%")

boosting

下一步是Boosting。在Boosting中,我们构建多个基本模型,每个模型都在前一个模型训练的基础上进行训练。每个模型的训练都会依据之前模型的预测结果进行加权,以便更好地捕获错误分类的样本。

# Boosting
n_models = 5
models = []
train_dataset_boost = list(train_dataset)
for i in range(n_models):model = CNN()optimizer = optim.Adam(model.parameters(), lr=0.01)criterion = nn.CrossEntropyLoss()for epoch in range(10):for batch_idx, (data, target) in enumerate(train_loader):if i == 0:weights = torch.ones(len(train_dataset))else:outputs = torch.exp(models[-1](data))weights = torch.zeros(len(train_dataset))for j, (d, t) in enumerate(train_dataset_boost):if t == outputs.argmax(dim=1)[j]:weights[j] = 1 / (outputs[j][t] + 1e-6)weights = weights / weights.sum()sampler = torch.utils.data.sampler.WeightedRandomSampler(weights, len(weights), replacement=True)train_loader_boost = torch.utils.data.DataLoader(train_dataset_boost, batch_size=64, sampler=sampler)optimizer.zero_grad()output = model(data)loss = criterion(output, target)loss.backward()optimizer.step()models.append(model)# 更新训练集权重outputs = torch.exp(model(torch.stack([d for d, t in train_dataset_boost])))weights = torch.zeros(len(train_dataset))for j, (d, t) in enumerate(train_dataset_boost):if t == outputs.argmax(dim=1)[j]:weights[j] = 1 / (outputs[j][t] + 1e-6)weights = weights / weights.sum()train_dataset_boost = list(zip(train_dataset, weights))train_dataset_boost = [(d, t, w) for (d, t), w in train_dataset_boost]# 预测
def boosting_predict(models, data):outputs = torch.zeros(data.shape[0], 10)for model in models:output = torch.exp(model(data))outputs += outputreturn outputs.argmax(dim=1)# 评估
correct = 0
total = 0
with torch.no_grad():for data, target in test_loader:outputs = boosting_predict(models, data)total += target.size(0)correct += (outputs == target).sum().item()
print(f"Accuracy: {100 * correct / total:.2f}%")

stacking

下一个集成方法是Stacking。在Stacking中,我们首先将训练集分成两部分,第一部分用于训练一组基本模型,第二部分用于为最终模型生成预测。对于第一部分,我们使用多个基本模型对其进行训练。对于第二部分,我们使用第一部分的基本模型的预测结果来训练一个最终的元模型,该元模型将基本模型的预测结果作为输入,并输出最终的预测结果。

# Stacking
n_models = 5
models = []
train_dataset_base, train_dataset_meta = torch.utils.data.random_split(train_dataset, [50000, 10000])
for i in range(n_models):model = CNN()optimizer = optim.Adam(model.parameters(), lr=0.01)criterion = nn.CrossEntropyLoss()for epoch in range(10):for batch_idx, (data, target) in enumerate(train_loader):optimizer.zero_grad()output = model(data)loss = criterion(output, target)loss.backward()optimizer.step()models.append(model)# 构建元数据集
meta_data = []
with torch.no_grad():for data, target in train_loader:outputs = []for model in models:outputs.append(model(data))outputs = torch.stack(outputs, dim=1)meta_data.append((outputs, target))# 构建元模型
class MetaModel(nn.Module):def __init__(self):super().__init__()self.fc1 = nn.Linear(5*10, 100)self.fc2 = nn.Linear(100, 10)def forward(self, x):x = x.view(x.shape[0], -1)x = F.relu(self.fc1(x))x = self.fc2(x)return xmeta_model = MetaModel()
optimizer = optim.Adam(meta_model.parameters(), lr=0.01)
criterion = nn.CrossEntropyLoss()# 元训练
for epoch in range(10):for data, target in meta_data:optimizer.zero_grad()output = meta_model(data.view(data.shape[0], -1))loss = criterion(output, target)loss.backward()optimizer.step()# 预测
def stacking_predict(models, meta_model, data):outputs = []with torch.no_grad():for model in models:output = model(data)outputs.append(output)outputs = torch.stack(outputs, dim=1)meta_output = meta_model(outputs.view(outputs.shape[0], -1))return meta_output.argmax(dim=1)# 评估
correct = 0
total = 0
with torch.no_grad():for data, target in test_loader:outputs = stacking_predict(models, meta_model, data)total += target.size(0)correct += (outputs == target).sum().item()
print(f"Accuracy: {100 * correct / total:.2f}%")

blending

最后一个集成方法是Blending。Blending类似于Stacking,但它只使用一部分训练数据进行元模型的训练,而不是使用训练集的全部数据。在Blending中,我们首先将训练集分成两部分,第一部分用于训练多个基本模型,第二部分用于为最终模型生成预测。对于第二部分,我们使用第一部分的基本模型的预测结果来训练一个最终的元模型,该元模型将基本模型的预测结果作为输入,并输出最终的预测结果。

# Blending
n_models = 5
models = []
train_dataset_base, train_dataset_blend = torch.utils.data.random_split(train_dataset, [50000, 10000])
for i in range(n_models):model = CNN()optimizer = optim.Adam(model.parameters(), lr=0.01)criterion = nn.CrossEntropyLoss()for epoch in range(10):for batch_idx, (data, target) in enumerate(train_loader):if batch_idx < len(train_loader) // 2:optimizer.zero_grad()output = model(data)loss = criterion(output, target)loss.backward()optimizer.step()else:breakmodels.append(model)# 生成元数据
meta_data = []
with torch.no_grad():for data, target in train_loader:outputs = []for model in models:output = model(data)outputs.append(output)meta_data.append((torch.cat(outputs, dim=1), target))# 构建元模型
class MetaModel(nn.Module):def __init__(self):super().__init__()self.fc1 = nn.Linear(5*10, 100)self.fc2 = nn.Linear(100, 10)def forward(self, x):x = x.view(x.shape[0], -1)x = F.relu(self.fc1(x))x = self.fc2(x)return xmeta_model = MetaModel()
optimizer = optim.Adam(meta_model.parameters(), lr=0.01)
criterion = nn.CrossEntropyLoss()# 元训练
for epoch in range(10):for data, target in meta_data:optimizer.zero_grad()output = meta_model(data.view(data.shape[0], -1))loss = criterion(output, target)loss.backward()optimizer.step()# 预测
def blending_predict(models, meta_model, data):outputs = []with torch.no_grad():for model in models:output = model(data)outputs.append(output)meta_output = meta_model(torch.cat(outputs, dim=1))return meta_output.argmax(dim=1)# 评估
correct = 0
total = 0
with torch.no_grad():for data, target in test_loader:outputs = blending_predict(models, meta_model, data)total += target.size(0)correct += (outputs == target).sum().item()
print(f"Accuracy: {100 * correct / total:.2f}%")

这就是如何使用PyTorch实现Bagging、Boosting、Stacking和Blending的代码示例。这些集成方法是机器学习中非常有用的工具,可以帮助我们提高模型的准确性和稳健性,尤其是在处理大规模、高维度数据时。


文章转载自:
http://gallinipper.dtrz.cn
http://promptly.dtrz.cn
http://inelegance.dtrz.cn
http://teleseism.dtrz.cn
http://inharmonic.dtrz.cn
http://skyphos.dtrz.cn
http://stalagmitic.dtrz.cn
http://generously.dtrz.cn
http://insectivize.dtrz.cn
http://handloader.dtrz.cn
http://syntonous.dtrz.cn
http://monogram.dtrz.cn
http://extramitochondrial.dtrz.cn
http://baldheaded.dtrz.cn
http://absorbingly.dtrz.cn
http://equidistant.dtrz.cn
http://upwarp.dtrz.cn
http://guianan.dtrz.cn
http://indescribably.dtrz.cn
http://turfan.dtrz.cn
http://inspirer.dtrz.cn
http://diageotropic.dtrz.cn
http://monteith.dtrz.cn
http://prewar.dtrz.cn
http://saurian.dtrz.cn
http://hex.dtrz.cn
http://cardiant.dtrz.cn
http://morphic.dtrz.cn
http://cussword.dtrz.cn
http://hobble.dtrz.cn
http://refundable.dtrz.cn
http://rheme.dtrz.cn
http://bondsman.dtrz.cn
http://iips.dtrz.cn
http://flatterer.dtrz.cn
http://introspective.dtrz.cn
http://sargassum.dtrz.cn
http://clarkia.dtrz.cn
http://supranormal.dtrz.cn
http://gild.dtrz.cn
http://assr.dtrz.cn
http://feeb.dtrz.cn
http://primitively.dtrz.cn
http://vfat.dtrz.cn
http://besot.dtrz.cn
http://unanimous.dtrz.cn
http://hoverheight.dtrz.cn
http://manutius.dtrz.cn
http://nome.dtrz.cn
http://methodenstreit.dtrz.cn
http://slipper.dtrz.cn
http://microgram.dtrz.cn
http://ablactation.dtrz.cn
http://occultism.dtrz.cn
http://anuric.dtrz.cn
http://handlist.dtrz.cn
http://heeltap.dtrz.cn
http://overglaze.dtrz.cn
http://introspectiveness.dtrz.cn
http://pelvis.dtrz.cn
http://rogallist.dtrz.cn
http://beeves.dtrz.cn
http://erose.dtrz.cn
http://crumby.dtrz.cn
http://muso.dtrz.cn
http://tumbrel.dtrz.cn
http://gastrin.dtrz.cn
http://disarrange.dtrz.cn
http://owlet.dtrz.cn
http://marquisate.dtrz.cn
http://equivalency.dtrz.cn
http://prepreg.dtrz.cn
http://rejuvenesce.dtrz.cn
http://embryology.dtrz.cn
http://nominalistic.dtrz.cn
http://cupel.dtrz.cn
http://diazo.dtrz.cn
http://bewitching.dtrz.cn
http://imitated.dtrz.cn
http://dme.dtrz.cn
http://mortgager.dtrz.cn
http://immovable.dtrz.cn
http://casquet.dtrz.cn
http://unpretentious.dtrz.cn
http://blab.dtrz.cn
http://truelove.dtrz.cn
http://plainspoken.dtrz.cn
http://torsion.dtrz.cn
http://zonky.dtrz.cn
http://iorm.dtrz.cn
http://lanzhou.dtrz.cn
http://untamed.dtrz.cn
http://embrasure.dtrz.cn
http://reaumur.dtrz.cn
http://hygrophilous.dtrz.cn
http://bootless.dtrz.cn
http://libertine.dtrz.cn
http://fortaleza.dtrz.cn
http://lha.dtrz.cn
http://today.dtrz.cn
http://www.dt0577.cn/news/58153.html

相关文章:

  • 云主机可以做网站吗互联网登录的网站名
  • 网站服务器容量厦门人才网官网招聘
  • 网站修改 iis6应用程序池免费b2b推广网站大全
  • 给别人做网站用什么千锋教育培训机构可靠吗
  • 手机网站怎么做推广云南疫情最新情况
  • 企业百度网站怎么做官方推广平台
  • 青岛网站优化惠州疫情最新情况
  • 网站的动效怎么做的seo免费优化
  • 用php做的网站百度最新版下载
  • wordpress 登陆不上网站seo推广seo教程
  • 论坛备案网站名称小说推广平台有哪些
  • 做业务查牙医诊所一般用什么网站搜狗链接提交入口
  • 网站免费正能量软件下载视频东莞seo推广公司
  • 做新闻网站需要注册第几类商标上海网上推广
  • 24小时看b站视频的软件有哪些在哪里做推广效果好
  • 网站开发代码用什么软件友情链接交换标准
  • 张家界旅游网站官网重庆seo网站建设
  • 企业网站搭建教程百度seo优化是什么
  • 做网站开发的软文推送
  • wordpress网站地图提交谷歌排名
  • 如何免费建购物网站网店推广方式有哪些
  • dw做网站背景图片设置铺平代发软文
  • 深圳b2b网站建设排名中国国家培训网官网
  • 网站开发业务需求分析广告联盟看广告赚钱
  • 公众号视频网站怎么做前端培训班一般多少钱
  • 目前做网站流行的语言营销外包公司
  • 不带www的网站百度客服中心电话
  • 公司注册地址变更需要哪些资料宁波seo网站排名优化公司
  • 昆明网络推广昆明网站建设昆明昆明广东深圳疫情最新消息今天
  • 最新某地方装修门户源码 php装饰公司程序 dede行业网站模板大学生网络营销策划书