【深度学习】基于机器学习的无机钙钛矿材料形成能预测,预测形成能,神经网络,回归问题

文章目录

  • 任务分析
  • 数据处理
    • 处理离散数值
    • 处理缺失值
    • 处理不同范围的数据
    • 其他注意事项
  • 我们的数据处理
  • 模型
  • 训练
  • 网页web
  • 代码、指导

任务分析

简单来说,就是一行就是一个样本,要用绿色的9个数值,预测出红色的那1个数值。
在这里插入图片描述

数据处理

在进行深度数学数据处理时,数据预处理是一个至关重要的步骤。它涉及到处理离散数值、缺失值以及不同范围的数据等问题。下面,我们将探讨如何高效地处理这些常见问题,并确保数据集为后续的分析和建模做好准备。

处理离散数值

离散数值通常指的是分类数据,这些数据可以是有序的(例如教育水平)或无序的(例如国籍)。在深度学习中,离散数值通常需要转换为一种更适合模型处理的格式。

独热编码(One-Hot Encoding): 对于无序的分类变量,独热编码是一种常见的处理方法。它为每个类别创建一个新的布尔列,表示某个样本是否属于该类别。

标签编码(Label Encoding): 对于有序的分类变量,可以使用标签编码,它将每个类别映射到一个整数值。这种方法保留了类别间的顺序关系。

嵌入(Embeddings): 对于类别数量非常多的情况,可以使用嵌入层来学习一个更为紧凑的表示。

处理缺失值

缺失值处理是数据预处理中的一个重要方面。不同的处理方法可能会对模型的性能产生重大影响。

删除: 如果数据丢失不是很严重,可以考虑删除含有缺失值的行或列。但这可能会导致信息损失。

填充: 可以用某些统计值(如均值、中位数或众数)填充缺失值。对于连续变量,通常用均值或中位数;对于分类变量,可以用众数。

预测模型: 使用其他完整的特征来预测缺失值。例如,可以使用随机森林或K最近邻算法来预测缺失的数据。

使用缺失值: 某些算法可以直接处理缺失值,例如XGBoost。此外,可以将缺失值作为模型的一个特征。

处理不同范围的数据

当数据集中的特征在不同的范围内变化时,可能会导致模型性能下降,尤其是在使用基于距离的算法时。

标准化(Standardization): 通过减去均值并除以标准差来转换数据,使得特征的均值为0,标准差为1。

归一化(Normalization): 将特征缩放到给定的最小值和最大值之间,通常是0和1。

Robust Scaling: 使用中位数和四分位数范围来缩放特征,这种方法对异常值有更好的鲁棒性。

其他注意事项

异常值处理: 异常值可能是由于错误或偏差造成的。可以使用Z分数、IQR分数等方法检测并处理异常值。

特征工程: 考虑创建新的特征或转换现有特征,以更好地表示数据的潜在结构。

数据集的平衡: 在分类问题中,确保每个类别的样本数量大致相等,或者使用加权损失函数来解决类别不平衡问题。

时间序列数据: 如果数据是时间序列,需要考虑时间依赖性和季节性因素。

数据一致性: 确保所有数据都以一致的格式和单位进行表示。

通过以上的数据预处理方法,我们可以确保数据集为机器学习模型的训练和测试做好准备。这些步骤有助于提高模型的准确性、减少过拟合的风险,并提高模型的泛化能力。

我们的数据处理

独热编码、填充平均值、删除缺失数据过多(>3)的样本、标准化输入。

分析数据平稳性质,基本平稳,无需额外剔除工作。

在这里插入图片描述

模型

引入自注意力机制的神经网络模型:


class SelfAttention(nn.Module):
    def __init__(self, in_dim):
        super(SelfAttention, self).__init__()
        self.query = nn.Linear(in_dim, in_dim)
        self.key = nn.Linear(in_dim, in_dim)
        self.value = nn.Linear(in_dim, in_dim)
        self.softmax = nn.Softmax(dim=-1)

    def forward(self, x):
        q = self.query(x)
        k = self.key(x)
        v = self.value(x)

        attention_weights = self.softmax(torch.matmul(q, k.transpose(-2, -1)) / (x.size(-1) ** 0.5))
        attention_output = torch.matmul(attention_weights, v)
        return attention_output


