基本算法——回归

目录

创建工程

加载数据

分析属性

创建与评估回归模型

线性回归

回归树

评估

完整代码

结论


本节将通过分析能源效率数据集(TsanasXifara2012)学习基本的回归算法。我们将基 于建筑的结构特点(比如表面、墙体与屋顶面积、高度、紧凑度)研究它们的加热与冷却负载要 求。研究者使用一个模拟器设计了12种不同的房屋配置,这些房屋配置通过改变18种建筑特征得 出,他们总共模拟了768种建筑。

我们的首要目标是系统分析每种建筑特征对目标变量——加热或冷却负载——产生的影响。 第二个目标是比较经典线性回归模型相对于其他方法(比如SVM回归、随机森林、神经网络)的 性能。这个任务中,我们将使用Weka库。

创建工程

接着使用上一篇文章的工程:

加载数据

        // 加载数据CSVLoader loader = new CSVLoader();loader.setFieldSeparator(",");  // 设置CSV文件的字段分隔符为逗号loader.setSource(new File(PATH));  // 设置数据源为CSV文件Instances data = loader.getDataSet();  // 从CSV文件中加载数据集

分析属性

进行属性分析之前,先了解要处理什么。总共有8个属性描述建筑特征,有两个目标变量:

heatingcooling

X1 ——相对密实性
X2 ——表面积
X3 ——墙体面积
X4 ——屋顶面积
X5 ——总体高度
X6 ——方向
X7 ——玻璃窗面积
X8 ——玻璃窗区域分布
Y1 ——加热负载
Y2 ——冷却负载

创建与评估回归模型

首先,在特征位置设置分类属性,为加热负载建立学习模型。第二个目标变量(冷却负载)现在可以移除:

        /** 构建回归模型*/// 设置类别索引为Y1(加热负荷),即目标变量data.setClassIndex(data.numAttributes() - 2);  // 设置类别索引为倒数第二个属性,表示Y1// 移除最后一个属性Y2,因为Y2是另一个目标变量,我们只处理Y1Remove remove = new Remove();remove.setOptions(new String[]{"-R", String.valueOf(data.numAttributes())});  // 移除最后一个属性remove.setInputFormat(data);  // 设置输入格式data = Filter.useFilter(data, remove);  // 应用过滤器,移除最后一个属性

线性回归

首先,使用LinearRegression类创建一个基本的线性回归模型。正如在分类示例中所做的 那样,先初始化一个新模型实例,传递参数与数据,并调用buildClassifier(Instances)方 法:

        // 构建线性回归模型LinearRegression model = new LinearRegression();model.buildClassifier(data);  // 使用数据训练线性回归模型System.out.println(model);  // 输出线性回归模型的详细信息

结果如下:

Y1 =-64.774  * X1 +-0.0428 * X2 +0.0163 * X3 +-0.089  * X4 +4.1699 * X5 +19.9327 * X7 +0.2038 * X8 +83.9329

线性回归模型构建了一个函数,它把输入变量线性组合在一起,对加热负载进行评估。特征 前面的数字解释特征对目标变量的影响:符号表示正面影响或负面影响,而大小对应于影响程度。 比如特征X1(相对紧凑度),它与加热负载是负相关的,而玻璃窗面积与加热负载是正相关的。

这两个特征也对最后加热负载的评估有明显影响。

使用交叉验证技术可以对模型性能做类似评估。 做10折交叉验证(10-fold cross-validation)如下:

        // 10折交叉验证Evaluation evaluation = new Evaluation(data);  // 创建评估对象evaluation.crossValidateModel(model, data, 10, new Random(1), new String[]{});  // 执行10折交叉验证System.out.println(evaluation.toSummaryString());  // 输出交叉验证的概要信息double[] coefficients = model.coefficients();  // 获取线性回归模型的系数

结果如下:

Correlation coefficient                  0.956 
Mean absolute error                      2.0923
Root mean squared error                  2.9569
Relative absolute error                 22.8555 %
Root relative squared error             29.282  %
Total Number of Instances              768     

