技術共有

Python32 エクストリーム ラーニング マシン ELM

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

写真

Extreme Learning Machine (ELM) は、シンプルな単層フィードフォワード ニューラル ネットワーク (SLFN) 学習アルゴリズムです。理論的には、極限学習機械アルゴリズム (ELM) は、非常に速い学習速度で (機械学習アルゴリズムに属する) 優れたパフォーマンスを提供する傾向があり、Huang らによって提案されました。 ELM の主な特徴は、従来の勾配降下法 (BP ニューラル ネットワークなど) と比較して、反復プロセスが必要ないことです。基本原理は、隠れ層の重みとバイアスをランダムに選択し、出力層の誤差を最小限に抑えて出力重みを学習することです。

写真

画像

ELM アルゴリズムの主なステップ

  1. 隠れ層への重みとバイアス入力をランダムに初期化します。

    • 隠れ層の重みとバイアスはランダムに生成され、トレーニング中は一定のままです。

  2. 隠れ層の出力行列 (つまり、活性化関数の出力) を計算します。

    • 活性化関数 (シグモイド、ReLU など) を使用して隠れ層の出力を計算します。

  3. 出力重量の計算

    • 隠れ層から出力層までの重みは最小二乗法で計算されます。

ELM の数式は次のとおりです。

  • 与えられたトレーニング データセット 、ここで、

  • 隠れ層の出力行列の計算式は次のとおりです。

    • ここで、 は入力行列、 は隠れ層への重み行列入力、 はバイアス ベクトル、 は活性化関数です。

  • 出力重みの計算式は次のとおりです。

    • その中で、 は隠れ層出力行列の一般化逆行列であり、 は出力行列です。

ELMアルゴリズムの応用シナリオ

  1. 大規模なデータセットの処理: ELM は、トレーニング速度が非常に速いため、大規模なデータ セットを処理する場合に優れたパフォーマンスを発揮し、大規模な画像分類、自然言語処理、その他のタスクなど、モデルの高速トレーニングが必要なシナリオに適しています。

  2. 業界の予測 :ELMは、工業生産プロセスにおける品質管理や設備の故障予測など、産業予測の分野で幅広い用途があります。予測モデルを迅速にトレーニングし、リアルタイム データに迅速に対応できます。

  3. 金融セクター : ELM は、株価予測、リスク管理、信用スコアリングなどの財務データの分析と予測に使用できます。財務データは通常高次元であるため、ELM のトレーニング速度が速いことは、これらのデータの処理に有利です。

  4. 医療診断 :医療分野では、ELMは病気の予測や医療画像解析などの業務に活用できます。モデルを迅速にトレーニングし、患者データを分類または回帰できるため、医師がより迅速かつ正確な診断を行えるようになります。

  5. インテリジェント制御システム : ELM は、スマート ホーム、高度道路交通システムなどのインテリジェント制御システムで使用できます。 ELM は、環境の特性とパターンを学習することで、システムがインテリジェントな意思決定を行い、システムの効率とパフォーマンスを向上させるのに役立ちます。

Python は ELM アルゴリズムを実装します

