【深度学习基础模型】极限学习机(Extreme Learning Machines, ELM)详细理解并附实现代码。

【深度学习基础模型】极限学习机(Extreme Learning Machines, ELM)详细理解并附实现代码。

【深度学习基础模型】极限学习机(Extreme Learning Machines, ELM)详细理解并附实现代码。


文章目录

  • [【深度学习基础模型】极限学习机(Extreme Learning Machines, ELM)详细理解并附实现代码。](#【深度学习基础模型】极限学习机(Extreme Learning Machines, ELM)详细理解并附实现代码。)
  • [1. 算法提出](#1. 算法提出)
  • [2. 概述](#2. 概述)
  • [3. 发展](#3. 发展)
  • [4. 应用](#4. 应用)
  • [5. 优缺点](#5. 优缺点)
  • [6. Python代码实现](#6. Python代码实现)
  • [7. 总结](#7. 总结)

参考地址:https://www.asimovinstitute.org/neural-network-zoo/

论文地址:https://www.sciencedirect.com/science/article/pii/S0925231206000385
Extreme learning machine: Theory and applications

欢迎宝子们点赞、关注、收藏!欢迎宝子们批评指正!

1. 算法提出

极限学习机 (Extreme Learning Machine, ELM)由Guang-Bin Huang于2006年提出。ELM是一种针对单隐层前馈神经网络(SLFN)的快速学习算法 。与传统的前馈神经网络(FFNN)不同,ELM不需要通过反向传播算法(Backpropagation)训练而是通过随机生成的权重和偏置,并在单步计算中通过最小二乘法拟合输出层权重

2. 概述

ELM的核心思想是使用随机初始化的输入层权重和隐藏层神经元的偏置,并通过最小二乘法直接计算出输出层的权重 。由于不需要逐步调整权重(如反向传播中的梯度下降),ELM的训练速度非常快,特别适合处理大规模数据

ELM网络结构如下:

  • 输入层:与传统FFNN类似,将输入数据传递给网络。
  • 隐藏层:随机初始化的权重和偏置,通常不进行调优。
  • 输出层:通过最小二乘法计算得到最终权重,用于拟合目标值。

3. 发展

ELM自提出以来,因其计算效率高,逐渐引起了广泛关注。随着深度学习的崛起,ELM的研究方向也发生了变化,主要集中在以下几方面:

  • 改进ELM结构:为了提高泛化能力,一些研究提出了正则化极限学习机(Regularized ELM)和在线极限学习机(Online ELM)。
  • 应用扩展:ELM逐渐在分类、回归、时间序列预测等领域得到应用,并逐步结合到集成学习等现代机器学习方法中。

4. 应用

ELM因其快速训练的特性,在多种场景中具有优势,常见的应用包括:

  • 图像识别:ELM可用于高维特征的快速分类。
  • 回归分析:在数据拟合和预测问题中,ELM通过最小二乘法快速生成回归模型。
  • 实时控制:由于训练速度快,ELM适用于需要实时响应的控制系统。

5. 优缺点

优点:

  • 训练速度快:ELM不依赖梯度下降,而是通过一次性求解输出层权重,速度远超传统的前馈神经网络。
  • 避免局部最优问题:ELM不通过迭代优化算法,因此避免了反向传播中常见的局部最优问题。

缺点:

  • 随机性较高:ELM的输入层和隐藏层权重是随机生成的,这可能导致模型的表现不稳定。
  • 表达能力有限:由于缺少反向传播和递归连接,ELM的表达能力不如深层神经网络。

6. Python代码实现

以下是一个简单的ELM分类实现示例:

csharp 复制代码
import numpy as np
from sklearn.datasets import make_classification
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 定义极限学习机类
class ExtremeLearningMachine:
    def __init__(self, input_size, hidden_size, activation='sigmoid'):
        self.input_size = input_size
        self.hidden_size = hidden_size
        self.activation = self._get_activation_function(activation)
        # 随机初始化输入层权重和偏置
        self.input_weights = np.random.randn(self.input_size, self.hidden_size)
        self.biases = np.random.randn(self.hidden_size)
    
    def _get_activation_function(self, activation):
        if activation == 'sigmoid':
            return lambda x: 1 / (1 + np.exp(-x))
        elif activation == 'tanh':
            return np.tanh
        else:
            raise ValueError("Unsupported activation function.")
    
    def fit(self, X, y):
        # 隐藏层输入
        H = self.activation(np.dot(X, self.input_weights) + self.biases)
        # 输出层权重通过最小二乘法计算
        self.output_weights = np.dot(np.linalg.pinv(H), y)
    
    def predict(self, X):
        H = self.activation(np.dot(X, self.input_weights) + self.biases)
        return np.dot(H, self.output_weights)

# 生成模拟数据集
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)
y = y.reshape(-1, 1)  # 转换为列向量

# 数据预处理
scaler = StandardScaler()
X = scaler.fit_transform(X)

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

# 初始化ELM
elm = ExtremeLearningMachine(input_size=X_train.shape[1], hidden_size=50, activation='sigmoid')

# 训练ELM
elm.fit(X_train, y_train)

# 预测并评估
y_pred = elm.predict(X_test)
y_pred = np.where(y_pred > 0.5, 1, 0)  # 二分类阈值为0.5

accuracy = accuracy_score(y_test, y_pred)
print(f"ELM分类准确率: {accuracy * 100:.2f}%")

代码解释:

  • ExtremeLearningMachine类:这是ELM的实现类,包含了输入层权重和隐藏层偏置的随机初始化。激活函数可以选择sigmoidtanh
  • fit方法:利用最小二乘法计算输出层权重。np.linalg.pinv用于计算伪逆矩阵,以求解输出层的最佳权重。
  • predict方法:根据输入数据和已训练的输出层权重,计算预测值。
  • 数据集生成:使用make_classification生成一个简单的二分类数据集,并使用StandardScaler进行标准化。
  • 训练和评估:在训练集上训练ELM模型,并在测试集上进行预测,通过accuracy_score评估模型准确率。

7. 总结

极限学习机 (ELM)以其快速训练的特点,在大规模数据和实时系统中表现出色。虽然ELM在表达能力上不如深层神经网络,但其通过随机权重和最小二乘法求解输出层权重,大幅提升了计算速度,特别适合对速度要求高的应用场景

相关推荐
KuaFuAI几秒前
微软推出的AI无代码编程微应用平台GitHub Spark和国产AI原生无代码工具CodeFlying比到底咋样?
人工智能·github·aigc·ai编程·codeflying·github spark·自然语言开发软件
明月清风徐徐7 分钟前
Scrapy爬取豆瓣电影Top250排行榜
python·selenium·scrapy
theLuckyLong8 分钟前
SpringBoot后端解决跨域问题
spring boot·后端·python
Make_magic9 分钟前
Git学习教程(更新中)
大数据·人工智能·git·elasticsearch·计算机视觉
Yongqiang Cheng11 分钟前
Python operator.itemgetter(item) and operator.itemgetter(*items)
python·operator·itemgetter
shelly聊AI14 分钟前
语音识别原理:AI 是如何听懂人类声音的
人工智能·语音识别
MavenTalk14 分钟前
Move开发语言在区块链的开发与应用
开发语言·python·rust·区块链·solidity·move
源于花海17 分钟前
论文学习(四) | 基于数据驱动的锂离子电池健康状态估计和剩余使用寿命预测
论文阅读·人工智能·学习·论文笔记
雷龙发展:Leah17 分钟前
离线语音识别自定义功能怎么用?
人工智能·音频·语音识别·信号处理·模块测试
4v1d21 分钟前
边缘计算的学习
人工智能·学习·边缘计算