回归树

另一个方法是构建一组回归模型,每一个模型对应于数据中与其自身相关的部分。图3-5展 示了回归模型与回归树之间的主要不同。回归模型指的是一个与所有数据达到最好拟合的独立模 型;而回归树是一组回归模型,每个模型只对一部分数据进行建模。Weka中的M5类用于实现回归树。创建模型时,遵从步骤与前面一样:初始化模型、传递参 数与数据、调用buildClassifier(Instances)方法。

        // 构建回归树模型(M5P模型)M5P m5p = new M5P();m5p.setOptions(new String[]{""});  // 设置选项,这里为空m5p.buildClassifier(data);  // 使用数据训练M5P回归树模型System.out.println(m5p);  // 输出M5P回归树模型的详细信息

结果如下:

M5 pruned model tree:
(using smoothed linear models)X1 <= 0.75 : 
|   X7 <= 0.175 : 
|   |   X1 <= 0.65 : LM1 (48/1.264%)
|   |   X1 >  0.65 : LM2 (96/3.201%)
|   X7 >  0.175 : 
|   |   X1 <= 0.65 : LM3 (80/3.652%)
|   |   X1 >  0.65 : 
|   |   |   X7 <= 0.325 : LM4 (80/3.724%)
|   |   |   X7 >  0.325 : 
|   |   |   |   X1 <= 0.675 : LM5 (20/1.687%)
|   |   |   |   X1 >  0.675 : 
|   |   |   |   |   X8 <= 2.5 : LM6 (24/1.314%)
|   |   |   |   |   X8 >  2.5 : 
|   |   |   |   |   |   X8 <= 4.5 : LM7 (24/2.737%)
|   |   |   |   |   |   X8 >  4.5 : 
|   |   |   |   |   |   |   X1 <= 0.7 : LM8 (4/0.91%)
|   |   |   |   |   |   |   X1 >  0.7 : LM9 (8/1.265%)
X1 >  0.75 : 
|   X1 <= 0.805 : 
|   |   X7 <= 0.175 : LM10 (48/5.775%)
|   |   X7 >  0.175 : 
|   |   |   X7 <= 0.325 : LM11 (40/5.26%)
|   |   |   X7 >  0.325 : LM12 (40/5.756%)
|   X1 >  0.805 : 
|   |   X7 <= 0.175 : 
|   |   |   X8 <= 1.5 : 
|   |   |   |   X7 <= 0.05 : 
|   |   |   |   |   X2 <= 539 : LM13 (4/0%)
|   |   |   |   |   X2 >  539 : LM14 (12/4.501%)
|   |   |   |   X7 >  0.05 : 
|   |   |   |   |   X1 <= 0.94 : LM15 (12/4.329%)
|   |   |   |   |   X1 >  0.94 : LM16 (4/0.226%)
|   |   |   X8 >  1.5 : 
|   |   |   |   X1 <= 0.94 : LM17 (48/5.693%)
|   |   |   |   X1 >  0.94 : LM18 (16/1.119%)
|   |   X7 >  0.175 : 
|   |   |   X1 <= 0.84 : 
|   |   |   |   X7 <= 0.325 : 
|   |   |   |   |   X8 <= 2.5 : LM19 (8/3.901%)
|   |   |   |   |   X8 >  2.5 : LM20 (12/3.913%)
|   |   |   |   X7 >  0.325 : LM21 (20/5.632%)
|   |   |   X1 >  0.84 : 
|   |   |   |   X7 <= 0.325 : LM22 (60/4.548%)
|   |   |   |   X7 >  0.325 : 
|   |   |   |   |   X3 <= 306.25 : LM23 (40/4.504%)
|   |   |   |   |   X3 >  306.25 : LM24 (20/6.934%)LM num: 1
Y1 = 72.2602 * X1 + 0.0053 * X3 + 41.5669 * X7 - 0.0049 * X8 - 37.6688LM num: 2
Y1 = -14.6772 * X1 + 0.0053 * X3 + 40.2316 * X7 + 0.0181 * X8 + 15.649LM num: 3
Y1 = 84.5112 * X1 + 0.0053 * X3 + 13.9115 * X7 - 0.1471 * X8 - 42.4943LM num: 4
Y1 = -2.8359 * X1 + 0.0053 * X3 + 4.3146 * X7 - 0.0111 * X8 + 12.0357LM num: 5
Y1 = -6.0295 * X1 + 0.0053 * X3 + 4.3146 * X7 - 0.0524 * X8 + 16.0295LM num: 6
Y1 = -4.3262 * X1 + 0.0053 * X3 + 4.3146 * X7 - 0.0665 * X8 + 14.5905LM num: 7
Y1 = -4.3262 * X1 + 0.0053 * X3 + 4.3146 * X7 - 0.0888 * X8 + 14.5832LM num: 8
Y1 = -4.3262 * X1 + 0.0053 * X3 + 4.3146 * X7 - 0.1025 * X8 + 14.5352LM num: 9
Y1 = -0.8154 * X1 + 0.0053 * X3 + 4.3146 * X7 - 0.1025 * X8 + 11.9531LM num: 10
Y1 = 105.9033 * X1 + 0.0113 * X3 + 59.6616 * X7 + 0.0975 * X8 - 58.7462LM num: 11
Y1 = 81.6537 * X1 + 0.0113 * X3 + 10.8932 * X7 + 0.0559 * X8 - 33.0837LM num: 12
Y1 = 64.6565 * X1 + 0.0113 * X3 + 10.8932 * X7 - 0.0337 * X8 - 18.0037LM num: 13
Y1 = 3.2622 * X1 - 0.0018 * X2 + 0.0164 * X3 + 44.6313 * X7 + 0.0592 * X8 + 11.9461LM num: 14
Y1 = 9.1337 * X1 - 0.0018 * X2 + 0.0164 * X3 - 0.0494 * X6 + 44.6313 * X7 + 0.0592 * X8 + 7.321LM num: 15
Y1 = 11.8776 * X1 - 0.0018 * X2 + 0.0164 * X3 - 0.0428 * X6 + 44.6313 * X7 + 0.0592 * X8 + 7.0198LM num: 16
Y1 = 3.2622 * X1 - 0.0018 * X2 + 0.0164 * X3 + 44.6313 * X7 + 0.0592 * X8 + 14.1593LM num: 17
Y1 = 35.1381 * X1 - 0.0018 * X2 + 0.0164 * X3 + 16.7723 * X7 + 0.0592 * X8 - 10.1661LM num: 18
Y1 = 3.2622 * X1 - 0.0018 * X2 + 0.0164 * X3 + 16.7723 * X7 + 0.0592 * X8 + 16.4949LM num: 19
Y1 = 8.5464 * X1 - 0.0012 * X2 + 0.029 * X3 + 15.2851 * X7 - 0.2151 * X8 + 7.86LM num: 20
Y1 = 8.5464 * X1 - 0.0012 * X2 + 0.029 * X3 + 15.2851 * X7 - 0.0475 * X8 + 7.4789LM num: 21
Y1 = 8.5464 * X1 - 0.0012 * X2 + 0.029 * X3 + 15.2851 * X7 + 0.013 * X8 + 8.5537LM num: 22
Y1 = 1.4309 * X1 - 0.0012 * X2 + 0.1248 * X3 + 9.5464 * X7 + 0.0373 * X8 - 10.9927LM num: 23
Y1 = 5.1744 * X1 - 0.0012 * X2 + 0.0633 * X3 + 9.5464 * X7 + 0.0235 * X8 + 5.7355LM num: 24
Y1 = 5.1744 * X1 - 0.0012 * X2 + 0.0761 * X3 + 9.5464 * X7 - 0.0805 * X8 + 3.4386Number of Rules : 24

