欢迎光临散文网 会员登陆 & 注册

Java 人工智能 - Weka - 回归算法

2021-10-04 12:05 作者:开源开发者  | 我要投稿

数据样本

数据集为能源效率数据集


基于建筑的结构的表面 墙体 屋顶面积 高度 紧凑度特点 研究它们的目标变量 加热与冷却负载要求


现在有 12 种不同房屋配置

这 12 种的不同房屋配置 通过改变 18 种建筑特征得出 768种建筑


加载数据

CSV 格式

CSV的意思为逗号分隔值





转换之后

// 加载 CSV 文件

CSVLoader loader = new CSVLoader();

// 设置数据源

loader.setSource(new File(EnergyLoad.class.getClassLoader().getResource("data/ENB2012_data.csv").getPath()));

// 获取数据集

Instances data = loader.getDataSet();

System.out.println(data);

// 除开冷 热 属性作为结果变量 其余属性作为分类属性

data.setClassIndex(data.numAttributes() - 2);

// 移除冷却负载属性 即为 Y2

Remove remove = new Remove();

remove.setOptions(new String[]{"-R", data.numAttributes() + ""});

remove.setInputFormat(data);

data = Filter.useFilter(data, remove);

System.out.println(data);


@relation ENB2012_data-weka.filters.unsupervised.attribute.Remove-R10

@attribute X1 numeric

@attribute X2 numeric

@attribute X3 numeric

@attribute X4 numeric

@attribute X5 numeric

@attribute X6 numeric

@attribute X7 numeric

@attribute X8 numeric

@attribute Y1 numeric


使用算法训练模型

// 创建一个线性回归模型

// 新模型实例 传递参数和数据

LinearRegression model = new LinearRegression();

// 学习的模型存储在 model 对象当中

model.buildClassifier(data);

System.out.println(model);


Linear Regression 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



线性回归模型构建了一个函数 把输入变量 x 的 各个值 映射为y 组合在一起 并且满足线性关系

对加热负载进行评估


特征变量前面的数字 对要预测的目标变量的影响

+符号表示正面影响

-符号表示负面影响

数值的大小影响的程度

比如特征X1 相对紧凑度 它跟加热负载是负相关

玻璃窗面积与加热负载正相关的

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


交叉验证对模型性能做评估

做10折交叉验证

Evaluation eval = new Evaluation(data);

eval.crossValidateModel(model, data, 10,

       new Random(1), new String[]{});

System.out.println(eval.toSummaryString());

输出常见的评估指标 包括相关系数 平均绝对误差 相对绝对误差


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


回归树

一组回归模型

每一个模型对应与模型相关的数据中一部分

回归模型与所有数据达到最好的拟合的模型

拟合可以理解为误差


回归树是一组的回归模型

每个回归模型只对一部分数据进行建模


相比回归模型来说 回归树对数据的拟合更加好

但是两个回归模型(函数)在各自的建模区域之间会出现分段的现象



Weka 中用 M5 类实现回归树


// 回归树

M5P md5 = new M5P();

md5.setOptions(new String[]{""});

md5.buildClassifier(data);

System.out.println(md5);


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

LM num: 2

Y1 =

-14.6772 * X1

+ 0.0053 * X3

+ 40.2316 * X7

+ 0.0181 * X8

+ 15.649

LM num: 3

Y1 =

84.5112 * X1

+ 0.0053 * X3

+ 13.9115 * X7

- 0.1471 * X8

- 42.4943

LM num: 4

Y1 =

-2.8359 * X1

+ 0.0053 * X3

+ 4.3146 * X7

- 0.0111 * X8

+ 12.0357

LM num: 5

Y1 =

-6.0295 * X1

+ 0.0053 * X3

+ 4.3146 * X7

- 0.0524 * X8

+ 16.0295

LM num: 6

Y1 =

-4.3262 * X1

+ 0.0053 * X3

+ 4.3146 * X7

- 0.0665 * X8

+ 14.5905

LM num: 7

Y1 =

-4.3262 * X1

+ 0.0053 * X3

+ 4.3146 * X7

- 0.0888 * X8