class AttentionModel(nn.Module):
    def __init__(self, input_dim, output_dim):
        super(AttentionModel, self).__init__()
        self.fc0 = nn.Linear(input_dim, 1024)
        self.fc0_1 = nn.Linear(1024, 512)
        self.fc1 = nn.Linear(512, 256)
        self.fc2 = nn.Linear(256, 128)
        self.fc3 = nn.Linear(128, 64)
        self.fc4 = nn.Linear(64, output_dim)
        self.relu = nn.SELU()
        self.bn0 = nn.BatchNorm1d(1024)
        self.bn0_1 = nn.BatchNorm1d(512)
        self.bn1 = nn.BatchNorm1d(256)
        self.bn2 = nn.BatchNorm1d(128)
        self.bn3 = nn.BatchNorm1d(64)
        self.self_attention = SelfAttention(256)

    def forward(self, x):
        x = self.bn0(self.relu(self.fc0(x)))
        x = self.bn0_1(self.relu(self.fc0_1(x)))
        x = self.bn1(self.relu(self.fc1(x)))
        attention_output = self.self_attention(x)
        x = self.relu(attention_output + x)  # 残差连接后应用ReLU
        x = self.bn2(self.relu(self.fc2(x)))
        x = self.bn3(self.relu(self.fc3(x)))
        x = self.fc4(x)
        return x

    # 使用Xavier初始化或Kaiming初始化
    def _initialize_weights(self):
        for m in self.modules():
            if isinstance(m, nn.Linear):
                init.kaiming_uniform_(m.weight, mode='fan_in', nonlinearity='relu')
                if m.bias is not None:
                    init.constant_(m.bias, 0)

训练

MSE最低降低到0.2左右。
在这里插入图片描述

网页web

在这里插入图片描述

代码、指导

需要帮助请:

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/478099.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从IO操作与多线程的思考到Redis-6.0

IO操作->线程阻塞->释放CPU资源->多线程技术提升CPU利用率 在没有涉及磁盘操作和网络请求的程序中,通常不会出现线程等待状态。线程等待状态通常是由于线程需要等待某些事件的发生,比如I/O操作完成、网络请求返回等。如果程序只是进行计算或者简…

低代码开发平台开源:依靠科技力量实现数字化转型!

在竞争激烈的当今社会,数字化转型、流程化办公等字眼早已充斥在我们的职场生活中。虽然如此,但是我们依然要面临着这样一个现实问题:很多中小企业发展面临着资源有限、技术储备不足、人才短缺的现实问题,进入流程化办公困境依然明…

JSP基础知识

前言:开发需要,有一个老项目,使用的是前后端不分离的框架,前端使用的JSP开发,于是需要恶补JSP的基础知识和语法。以下是学习过程总结的一些有用的基础知识。 推荐学习: JSP 语法 | 菜鸟教程 简介 Jsp是一…

Mybatis总结(持续补充),kafka和mq的区别面试

配置环境:需要引入Mybatis的一个jar包 然后写一个mybatis-config.xml的配置文件里面写着mybatis的核心配置文件,例如:连接的哪个数据库,资源文件的注册(Mapper.xml等) 书写一个MybatsiUtils工具类封装一个…

Monoxer Programming Contest 2024(AtCoder Beginner Contest 345)(A,B,C,D,E,F)

比赛链接 这场。。。好像已经是一周之前的比赛来着,终于补完了。 C是个披着字符串外衣的数学容斥题。D是个超级超级暴力的爆搜,写起来超级麻烦,感觉。。。真是一次酣畅淋漓的赤石。E是个DP,朴素想法其实比较直观,不过…

自媒体用ChatGPT批量洗稿软件V5.9环境配置/软件设置教程【汇总】

大家好,我是淘小白~ 首先,感谢大家的支持~~ ChatGPT采集洗稿软件V5.9版本更新,此次版本更新修改增加了一些内容: 1、自定义多条指令,软件自动判断指令条数,进行输入 2、增加谷歌浏览多账号轮询&#xf…

了解Kafka位移自动提交的秘密:避免常见陷阱的方法

欢迎来到我的博客,代码的世界里,每一行都是一个故事 了解Kafka位移自动提交的秘密:避免常见陷阱的方法 前言位移自动提交简介自动提交的优缺点自动提交位移的优点:自动提交位移的缺点:自动提交与手动提交的对比分析&am…

vuex - 21年的笔记 - 后续更新