这棵树总共有13个叶子,每个叶子对应于一个线性方程。

评估

        // 10折交叉验证evaluation = new Evaluation(data);  // 重新创建评估对象evaluation.crossValidateModel(m5p, data, 10, new Random(1), new String[]{});  // 执行10折交叉验证System.out.println(evaluation.toSummaryString());  // 输出交叉验证的概要信息

结果如下:

Correlation coefficient                  0.996 
Mean absolute error                      0.6497
Root mean squared error                  0.9164
Relative absolute error                  7.0972 %
Root relative squared error              9.0753 %
Total Number of Instances              768  

完整代码

    private static String PATH = ClassUtils.getDefaultClassLoader().getResource("ENB2012_data.csv").getPath();public static void main(String[] args) throws Exception {// 加载数据CSVLoader loader = new CSVLoader();loader.setFieldSeparator(",");  // 设置CSV文件的字段分隔符为逗号loader.setSource(new File(PATH));  // 设置数据源为CSV文件Instances data = loader.getDataSet();  // 从CSV文件中加载数据集/** 构建回归模型*/// 设置类别索引为Y1(加热负荷),即目标变量data.setClassIndex(data.numAttributes() - 2);  // 设置类别索引为倒数第二个属性,表示Y1// 移除最后一个属性Y2,因为Y2是另一个目标变量,我们只处理Y1Remove remove = new Remove();remove.setOptions(new String[]{"-R", String.valueOf(data.numAttributes())});  // 移除最后一个属性remove.setInputFormat(data);  // 设置输入格式data = Filter.useFilter(data, remove);  // 应用过滤器,移除最后一个属性// 构建线性回归模型LinearRegression model = new LinearRegression();model.buildClassifier(data);  // 使用数据训练线性回归模型System.out.println(model);  // 输出线性回归模型的详细信息// 10折交叉验证Evaluation evaluation = new Evaluation(data);  // 创建评估对象evaluation.crossValidateModel(model, data, 10, new Random(1), new String[]{});  // 执行10折交叉验证System.out.println(evaluation.toSummaryString());  // 输出交叉验证的概要信息double[] coefficients = model.coefficients();  // 获取线性回归模型的系数// 构建回归树模型(M5P模型)M5P m5p = new M5P();m5p.setOptions(new String[]{""});  // 设置选项,这里为空m5p.buildClassifier(data);  // 使用数据训练M5P回归树模型System.out.println(m5p);  // 输出M5P回归树模型的详细信息// 10折交叉验证evaluation = new Evaluation(data);  // 重新创建评估对象evaluation.crossValidateModel(m5p, data, 10, new Random(1), new String[]{});  // 执行10折交叉验证System.out.println(evaluation.toSummaryString());  // 输出交叉验证的概要信息}

结论

对于线性回归模型:

(1)相关性系数(Correlation coefficient)为0.956,表明模型预测值与实际值之间有较强的相关性。

(2)平均绝对误差(Mean absolute error)为2.0923,表示预测值与实际值之间的平均绝对差距。

(3)均方根误差(Root mean squared error)为2.9569,它衡量了预测值与实际值之间的标准偏差。

(4)相对绝对误差(Relative absolute error)和相对均方根误差(Root relative squared error)分别为22.8555%和29.282%,这些指标是相对于实际值的误差比例。

对于M5模型树:

(1)相关性系数为0.996,比线性回归模型更高,说明M5模型树的预测值与实际值的相关性更强。

(2)平均绝对误差降低到0.6497,表明M5模型树的预测更为准确。

(3)均方根误差也降低到0.9164,说明预测值与实际值的偏差更小。

(4)相对绝对误差和相对均方根误差分别降低到7.0972%和9.0753%,显示M5模型树在相对误差上也有显著改善。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PP模块部分BAPI函数

工艺路线 BAPI_ROUTING_CREATE 创建工艺路线 BAPI_ROUTING_EXISTENCE_CHECK 检查工艺路线是否存在 参考操作集 BAPI_REFSETOFOPERATIONS_CREATE 创建参考操作集 BAPI_REFSETOFOPR_EXISTENCE_CHK 检查参考操作集是否存在 计划订单 BAPI_PLANNEDORDER_CREATE 创建计划订单 BAPI…

【SpringBoot】多数据源事务卡死@DSTransactional,当某一个数据库挂掉了,系统卡死问题解决

记录最近发生并解决的一个问题 原因 在一个事务内&#xff0c;操作多个数据库&#xff0c;当其中一个数据库挂掉后&#xff0c;默认无限重连&#xff0c;导致事务无法正常结束&#xff0c;导致系统卡死 解决 将无限重连改成有限次数即可 datasource:db1:driver-class-name…

迅为RK3568开发板编译Android12源码包-设置屏幕配置

在源码编译之前首先要确定自己想要使用的屏幕并修改源码&#xff0c;在编译镜像&#xff0c;烧写镜像。如下图所示&#xff1a; 第一步&#xff1a;确定要使用的屏幕种类&#xff0c;屏幕种类选择如下所示&#xff1a; iTOP-3568 开发板支持以下种类屏幕&#xff1a; 迅为 LV…

重装操作系统后 Oracle 11g 数据库数据还原

场景描述&#xff1a; 由于SSD系统盘损坏&#xff0c;更换硬盘后重装了操作系统&#xff0c;Oracle数据库之前安装在D盘(另一个硬盘)&#xff0c;更换硬盘多添加一个盘符重装系统后盘符从D变成E&#xff0c;也就是之前的D:/app/... 变成了现在的 E:/app/...&#xff0c;重新安装…

企业二要素如何用C#实现

一、什么是企业二要素&#xff1f; 企业二要素&#xff0c;通过输入统一社会信用代码、企业名称或统一社会信用代码、法人名称&#xff0c;验证两者是否匹配一致。 二、企业二要素适用哪些场景&#xff1f; 例如&#xff1a;信用与金融领域 1.信用评级&#xff1a;信用评级…

丢弃法hhhh

一个好的模型需要对输入数据的扰动鲁棒 丢弃法&#xff1a;在层之间加入噪音&#xff0c;等同于加入正则 h2和h5变成0了 dropout一般作用在全连接隐藏层的输出上 Q&A dropout随机置零对求梯度和求反向传播的影响是什么&#xff1f;为0 dropout属于超参数 dropout固定随…

shell学习数学运算符和字符串(三)

这里写目录标题 一、数学运算符1、基本语法2、expr运算3、(())4、let运算5、bc命令6、中括号[] 二、字符串1、单双引号2、字符串拼接3、获取字符串长度4、字符串提取 一、数学运算符 1、基本语法 ( ( ) ) 或者 (())或者 (())或者{}expr ,-,*,/,%加减乘除取余 2、expr运算 ex…

【Java设计模式-1】单例模式,Java世界的“独苗”

今天咱们要一起探秘Java设计模式中的一个超级有趣又超级实用的家伙——单例模式。想象一下&#xff0c;在Java的代码王国里&#xff0c;有这么一类特殊的存在&#xff0c;它们就像独一无二的“独苗”&#xff0c;整个王国里只允许有一个这样的家伙存在&#xff0c;这就是单例模…

无人机飞手培训机构大量新增,考取飞手证参军入伍还有优势吗?

尽管无人机飞手培训机构大量新增&#xff0c;考取飞手证参军入伍仍然具有显著优势。以下是对这一观点的详细阐述&#xff1a; 一、无人机飞手证在军队中的通用优势 1. 法规遵从与安全保障&#xff1a; 根据《民用无人驾驶航空器系统驾驶员管理暂行规定》等相关法规&#xff0…

计算机网络原理(一)

嘿&#xff01; 新年的第一篇博客&#xff0c;大家新年快乐呀&#xff01;希望大家新的一年要多多进步噢&#xff01; 1.TCP/IP的四层/五层参考模型有哪些层&#xff0c;各层的特点是&#xff1f;计算机网络分层的好处是&#xff1f; TCP/IP 四层参考模型 应用层:直接为用户…

大模型Weekly 03|OpenAI o3发布;DeepSeek-V3上线即开源!

大模型Weekly 03&#xff5c;OpenAI o3发布&#xff1b;DeepSeek-V3上线即开源&#xff01;DeepSeek-V3上线即开源&#xff1b;OpenAI 发布高级推理模型 o3https://mp.weixin.qq.com/s/9qU_zzIv9ibFdJZ5cTocOw?token47960959&langzh_CN 「青稞大模型Weekly」&#xff0c;持…

【C++】B2089 数组逆序重存放

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;问题描述题目&#xff1a;数组逆序重排输入格式输出格式输入输出样例 &#x1f4af;我的代码实现**代码分析****优化建议** &#x1f4af;老师的做法与分析方法1&#xff1…

dfs复习

dfs前置知识 0小朋友崇拜圈 - 蓝桥云课 通过深搜,去找到该点指向的下一个点,然后返回所成的环的大小,保留最大的环的大小 通过添加时间戳,记录该点被遍历的时间,如果下一个点有被添加过时间戳,如果时间戳是大于等于我们的最小时间戳的(等于说明该点自成环),那么成环,…

QT---------自定义插件和库

自定义界面组件 设计和使用自定义界面组件 (以 TBattery 为例) 假设我们要创建一个自定义的电池显示组件 TBattery&#xff0c;我们可以从 QWidget 派生一个新的类&#xff1a; #include <QWidget> #include <QPainter>class TBattery : public QWidget {Q_OBJE…

物理知识1——电流

说起电流&#xff0c;应该从电荷说起&#xff0c;而说起电荷&#xff0c;应该从原子说起。 1 原子及其结构 常见的物质是由分子构成的&#xff0c;而分子又是由原子构成的&#xff0c;有的分子是由多个原子构成&#xff0c;有的分子只由一个原子构成。而原子的构成如图1所示。…

数据挖掘——支持向量机分类器

数据挖掘——支持向量机分类器 支持向量机最小间隔面推导基于软间隔的C-SVM非线性SVM与核变换常用核函数 支持向量机 根据统计学习理论&#xff0c;学习机器的实际风险由经验风险值和置信范围值两部分组成。而基于经验风险最小化准则的学习方法只强调了训练样本的经验风险最小…

Unity 对Sprite或者UI使用模板测试扣洞

新建两个材质球&#xff1a; 选择如下材质 设置如下参数&#xff1a; 扣洞图片或者扣洞UI的材质球 Sprite或者UI的材质球 新建一个单独Hole的canvas&#xff0c;将SortOrder设置为0&#xff0c;并将原UI的canvans的SortOrder设置为1 对2DSprite则需要调整下方的参数 hole的O…

【CSS in Depth 2 精译_099】17.5:基于页面滚动的动画时间线设置(全新)+ 17.6:最后一点建议 + 17.7:本章小结

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第五部分 添加动效 ✔️【第 17 章 动画】 ✔️ 17.1 关键帧17.2 3D 变换下的动画设置 17.2.1 添加动画前页面布局的构建17.2.2 为布局添加动画 17.3 动画延迟与填充模式17.4 通过动画传递意图 17.4…

刷入super镜像报错 FAILED (remote: ‘Error: Last flash failed : Volume Full‘)

目录 1.背景 2.排查流程 3.追根溯源,找到根因 1.背景 首先刷入的底包 在修复此问题的过程中发现super.img镜像刷入不进去,报错FAILED (remote: Error: Last flash failed : Volume Full),此问题一般是分区有问题导致的 2.排查流程 由于是底包的分区大小和源码中的super…

Linux实验报告12-Apache服务器的配置

目录 一&#xff1a;实验目的 二&#xff1a;实验内容 1&#xff1a;在WEB服务器上检查并安装必要软件 2&#xff1a;注册虚拟主机所要使用的域名 3&#xff1a;创建所需的目录 4&#xff1a;编辑配置文件 5&#xff1a;测试虚拟主机 一&#xff1a;实验目的 (1)了解…