极限学习(elm)实现波士顿房价预测

WOA优化极限学习机:提升ELM预测稳定性的实战指南 机器学习中的参数优化是提升模型性能的关键环节,传统极限学习机(ELM)依赖随机初始化的权重和偏置,常导致预测结果不稳定。智能优化算法通过模拟自然界的智能行为,如鲸鱼优化算法(WOA)模仿座头鲸捕食策略,能有效解决参数优化问题。这类算法在工程实践中展现出两大核心价值:提升模型收敛速度和增强泛化能力。在工业预测、风电功率预测等场景中,WOA与ELM的结合显著降低了预测误差标准差。通过参数编码、适应度函数设计等关键技术,该混合模型实现了比传统PSO-ELM更高的预测精度,为机器学习模型的稳定部署提供了新思路。 阅读详情
# import numpy as np
from sklearn.preprocessing import OneHotEncoder  # , LabelEncoder
import numpy as np
from sklearn.datasets import load_iris  # 数据集加载
from sklearn.model_selection import train_test_split  # 数据集的分割函数
from sklearn.preprocessing import StandardScaler  # 数据预处理
# 引入包含数据验证方法的包
from sklearn import metrics


class HiddenLayer:
    def __init__(self, x, num):  # x:输入矩阵   num:隐含层神经元个数
        row = x.shape[0]
        columns = x.shape[1]
        rnd = np.random.RandomState(4444)
        self.w = rnd.uniform(-1, 1, (columns, num))  #
        self.b = np.zeros([row, num], dtype=float)  # 随机设定隐含层神经元阈值,即bi的值
        for i in range(num):
            rand_b = rnd.uniform(-0.4, 0.4)  # 随机产生-0.4 到 0.4 之间的数
            for j in range(row):
                self.b[j, i] = rand_b  # 设定输入层与隐含层的连接权值
        self.h = self.sigmoid(np.dot(x, self.w) + self.b)  # 计算隐含层输出矩阵H
        self.H_ = np.linalg.pinv(self.h)  # 获取H的逆矩阵
        # print(self.H_.shape)

    # 定义激活函数g(x) ,需为无限可微函数
    def sigmoid(self, x):
        print(x)
        return 1.0 / (1 + np.exp(-x))

    '''  若进行分析的训练数据为回归问题,则使用该方式 ,计算隐含层输出权值,即β '''

    def regressor_train(self, T):
        C = 2
        I = len(T)
        sub_former = np.dot(np.transpose(self.h), self.h) + I / C
        all_m = np.dot(np.linalg.pinv(sub_former), np.transpose(self.h))
        T = T.reshape(-1, 1)
        self.beta = np.dot(all_m, T)
        return self.beta

    """
           计算隐含层输出权值,即β 
    """

    def classifisor_train(self, T):
        en_one = OneHotEncoder()
        # print(T)
        T = en_one.fit_transform(T.reshape(-1, 1)).toarray()  # 独热编码之后一定要用toarray()转换成正常的数组
        # print(T)
        C = 3
        I = len(T)
        sub_former = np.dot(np.transpose(self.h), self.h) + I / C
        all_m = np.dot(np.linalg.pinv(sub_former), np.transpose(self.h))
        self.beta = np.dot(all_m, T)
        return self.beta

    def regressor_test(self, test_x):
        b_row = test_x.shape[0]
        h = self.sigmoid(np.dot(test_x, self.w) + self.b[:b_row, :])
        result = np.dot(h, self.beta)
        return result

    def classifisor_test(self, test_x):
        b_row = test_x.shape[0]
        h = self.sigmoid(np.dot(test_x, self.w) + self.b[:b_row, :])
        result = np.dot(h, self.beta)
        result = [item.tolist().index(max(item.tolist())) for item in result]
        return result


'''
     train_data:被划分的样本特征集

     train_target:被划分的样本标签

     test_size:如果是浮点数,在0-1之间,表示样本占比;如果是整数的话就是样本的数量

     random_state:是随机数的种子。// 填0或不填,每次都会不一样。
'''

data_X = []
data_Y = []

with open('boston_house_prices.csv') as f:
    for line in f.readlines():
        line = line.split(',')
        data_X.append(line[:-1])
        data_Y.append(line[-1:])
