Compartir tecnología

Máquina de aprendizaje extremo Python32 ELM

2024-07-12

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

imagen

Extreme Learning Machine (ELM) es un algoritmo de aprendizaje simple de red neuronal feedforward (SLFN) de una sola capa. En teoría, los algoritmos de máquina de aprendizaje extremo (ELM) tienden a proporcionar un buen rendimiento (perteneciente a los algoritmos de aprendizaje automático) con velocidades de aprendizaje extremadamente rápidas, y fueron propuestos por Huang et al. La característica principal de ELM es que su velocidad de aprendizaje es muy rápida. En comparación con los métodos tradicionales de descenso de gradiente (como la red neuronal BP), ELM no requiere un proceso iterativo. El principio básico es seleccionar aleatoriamente los pesos y sesgos de la capa oculta y luego aprender los pesos de salida minimizando el error de la capa de salida.

imagen

imagen

Los principales pasos del algoritmo ELM.

  1. Inicialice aleatoriamente los pesos y sesgos ingresados ​​​​en la capa oculta

    • Los pesos y sesgos de las capas ocultas se generan aleatoriamente y permanecen constantes durante el entrenamiento.

  2. Calcule la matriz de salida de la capa oculta (es decir, la salida de la función de activación)

    • Calcule la salida de la capa oculta utilizando una función de activación (como sigmoide, ReLU, etc.).

  3. Calcular el peso de salida

    • Los pesos desde la capa oculta hasta la capa de salida se calculan mediante el método de mínimos cuadrados.

La fórmula matemática de ELM es la siguiente:

  • Dado un conjunto de datos de entrenamiento, donde,

  • La fórmula de cálculo de la matriz de salida de la capa oculta es:

    • donde es la matriz de entrada, es la entrada de la matriz de peso a la capa oculta, es el vector de polarización y es la función de activación.

  • La fórmula de cálculo del peso de salida es:

    • Entre ellos, se encuentra la inversa generalizada de la matriz de salida de la capa oculta y es la matriz de salida.

Escenarios de aplicación del algoritmo ELM

  1. Procesamiento de conjuntos de datos a gran escala: ELM funciona bien al procesar conjuntos de datos a gran escala porque su velocidad de entrenamiento es muy rápida y es adecuado para escenarios que requieren un entrenamiento rápido de modelos, como clasificación de imágenes a gran escala, procesamiento de lenguaje natural y otras tareas.

  2. Pronóstico de la industria : ELM tiene una amplia gama de aplicaciones en el campo de la predicción industrial, como el control de calidad y la predicción de fallos de equipos en procesos de producción industrial. Puede entrenar rápidamente modelos predictivos y responder rápidamente a datos en tiempo real.

  3. El sector financiero : ELM se puede utilizar para análisis y predicción de datos financieros, como predicción del precio de las acciones, gestión de riesgos, calificación crediticia, etc. Dado que los datos financieros suelen ser de alta dimensión, la rápida velocidad de entrenamiento de ELM es ventajosa para procesar estos datos.

  4. diagnostico medico : En el campo médico, ELM se puede utilizar para tareas como la predicción de enfermedades y el análisis de imágenes médicas. Puede entrenar modelos rápidamente y clasificar o hacer retroceder datos de pacientes, lo que ayuda a los médicos a realizar diagnósticos más rápidos y precisos.

  5. Sistema de control inteligente : ELM se puede utilizar en sistemas de control inteligentes, como hogares inteligentes, sistemas de transporte inteligentes, etc. Al conocer las características y patrones del entorno, ELM puede ayudar al sistema a tomar decisiones inteligentes y mejorar la eficiencia y el rendimiento del sistema.

Python implementa el algoritmo ELM

Usamosmake_moons Conjunto de datos, un conjunto de datos de juguete comúnmente utilizado para tareas de clasificación de aprendizaje automático y aprendizaje profundo. Genera puntos distribuidos en dos formas de media luna que se cruzan, ideal para demostrar los límites de rendimiento y decisión de los algoritmos de clasificación.

  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. '''

Salida visual:

imagen

El contenido anterior está resumido de Internet. Si es útil, reenvíelo. ¡Hasta la próxima!