Python32 极限学习机ELM

news2024/10/8 12:47:58

图片

极限学习机(ELM)是一种简单的单层前馈神经网络(SLFN)学习算法。理论上,极限学习机算法(ELM)往往以极快的学习速度提供良好的性能(属于机器学习算法),由Huang等人提出。ELM的主要特点是它的学习速度非常快,相比传统的梯度下降方法(如BP神经网络),ELM不需要迭代过程。其基本原理是随机选择隐藏层的权重和偏置,然后通过最小化输出层的误差来学习输出权重。

图片

img

ELM算法的主要步骤

  1. 随机初始化输入到隐藏层的权重和偏置

    • 隐藏层的权重和偏置是随机生成的,并且在训练过程中保持不变。

  2. 计算隐藏层的输出矩阵(即激活函数的输出)

    • 使用激活函数(如sigmoid、ReLU等)计算隐藏层的输出。

  3. 计算输出权重

    • 通过最小二乘法计算隐藏层到输出层的权重。

ELM的数学公式如下:

  • 给定一个训练数据集 ,其中 ,

  • 隐藏层的输出矩阵 的计算公式为:

    • 其中,是输入矩阵, 是输入到隐藏层的权重矩阵,是偏置向量,是激活函数。

  • 输出权重 的计算公式为:

    • 其中,是隐藏层输出矩阵的广义逆,是输出矩阵。

ELM算法的应用场景

  1. 大规模数据集处理:ELM 在处理大规模数据集时表现良好,因为它的训练速度很快,适用于需要快速训练模型的场景,比如大规模图像分类、自然语言处理等任务。

  2. 工业预测:ELM 在工业预测领域有广泛的应用,比如工业生产过程中的质量控制、设备故障预测等。它可以快速训练预测模型,并对实时数据做出快速响应。

  3. 金融领域:ELM 可以用于金融数据分析和预测,比如股票价格预测、风险管理、信用评分等。由于金融数据通常是高维度的,ELM 的快速训练速度对处理这些数据很有优势。

  4. 医学诊断:在医学领域,ELM 可以用于疾病预测、医学影像分析等任务。它可以快速训练模型,并对患者数据进行分类或回归,帮助医生做出更快速和准确的诊断。

  5. 智能控制系统:ELM 可以用于智能控制系统中,比如智能家居、智能交通系统等。通过学习环境的特征和规律,ELM 可以帮助系统做出智能决策,提高系统的效率和性能。

Python实现ELM算法

我们使用 make_moons 数据集,这是一个常用于机器学习和深度学习分类任务的玩具数据集。它生成的点分布成两个相交的半月形状,非常适合用于展示分类算法的性能和决策边界。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score

# 定义极限学习机(ELM)类
class ELM:
    def __init__(self, n_hidden_units):
        # 初始化隐藏层神经元数量
        self.n_hidden_units = n_hidden_units

    def _sigmoid(self, x):
        # 定义Sigmoid激活函数
        return 1 / (1 + np.exp(-x))

    def fit(self, X, y):
        # 随机初始化输入权重
        self.input_weights = np.random.randn(X.shape[1], self.n_hidden_units)
        # 随机初始化偏置
        self.biases = np.random.randn(self.n_hidden_units)
        # 计算隐藏层输出矩阵H
        H = self._sigmoid(np.dot(X, self.input_weights) + self.biases)
        # 计算输出权重
        self.output_weights = np.dot(np.linalg.pinv(H), y)

    def predict(self, X):
        # 计算隐藏层输出矩阵H
        H = self._sigmoid(np.dot(X, self.input_weights) + self.biases)
        # 返回预测结果
        return np.dot(H, self.output_weights)

# 创建数据集并进行预处理
X, y = make_moons(n_samples=1000, noise=0.2, random_state=42)
# 将标签转换为二维数组(ELM需要二维数组作为标签)
y = y.reshape(-1, 1)

# 标准化数据
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 拆分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.3, random_state=42)

# 训练和比较ELM与MLP

# 训练ELM
elm = ELM(n_hidden_units=10)
elm.fit(X_train, y_train)
y_pred_elm = elm.predict(X_test)
# 将预测结果转换为类别标签
y_pred_elm_class = (y_pred_elm > 0.5).astype(int)
# 计算ELM的准确率
accuracy_elm = accuracy_score(y_test, y_pred_elm_class)

# 训练MLP
mlp = MLPClassifier(hidden_layer_sizes=(10,), max_iter=1000, random_state=42)
mlp.fit(X_train, y_train.ravel())
# 预测测试集结果
y_pred_mlp = mlp.predict(X_test)
# 计算MLP的准确率
accuracy_mlp = accuracy_score(y_test, y_pred_mlp)