# 转换为nparray
data_X = np.array(data_X, dtype='float32')
data_Y = np.array(data_Y, dtype='float32')

for i in range(data_X.shape[1]):
    _min = np.min(data_X[:, i])  # 每一列的最小值
    _max = np.max(data_X[:, i])  # 每一列的最大值
    data_X[:, i] = (data_X[:, i] - _min) / (_max - _min)  # 归一化到0-1之间

# 分割训练集、测试集
x_train, x_test, y_train, y_test = train_test_split(data_X,  # 被划分的样本特征集
                                                    data_Y,  # 被划分的样本标签
                                                    test_size=0.2,  # 测试集占比
                                                    random_state=1)  # 随机数种子,在需要重复试验的时候,保证得到一组一样的随机数

a = HiddenLayer(x_train, 90)  # data_X
a.regressor_train(y_train)

result = a.regressor_test(x_test)
sum_cost = 0
j = 0
for i in result:
    infer_result = i  # 经过预测后的值
    ground_truth = y_test[j]  # 真实值
    # if infer_result-ground_truth>0 or infer_result-ground_truth<0:
    #     infer_result = ground_truth
    cost = np.power(infer_result - ground_truth, 2)
    sum_cost += cost
    j += 1
print("平均误差为:", sum_cost / j)

###画图###########################################################################
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(20, 3))  # dpi参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80
axes = fig.add_subplot(1, 1, 1)
line1, = axes.plot(range(len(result)), result, 'b--', label='ELM', linewidth=2)
line3, = axes.plot(range(len(y_test)), y_test, 'g', label='true')
axes.grid()
fig.tight_layout()
plt.legend(handles=[line1, line3])
plt.title('ELM')
plt.show()

原理的话比较简单,就不多介绍了。

直接上结果拟合图:

效果不算很好,可以通过调隐含层的神经以及其他参数来调节。本人也没有很下功夫去调。

极限学习机与群体智能优化算法融合实战 机器学习中的回归预测问题常面临训练效率与模型稳定性的平衡挑战。极限学习机(ELM)通过独特的单隐层结构和随机权重初始化,在保持预测性能的同时显著提升训练速度,但其随机性带来的不稳定性问题亟待解决。群体智能优化算法如粒子群优化(PSO)和鲸鱼优化算法(WOA)通过模拟自然生物行为,能有效优化ELM的权重参数。这些算法不仅解决了ELM的稳定性问题,还在电力负荷预测等实际应用中实现了15%以上的精度提升。本文结合Matlab实现,详细解析了优化ELM的核心策略与工程实践技巧,为工业级预测任务提供可靠解决方案。 阅读详情

相关推荐

KELM回归预测实战:从理论推导到Matlab代码实现

本文详细介绍了KELM回归预测的实战应用,从理论推导到Matlab代码实现。通过核技巧的应用,KELM在处理非线性回归任务时表现出色,特别是在工业传感器数据和房价预测等场景中。文章还提供了数据预处理、参数调优的实用技巧,并附有完整的Matlab代码示例,帮助读者快速掌握KELM回归预测的核心技术。

weixin_42520573的博客 75

删除txt文件某列元素(python)

删除文件最后一列数据

starlight1231的博客 4016

使用遗传算法优化ELM预测的MATLAB实现

初始化种群:我们初始化一个包含多个个体的种群,每个个体是一个包含三个参数的向量,分别为ELM网络中的输入层神经元数、隐层神经元数和输出层神经元数。在这个例子中,我们使用随机生成的训练和测试数据,并使用100个个体、50代、20%的精英率、80%的交叉率和5%的变异率来执行遗传算法。最后,我们计算均方误差并将其返回。选择新的群体:我们选择适应度较高的个体来组成新的种群,并重复步骤3-5,直到达到最大迭代次数或者找到最优解。生成交叉和变异操作:我们对种群进行一定比例的交叉和变异操作,以创建新的个体。

qq_39605374的博客 217

Python实现主成分分析法(PCA)+粒子群算法(PSO)+极限学习机(ELM)的时间序列组合预测模型

1.引入数据 import csv import numpy as np from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split import matplotlib.pyplot as plt from datetime import datetime from sklearn.metrics import explained_variance_score

weixin_40169609的博客 4916