vuex是什么 Vuex是实现组件全局状态(数据)管理的一种机制,方便的实现组件之间的数据的共享 使用vuex统一管理状态的好处 能够在vuex中集中管理共享的数据,易于开发和后期维护能够高效地实现组件之间的数据共享,提高…

如何系统的入门大模型?

GPT图解,从0到1构建大模型。 本书将以生动活泼的笔触,将枯燥的技术细节化作轻松幽默的故事和缤纷多彩的图画,引领读者穿梭于不同技术的时空,见证自然语言处理技术的传承、演进与蜕变。在这场不断攀登技术新峰的奇妙之旅中&#xf…

数据安全运营:难点突破与构建策略全解析

小型企业关注基础安全运营,重点把安全产品“管好”和“用好”。大型企业通过SOC平台(安全运营中心)把所有安全产品串联起来,对大量的日志进行关联分析,发现事件和告警。通过SOAR平台把运营工作中能“自动化”内容进行预…

修改Linux系统时间与网络同步

文章目录 1、安装ntpdate2、修改时区3、设置系统时间与网络时间同步4、将系统时间写入硬件时间 1、安装ntpdate # Red Hat和Cent OS系统 sudo yum install ntpdate # 乌班图 sudo apt-get install ntpdate2、修改时区 1)运行tzselect tzselect2)选择A…

H4012耐压30V降压恒压芯片 30V降12V降5V 支持电流3A

耐压30V降压恒压芯片的工作原理如下: 该芯片内部集成了开关管和同步整流管,通过它们进行电压的转换,将输入的30V电压降至所需的输出电压(如12V或5V)。在工作过程中,该芯片通过PWM(脉冲宽度调制…

一套键盘鼠标控制两台电脑 Mouse Without Borders

有两台电脑,一台笔记本一台台式机,拥有各自拥有鼠标和键盘,但总是需要切换,感觉太麻烦,想找个简单的方式,不需要额外操作就能同时操作这两台电脑。无意间发现了一个微软软件Mouse Without Borders&#xff…

项目起冲突,掌握这个模型的人,赢麻了!

在项目管理中,冲突是项目经理们无法避免的一环。在职场中,大家都是如何解决矛盾冲突的呢? 一、项目起冲突的原因及解决方法 项目管理过程中,冲突的产生,往往源自于多个方面,但无论是出于何种原因的项目冲…

#Linux(连接档概念)

(一)发行版:Ubuntu16.04.7 (二)记录: (1)硬链接(inode,建立硬链接的文件inode号相同) (2)创建硬链接:ln 文件名1 文件名…

项目中如何进行限流(限流的算法、实现方法详解)

❤ 作者主页:李奕赫揍小邰的博客 ❀ 个人介绍:大家好,我是李奕赫!( ̄▽ ̄)~* 🍊 记得点赞、收藏、评论⭐️⭐️⭐️ 📣 认真学习!!!🎉🎉 文章目录 限流的算法漏…

quartz整合前端vue加后端springboot

因工作需求&#xff0c;需要能修改定时的任务&#xff0c;前端vue3&#xff0c;后端是springboot 看看页面效果&#xff1a; 首先maven加上引入 <dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><versi…

日常 ------------ (一)

使用xdd 生成 firmware.cc 文件 &#xff0c;然后程序根据需要自己解压缩,也可以完成软件升级状态的监控 objcopy 此等神奇也可以&#xff0c;但是威力太大&#xff0c;容易玩崩&#xff0c;没敢尝试

Solo 开发者周刊 (第8期):Claude公司再度上新产品,成交额将超73亿美元

这里会整合 Solo 社区每周推广内容、产品模块或活动投稿&#xff0c;每周五发布。在这期周刊中&#xff0c;我们将深入探讨开源软件产品的开发旅程&#xff0c;分享来自一线独立开发者的经验和见解。本杂志开源&#xff0c;欢迎投稿。 好文推荐 Claude是否超过Chatgpt,成为生成…

Redis 不再 “开源”,未来采用 SSPLv1 和 RSALv2 许可证

昨日&#xff0c;Redis 官方宣布了一项重要变更&#xff1a;他们将修改开源协议&#xff0c;未来所有版本将采用 “源代码可用” 的许可证。 具体来说&#xff0c;Redis 不再使用 BSD 3-Clause 开源协议进行分发。从 Redis 7.4 版本开始&#xff0c;Redis 将采用 SSPLv1 和 RSA…