# 打印ELM和MLP的准确率
print(f"ELM Accuracy: {accuracy_elm}")
print(f"MLP Accuracy: {accuracy_mlp}")

# 可视化结果
def plot_decision_boundary(model, X, y, ax, title):
    # 设置绘图范围
    x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
    y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
    # 创建网格
    xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.01),
                         np.arange(y_min, y_max, 0.01))
    # 预测网格中的所有点
    Z = model(np.c_[xx.ravel(), yy.ravel()])
    Z = (Z > 0.5).astype(int)
    Z = Z.reshape(xx.shape)
    # 画出决策边界
    ax.contourf(xx, yy, Z, alpha=0.8)
    # 画出数据点
    ax.scatter(X[:, 0], X[:, 1], c=y.ravel(), edgecolors='k', marker='o')
    ax.set_title(title)

# 创建图形
fig, axs = plt.subplots(1, 2, figsize=(12, 5))

# 画出ELM的决策边界
plot_decision_boundary(lambda x: elm.predict(x), X_test, y_test, axs[0], "ELM Decision Boundary")
# 画出MLP的决策边界
plot_decision_boundary(lambda x: mlp.predict(x), X_test, y_test, axs[1], "MLP Decision Boundary")

# 显示图形
plt.show()

# 输出:
'''
ELM Accuracy: 0.9666666666666667
MLP Accuracy: 0.9766666666666667
'''

可视化输出:

图片

以上内容总结自网络,如有帮助欢迎转发,我们下次再见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1917086.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MybatisPlus 使用教程

MyBatisPlus使用教程 文章目录 MyBatisPlus使用教程1、使用方式1.1 引入依赖1.2 构建mapper接口 2、常用注解2.1 TableName2.2 TableId2.3 TableField MyBatisPlus顾名思义便是对MyBatis的加强版,但两者本身并不冲突(只做增强不做改变): 引入它并不会对原…

krpano开启日志公能

<krpano version"1.21" title"博物馆" debugmode"true" > 之后鼠标右键菜单栏最后一行 点击&#xff08;开启后会发生变化&#xff09;。

【云岚到家】-day05-4-项目迁移-商品搜索

【云岚到家】-day05-4-项目迁移-商品搜索 2 项目迁移-商品搜索2.1 迁移目标2.2 能力基础2.2.1 索引同步方案设计能力2.2.2 Elasticsearch全文检索应用能力 2.3 需求分析2.3.1 界面原型2.3.2 功能列表梳理 2.4 系统设计2.4.1 索引结构2.4.2 索引同步方案2.4.3 搜索自动补全2.4.4…

SpringBoot项目架构实战之“网关zuul搭建“

第三章 网关zuul搭建 前言&#xff1a; 1、主要功能 zuul主要提供动态路由&#xff08;内置ribbon实现&#xff09;和过滤&#xff08;可以做统一鉴权过滤器、灰度发布过滤器、黑白名单IP过滤器、服务限流过滤器&#xff08;可以配合Sentinel实现&#xff09;&#xff09;功能…

【IT领域新生必看】解锁 `final` 关键字的秘密:Java 编程中的终极武器

文章目录 引言什么是 final 关键字&#xff1f;一、 final 变量final 局部变量final 实例变量final 静态变量 二、 final 方法三、 final 类四、 final 关键字的实际应用1. 定义常量2. 防止方法被重写3. 创建不可变类4. 优化性能 五、 final 的一些常见误区1. final 变量不能在…

力扣2356.二维差分模板——子矩阵元素加1