基于Matlab的粒子群算法优化ELM回归预测

在开始介绍粒子群算法优化ELM回归预测之前,首先对ELM回归预测进行简要介绍。通过结合粒子群算法和ELM模型,可以有效地进行回归预测任务,并在预测结果上获得较好的性能。在粒子群算法中,每个个体被称为粒子,其位置表示潜在解空间中的一个解,速度表示粒子搜索的方向和速度。粒子群算法优化ELM回归预测的思路是将ELM网络的权重和偏置作为粒子的位置,优化目标函数作为粒子的适应度,通过迭代更新粒子的位置和速度来寻找最优解。以上就是基于Matlab的粒子群算法优化ELM回归预测的文章,希望对您有所帮助。

uote_e的博客 292

基于引力搜索算法优化极限学习机预测

为了解决这个问题,本文提出了一种基于引力搜索算法(Gravitational Search Algorithm,GSA)优化的ELM模型,称为GSA-ELM。然后,在GSA优化算法的迭代中,我们计算了每个解(即神经元)之间的距离,并根据引力和斥力调整它们的位置。特别地,相较于基本ELM算法,GSA-ELM在糖尿病数据集上的测试精度提高了3.08%,在波士顿房价数据集上提高了2.70%。在这个算法中,每个解都被视为一个物体,在任何时刻都会受到其他解的引力和斥力的影响。通过不断调整物体的位置来找到最佳解。

持续更新 174

极限学习机ELM回归预测及其MATLAB代码实现

文章目录1. 极限学习机ELM原理介绍1.1极限学习机的训练过程1.2 极限学习机的预测过程2. 基于极限学习机ELM标准算法的回归预测模型建立2.1 数据说明2.2 极限学习机的实现步骤3. 模型效果4. 参考文献5. MATLAB代码 1. 极限学习机ELM原理介绍 极限学习机(Extreme Learning Machine, ELM)是一种单隐层前馈神经网络算法(SLFN),它的模型结构由输入层,隐含层,输出层三层组成,与人工神经网络相同,每层之间的连接是利用特征映射函数完成的,输入层的信息是通过隐

CJ-leaf的博客 1万+

使用探路者算法优化的极限学习机预测模型及matlab实现

因此,如何优化极限学习机模型的参数成为了研究热点。在本文中,我们将介绍一种基于探路者算法进行优化的极限学习机预测模型。通过将探路者算法应用于极限学习机预测模型优化中,可以有效地提高模型的性能。其中,输入层的神经元个数取决于数据的特征维度,输出层的神经元个数取决于预测目标的个数。总结:本文介绍了一种基于探路者算法优化的极限学习机预测模型,并提供了相应的matlab实现代码。为了获得更好的模型性能,我们需要对极限学习机模型进行优化。最后,我们使用优化后的最佳参数对测试集进行预测,并计算模型的性能指标。

持续更新 166

【ELM回归预测】基于卷积神经网络结合极限学习机CNN-ELM实现数据回归预测附Matlab代码

极限学习机(ELM)是一种快速高效的机器学习算法,在数据回归预测领域有着广泛的应用。卷积神经网络(CNN)是一种强大的深度学习模型,在图像识别、自然语言处理等领域取得了卓越的成果。本文提出了一种基于CNN和ELM相结合的回归预测模型,即CNN-ELM模型。该模型利用CNN强大的特征提取能力,提取输入数据的高维特征,然后将这些特征输入到ELM中进行回归预测。实验结果表明,CNN-ELM模型在多个数据集上的回归预测性能优于传统ELM模型和CNN模型。1. 引言。

matlab_dingdang的博客 1101

极限学习机算法

极限学习机算法 是一种前馈式神经网络算法,相比于BP神经网络,其随机初始化输入项的权值,训练速度快,预测精度较高。

华为海思IC前端中后端(COT&XPU)岗位笔试机考题

华为海思COT和XPU部门IC前端,IC中端,IC后端岗位笔试真题分享

weixin_37584728的博客 3361

KELM vs ELM:核极限学习机在Matlab中的性能对比测试(含参数优化建议)