+ 14.5832

LM num: 8

Y1 =

-4.3262 * X1

+ 0.0053 * X3

+ 4.3146 * X7

- 0.1025 * X8

+ 14.5352

LM num: 9

Y1 =

-0.8154 * X1

+ 0.0053 * X3

+ 4.3146 * X7

- 0.1025 * X8

+ 11.9531

LM num: 10

Y1 =

105.9033 * X1

+ 0.0113 * X3

+ 59.6616 * X7

+ 0.0975 * X8

- 58.7462

LM num: 11

Y1 =

81.6537 * X1

+ 0.0113 * X3

+ 10.8932 * X7

+ 0.0559 * X8

- 33.0837

LM num: 12

Y1 =

64.6565 * X1

+ 0.0113 * X3

+ 10.8932 * X7

- 0.0337 * X8

- 18.0037

LM num: 13

Y1 =

3.2622 * X1

- 0.0018 * X2

+ 0.0164 * X3

+ 44.6313 * X7

+ 0.0592 * X8

+ 11.9461

LM num: 14

Y1 =

9.1337 * X1

- 0.0018 * X2

+ 0.0164 * X3

- 0.0494 * X6

+ 44.6313 * X7

+ 0.0592 * X8

+ 7.321

LM num: 15

Y1 =

11.8776 * X1

- 0.0018 * X2

+ 0.0164 * X3

- 0.0428 * X6

+ 44.6313 * X7

+ 0.0592 * X8

+ 7.0198

LM num: 16

Y1 =

3.2622 * X1

- 0.0018 * X2

+ 0.0164 * X3

+ 44.6313 * X7

+ 0.0592 * X8

+ 14.1593

LM num: 17

Y1 =

35.1381 * X1

- 0.0018 * X2

+ 0.0164 * X3

+ 16.7723 * X7

+ 0.0592 * X8

- 10.1661

LM num: 18

Y1 =

3.2622 * X1

- 0.0018 * X2

+ 0.0164 * X3

+ 16.7723 * X7

+ 0.0592 * X8

+ 16.4949

LM num: 19

Y1 =

8.5464 * X1

- 0.0012 * X2

+ 0.029 * X3

+ 15.2851 * X7

- 0.2151 * X8

+ 7.86

LM num: 20

Y1 =

8.5464 * X1

- 0.0012 * X2

+ 0.029 * X3

+ 15.2851 * X7

- 0.0475 * X8

+ 7.4789

LM num: 21

Y1 =

8.5464 * X1

- 0.0012 * X2

+ 0.029 * X3

+ 15.2851 * X7

+ 0.013 * X8

+ 8.5537

LM num: 22

Y1 =

1.4309 * X1

- 0.0012 * X2

+ 0.1248 * X3

+ 9.5464 * X7

+ 0.0373 * X8

- 10.9927

LM num: 23

Y1 =

5.1744 * X1

- 0.0012 * X2

+ 0.0633 * X3

+ 9.5464 * X7

+ 0.0235 * X8

+ 5.7355

LM num: 24

Y1 =

5.1744 * X1

- 0.0012 * X2

+ 0.0761 * X3

+ 9.5464 * X7

- 0.0805 * X8

+ 3.4386

Number of Rules : 24

Process finished with exit code 0 


一颗叶子节点带有方程式的树

就是说叶子节点是有方程式的

这棵树总共 13 个叶子节点

每个叶子节点对应于一个线程方程

对预测输出做可视化处理

最重要的特征在树顶为 X1 相对密实性

终端节点也叫叶子节点都是一个线性回归模型

总共线性回归模型用于解释到达这部分的数据


评估模型性能


// 评估M5P模型

eval.crossValidateModel(md5, data, 10, new Random(1), new String[]{});

System.out.println(eval.toSummaryString());



Correlation coefficient                  0.9762

Mean absolute error                      1.371

Root mean squared error                  2.1889

Relative absolute error                 14.9764 %

Root relative squared error             21.6771 %

Total Number of Instances             1536  



Java 人工智能 - Weka - 回归算法的评论 (共 条)

分享到微博请遵守国家法律