力扣2356.二维差分模板——子矩阵元素加1 模板题 最后将n2*n2的矩阵删去周围一圈变成n*n矩阵的操作 class Solution {public:vector<vector<int>> rangeAddQueries(int n, vector<vector<int>>& queries) {vector<vector<int>> res…

ONLYOFFICE 8.1版本版本桌面编辑器测评

ONLYOFFICE官网链接&#xff1a;ONLYOFFICE - 企业在线办公应用软件 | ONLYOFFICE ONLYOFFICE在线办公套件&#xff1a;在线办公套件 | ONLYOFFICE ONLYOFFICE在线PDF编辑器、阅读器和转换器&#xff1a;在线PDF查看器和转换器 | ONLYOFFICE ONLYOFFICE 8.1版本桌面编辑器是…

【OC】巧用UIStackView简化布局

UIStackView的运用 文章目录 UIStackView的运用引入UIStackView的作用UIStackView的属性compression resistance 和 huggingaxisalignmentDistributionspacing UIStackView的方法UIStackView的示例 引入 在仿写ZARA的过程之中&#xff0c;我看到软件之中是有大量的按钮排列在一…

蓝卓创始人褚健:未来工厂需要一个“工业安卓”

作为国内自动控制的科学家&#xff0c;过去近三十年的时间&#xff0c;褚健教授一直服务于化工行业、炼油石化等流程工业领域。褚健表示&#xff0c;因为涉及到安全生产和环保要求&#xff0c;流程工业企业的自动化水平高一些&#xff0c;但总体来看&#xff0c;目前中国大部分…

【网络安全】SSRF 之 Azure Digital Twins Explorer

未经许可&#xff0c;不得转载。 文章目录 正文 正文 Azure Digital Twins 是一个微软下的平台服务&#xff0c;允许开发者创建和运行数字孪生模型&#xff0c;这些模型能够反映物理世界中的实体及其关系&#xff0c;通过这些模型可以进行监控、分析和预测等操作。 1、进入主…

昇思25天学习打卡营第17天|基于 MindSpore 实现 BERT 对话情绪识别

基于 MindSpore 实现 BERT 对话情绪识别 BERT介绍 BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;是一种基于Transformer架构的预训练语言模型&#xff0c;由谷歌在2018年提出。从以下6个方面来介绍BERT&#xff1a; 1. 预训练和微调&…

解决keil调试遇到的hardlfault问题

在程序开发过程中遇到的程序死机问题 导致死机的原因&#xff1a;内存溢出&#xff0c;堆栈溢出&#xff0c;数组越界&#xff0c;中断错误。。。。。。 出现这个问题&#xff0c;首先查看线程的调度关系 看最后是在哪个位置死机&#xff0c;如果rt_current_thread在main_thre…

[AI 大模型] 阿里巴巴 通义千问

文章目录 [AI 大模型] 阿里巴巴 通义千问简介模型架构发展新技术和优势示例 [AI 大模型] 阿里巴巴 通义千问 简介 阿里巴巴的 通义千问 是由阿里云开发的一款大型语言模型&#xff0c;旨在为用户提供高效、智能的自然语言处理服务。 通义千问能够处理多种语言输入&#xff0c…

麒麟服务器操作系统2303SP3安装tigervnc

原文链接&#xff1a;麒麟服务器操作系统2303SP3安装tigervnc Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于在麒麟服务器操作系统2303SP3上安装TigerVNC的文章。TigerVNC是一款高性能的远程桌面查看器&#xff0c;它支持多种操作系统&#xff0c;允许用户在远…

Oracle序列迁移重建

原因&#xff1a;oracle数据导入后序列不一致 解决办法&#xff1a;从原库中导出一份最新的序列号&#xff0c;在目标库中导入 1.删除目标库该用户下的所有索引 select DROP SEQUENCE ||sequence_name || ; from dba_sequences where sequence_owner xxxxx;2.查询出所有序列…

DepthAnything(2): 基于ONNXRuntime在ARM(aarch64)平台部署DepthAnything

DepthAnything(1): 先跑一跑Depth Anything_depth anything离线怎么跑-CSDN博客 目录 1. 写在前面 2. 安装推理组件 3. 生成ONNX 4. 准备ONNXRuntime库 5. API介绍 6. 例程 1. 写在前面 DepthAnything是一种能在任何情况下处理任何图像的简单却又强大的深度估计模型。 …

汽车预约维修小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;技师管理&#xff0c;技师信息管理&#xff0c;用户预约管理&#xff0c;取消预约管理&#xff0c;订单信息管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;技师信息&a…

揭秘焦虑症的“隐形杀手“:这些并发症可能悄悄来袭!

揭秘焦虑症的"隐形杀手"&#xff1a;这些并发症可能悄悄来袭&#xff01;在快节奏的现代生活中&#xff0c;焦虑症已经成为越来越多人面临的心理健康挑战。然而&#xff0c;除了广为人知的焦虑、紧张、失眠等症状外&#xff0c;焦虑症还可能引发一系列看似与焦虑无关…

每天五分钟计算机视觉:目标检测算法之R-CNN

本文重点 在计算机视觉领域,目标检测一直是一个核心问题,旨在识别图像中的物体并定位其位置。随着深度学习技术的发展,基于卷积神经网络(CNN)的目标检测算法取得了显著的进步。其中,R-CNN(Regions with CNN features)是一种开创性的目标检测框架,为后续的研究提供了重…

【高中数学/指数、对数】已知9^m=10,a=10^m-11,b=8^m-9,则ab两数和0的大小关系是?(2022年全国统考高考真题)

【问题】 已知9^m10,a10^m-11,b8^m-9,则&#xff08;&#xff09; A.a>0>b B.a>b>0 C.b>a>0 D.b>0>a 【解答】 首先注意到10^log10_11-110,8^log8_9-90&#xff0c; 问题就转化为log8_9,log9_10,log10_11谁大谁小的问题&#xff0c; 再进一步…