遗传算法优化极限学习机做预测,运行直接出图,包含真实值,ELM,GA-ELM对比,方便比较。 智能优化算法,粒子群算法,花授粉算法,麻雀算法,鲸鱼算法,灰狼算法等,优化BP神经网络,支持向量机,极限学习机等分类和预测。 不要拿网上下载的跟我的算法比较,我都是经过实测的
在数据预测领域,找到高效准确的模型至关重要。今天咱就来唠唠遗传算法优化极限学习机做预测,以及其他智能优化算法在类似模型中的应用。
遗传算法优化极限学习机预测
极限学习机(ELM)作为一种快速的单隐层前馈神经网络算法,在预测方面有着不错的表现,但有时也会陷入局部最优解。这时候遗传算法(GA)就派上用场啦,它能帮助ELM跳出局部最优,找到更好的解。
实现代码及分析
import numpy as np import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.datasets import make_regression from sklearn.metrics import mean_squared_error # 生成一些随机的回归数据 X, y = make_regression(n_samples = 1000, n_features = 10, noise = 0.5, random_state = 42) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 42) # 定义简单的极限学习机类 class ELM: def __init__(self, n_hidden): self.n_hidden = n_hidden def fit(self, X, y): n_samples, n_features = X.shape self.beta = np.random.randn(self.n_hidden, 1) self.weights = np.random.randn(n_features, self.n_hidden) self.bias = np.random.randn(self.n_hidden, 1) H = np.tanh(X.dot(self.weights) + self.bias.T) self.beta = np.linalg.pinv(H).dot(y) def predict(self, X): H = np.tanh(X.dot(self.weights) + self.bias.T) return H.dot(self.beta) # 定义遗传算法相关函数 def fitness(individual, X, y): n_hidden = individual[0] elm = ELM(int(n_hidden)) elm.fit(X, y) y_pred = elm.predict(X) return mean_squared_error(y, y_pred) def generate_individual(): return [np.random.randint(10, 100)] def selection(population, fitness_scores, num_parents): parents = [] for _ in range(num_parents): best_index = np.argmin(fitness_scores) parents.append(population[best_index]) population = np.delete(population, best_index, axis = 0) fitness_scores = np.delete(fitness_scores, best_index) return np.array(parents) def crossover(parents, num_offspring): offspring = [] for _ in range(num_offspring): parent1, parent2 = np.random.choice(len(parents), 2, replace = False) child = [(parents[parent1][0] + parents[parent2][0]) / 2] offspring.append(child) return np.array(offspring) def mutation(offspring, mutation_rate): for i in range(len(offspring)): if np.random.rand() < mutation_rate: offspring[i][0] = np.random.randint(10, 100) return offspring # 遗传算法参数设置 pop_size = 50 num_generations = 100 num_parents = 10 num_offspring = pop_size - num_parents mutation_rate = 0.1 population = np.array([generate_individual() for _ in range(pop_size)]) for generation in range(num_generations): fitness_scores = np.array([fitness(ind, X_train, y_train) for ind in population]) parents = selection(population, fitness_scores, num_parents) offspring = crossover(parents, num_offspring) offspring = mutation(offspring, mutation_rate) population = np.vstack((parents, offspring)) # 使用优化后的参数构建GA - ELM best_individual = population[np.argmin([fitness(ind, X_train, y_train) for ind in population])] ga_elm = ELM(int(best_individual[0])) ga_elm.fit(X_train, y_train) ga_elm_pred = ga_elm.predict(X_test) # 构建普通ELM elm = ELM(50) elm.fit(X_train, y_train) elm_pred = elm.predict(X_test) # 绘图比较 plt.figure(figsize=(12, 6)) plt.plot(y_test, label='真实值', marker='o') plt.plot(elm_pred, label='ELM预测值', marker='s') plt.plot(ga_elm_pred, label='GA - ELM预测值', marker='^') plt.xlabel('样本索引') plt.ylabel('预测值/真实值') plt.title('真实值、ELM和GA - ELM预测值对比') plt.legend() plt.show()代码分析:
- 首先,我们用
make_regression生成了一些回归数据,并划分了训练集和测试集。 - 接着定义了简单的
ELM类,在fit方法中随机初始化权重和偏置,计算隐藏层输出,然后通过伪逆求解输出权重beta。predict方法则利用训练好的权重进行预测。 - 遗传算法部分,
fitness函数用于评估个体(这里个体代表隐藏层神经元数量)的适应度,也就是计算预测的均方误差。generate_individual生成初始个体,selection选择适应度高的个体作为父母,crossover进行交叉操作生成后代,mutation对后代进行变异。 - 经过多代遗传算法优化后,我们根据最优个体构建
GA - ELM模型,并与普通ELM模型进行预测对比,最后绘图展示真实值、ELM预测值和GA - ELM预测值,方便直观比较。
其他智能优化算法在模型优化中的应用
除了遗传算法,像粒子群算法、花授粉算法、麻雀算法、鲸鱼算法、灰狼算法等智能优化算法,也能对BP神经网络、支持向量机、极限学习机等分类和预测模型进行优化。
遗传算法优化极限学习机做预测,运行直接出图,包含真实值,ELM,GA-ELM对比,方便比较。 智能优化算法,粒子群算法,花授粉算法,麻雀算法,鲸鱼算法,灰狼算法等,优化BP神经网络,支持向量机,极限学习机等分类和预测。 不要拿网上下载的跟我的算法比较,我都是经过实测的
以粒子群算法(PSO)优化BP神经网络为例,BP神经网络在训练过程中容易陷入局部最优,而PSO通过模拟鸟群觅食行为,让粒子(代表神经网络的参数)在解空间中不断搜索最优解。每个粒子根据自身历史最优位置和全局最优位置来调整自己的速度和位置,从而帮助BP神经网络找到更好的参数,提升模型性能。
# 这里简单示意下PSO优化BP神经网络的关键代码 import numpy as np # 假设BP神经网络有输入层、隐藏层、输出层 # 定义粒子的位置,这里假设位置代表权重和偏置参数 def initialize_particles(num_particles, num_inputs, num_hidden, num_outputs): positions = [] for _ in range(num_particles): w1 = np.random.randn(num_inputs, num_hidden) b1 = np.random.randn(num_hidden) w2 = np.random.randn(num_hidden, num_outputs) b2 = np.random.randn(num_outputs) particle = np.concatenate((w1.flatten(), b1, w2.flatten(), b2)) positions.append(particle) return np.array(positions) # 计算适应度,即预测误差 def fitness_pso(position, X, y, num_inputs, num_hidden, num_outputs): w1 = position[:num_inputs * num_hidden].reshape((num_inputs, num_hidden)) b1 = position[num_inputs * num_hidden:num_inputs * num_hidden + num_hidden] w2 = position[num_inputs * num_hidden + num_hidden:num_inputs * num_hidden + num_hidden + num_hidden * num_outputs].reshape((num_hidden, num_outputs)) b2 = position[-num_outputs:] # 简单的前向传播计算预测值 hidden_layer = np.tanh(np.dot(X, w1) + b1) output_layer = np.dot(hidden_layer, w2) + b2 error = np.mean((y - output_layer) ** 2) return error # PSO更新粒子速度和位置 def update_particles(positions, velocities, pbest_positions, pbest_fitness, gbest_position, gbest_fitness, c1, c2, w): r1 = np.random.rand(*positions.shape) r2 = np.random.rand(*positions.shape) velocities = w * velocities + c1 * r1 * (pbest_positions - positions) + c2 * r2 * (gbest_position - positions) positions = positions + velocities return positions, velocities这段代码只是简单示意了PSO优化BP神经网络的部分关键操作,实际应用中还需要更多完整的训练和评估流程。
总之,这些智能优化算法为模型优化提供了丰富的选择,能显著提升分类和预测模型的性能。不过要注意,每种算法都有其特点和适用场景,实际应用时需要根据具体问题进行调整和选择,而且千万不要拿网上下载未经实测的算法跟自己精心实测的算法比较呀,咱得保证实验的可靠性和准确性。