を使用しておりますmake_moonsデータセット。機械学習および深層学習の分類タスクに一般的に使用されるおもちゃのデータセット。 2 つの交差する半月形に分散された点を生成します。これは、分類アルゴリズムのパフォーマンスと決定境界を実証するのに最適です。

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. from sklearn.datasets import make_moons
  4. from sklearn.model_selection import train_test_split
  5. from sklearn.neural_network import MLPClassifier
  6. from sklearn.preprocessing import StandardScaler
  7. from sklearn.metrics import accuracy_score
  8. # 定义极限学习机(ELM)类
  9. class ELM:
  10.     def __init__(self, n_hidden_units):
  11.         # 初始化隐藏层神经元数量
  12.         self.n_hidden_units = n_hidden_units
  13.     def _sigmoid(self, x):
  14.         # 定义Sigmoid激活函数
  15.         return 1 / (1 + np.exp(-x))
  16.     def fit(self, X, y):
  17.         # 随机初始化输入权重
  18.         self.input_weights = np.random.randn(X.shape[1], self.n_hidden_units)
  19.         # 随机初始化偏置
  20.         self.biases = np.random.randn(self.n_hidden_units)
  21.         # 计算隐藏层输出矩阵H
  22.         H = self._sigmoid(np.dot(X, self.input_weights) + self.biases)
  23.         # 计算输出权重
  24.         self.output_weights = np.dot(np.linalg.pinv(H), y)
  25.     def predict(self, X):
  26.         # 计算隐藏层输出矩阵H
  27.         H = self._sigmoid(np.dot(X, self.input_weights) + self.biases)
  28.         # 返回预测结果
  29.         return np.dot(H, self.output_weights)
  30. # 创建数据集并进行预处理
  31. X, y = make_moons(n_samples=1000, noise=0.2random_state=42)
  32. # 将标签转换为二维数组(ELM需要二维数组作为标签)
  33. = y.reshape(-11)
  34. # 标准化数据
  35. scaler = StandardScaler()
  36. X_scaled = scaler.fit_transform(X)
  37. # 拆分训练集和测试集
  38. X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.3random_state=42)
  39. # 训练和比较ELM与MLP
  40. # 训练ELM
  41. elm = ELM(n_hidden_units=10)
  42. elm.fit(X_train, y_train)
  43. y_pred_elm = elm.predict(X_test)
  44. # 将预测结果转换为类别标签
  45. y_pred_elm_class = (y_pred_elm > 0.5).astype(int)
  46. # 计算ELM的准确率
  47. accuracy_elm = accuracy_score(y_test, y_pred_elm_class)
  48. # 训练MLP
  49. mlp = MLPClassifier(hidden_layer_sizes=(10,), max_iter=1000random_state=42)
  50. mlp.fit(X_train, y_train.ravel())
  51. # 预测测试集结果
  52. y_pred_mlp = mlp.predict(X_test)
  53. # 计算MLP的准确率
  54. accuracy_mlp = accuracy_score(y_test, y_pred_mlp)
  55. # 打印ELM和MLP的准确率
  56. print(f"ELM Accuracy: {accuracy_elm}")
  57. print(f"MLP Accuracy: {accuracy_mlp}")
  58. # 可视化结果
  59. def plot_decision_boundary(model, X, y, ax, title):
  60.     # 设置绘图范围
  61.     x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
  62.     y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
  63.     # 创建网格
  64.     xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.01),
  65.                          np.arange(y_min, y_max, 0.01))
  66.     # 预测网格中的所有点
  67.     Z = model(np.c_[xx.ravel(), yy.ravel()])
  68.     Z = (Z > 0.5).astype(int)
  69.     Z = Z.reshape(xx.shape)
  70.     # 画出决策边界
  71.     ax.contourf(xx, yy, Z, alpha=0.8)
  72.     # 画出数据点
  73.     ax.scatter(X[:, 0], X[:, 1], c=y.ravel(), edgecolors='k', marker='o')
  74.     ax.set_title(title)
  75. # 创建图形
  76. fig, axs = plt.subplots(12, figsize=(125))
  77. # 画出ELM的决策边界
  78. plot_decision_boundary(lambda x: elm.predict(x), X_test, y_test, axs[0], "ELM Decision Boundary")
  79. # 画出MLP的决策边界
  80. plot_decision_boundary(lambda x: mlp.predict(x), X_test, y_test, axs[1], "MLP Decision Boundary")
  81. # 显示图形
  82. plt.show()
  83. # 输出:
  84. '''
  85. ELM Accuracy: 0.9666666666666667
  86. MLP Accuracy: 0.9766666666666667
  87. '''

視覚的な出力:

写真

上記の内容はインターネットからまとめたものです。お役に立ちましたら、また次回お楽しみください。