本文通过Matlab实战对比了核极限学习机(KELM)与极限学习机(ELM)的性能差异。测试表明,KELM通过核技巧隐式映射,在非线性任务中通常能获得比ELM更高、更稳定的预测精度,但需权衡其训练开销。文章提供了详细的参数优化流程与选型建议,帮助开发者根据数据规模与性能需求做出合理选择。

ttt77的博客 1105

保姆级教程:在S32K312上配置C40驱动,实现Flash读写(基于RTD 4.4.2)

本文详细介绍了在S32K312微控制器上配置C40驱动实现Flash读写的全流程,基于RTD 4.4.2库。内容涵盖环境搭建、外设配置、Flash操作实战代码及高级应用场景,特别针对LLD驱动和FLS存储操作中的常见问题提供了解决方案,帮助开发者快速掌握嵌入式Flash存储技术。

weixin_28684757的博客 253

极限学习机

【代码】极限学习机。

机器小番茄 578

从原理到接法全面了解三相电

从原理到接法全面了解三相电

viixin的博客 1万+

【LAMMPS学习】五、LAMMPS命令(1) LAMMPS 输入脚本

本部分描述了 LAMMPS 输入脚本的格式以及其中的命令如何用于定义 LAMMPS 模拟。主要包括以下内容。

荷塘阅色 2644

极限学习机(ELM)原理与实战:揭秘神经网络快速训练与泛化性能

在机器学习领域,神经网络的训练通常依赖反向传播等迭代优化算法,这些方法虽然强大但计算成本高昂、调参复杂。极限学习机(ELM)作为一种创新的前馈神经网络,其核心原理在于将隐藏层权重随机初始化并固定,仅通过求解线性方程组来训练输出层权重,从而实现了训练速度的指数级提升。这种机制不仅避免了梯度下降中的局部最优和收敛缓慢问题,还通过岭回归等形式自然融入了正则化,提升了模型的泛化能力。ELM的快速训练特性使其在需要高效原型验证、实时预测以及对计算资源敏感的场景中具有显著优势,例如工业过程监控、金融时间序列分析和物联网

weixin_33928137的博客 359

从苏宁电器到卡巴斯基(第二部)第14篇:我在卡巴的日子 XIV

目录 WannaCry 我的感慨 邻里矛盾 WannaCry 如果大家对于科技互联网圈子的新闻比较感兴趣的话,相信会对2017年5月的“WannaCry勒索病毒”事件记忆犹新,因为这个病毒在当时的全世界范围内掀起了极大的波澜,众多的企事业单位深受其害,造成的金钱和数据损失难以估量,从某种意义上来说,它甚至引领了勒索病毒新一轮的爆发浪潮。而通过这样的一次爆发,也让我对于卡巴斯基的技术实力有了更进一步的了解。 我记得很清楚,爆发的那天是周六,没记错的话Seth那天有事,就请假没来,只有我自己在公司值

Gleam的专栏 4916

Matlab实战:5分钟搞定KELM核极限学习机分类与回归(附完整代码)

本文详细介绍了如何在Matlab中快速实现KELM(核极限学习机)分类与回归任务,包括环境准备、代码示例和参数调优技巧。KELM以其训练速度快、参数调整简单和非线性处理能力强等优势,成为机器学习领域的实用工具。文章还提供了工程化应用建议和常见问题排查方法,帮助开发者高效解决实际问题。

wdx01234567的博客 579

HFSS仿真PCB射频通路间的隔离度

本文介绍HFSS方式仿真带有器件的射频通路间的隔离度,可视为CST方式的补充,二者的结果相互参照。在前期靠仿真确认风险点时,可以作为一种较为直观和可信的手段。

sinat_15150363的博客 1524

goahead(嵌入式Web服务器)之文件传输篇

goahead文件上传原理: 使用html form即表单提交文件上传请求,web服务器核心处理接收客户端Post过来的文件数据(注意post的是二进制数据),最后,web服务器把接收到文件数据以二进制格式写到服务器本端存储系统。 goahead文件上传步骤: 1、创建upload.html文件,内容如下: <html> <head> <meta charset="utf-8"/> <title>Upload</title> </head&g

weixin_40732273的博客 3495
上一篇: 利用OpenCV抠出图像中的人脸
下一篇: pytorch实现的Resnet18、VGG16
silentkunden
博客等级 码龄9年 28粉丝 51原创
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值