Java 人工智能 - Weka - 回歸算法
數(shù)據(jù)樣本
數(shù)據(jù)集為能源效率數(shù)據(jù)集
基于建筑的結(jié)構(gòu)的表面 墻體 屋頂面積 高度 緊湊度特點(diǎn) 研究它們的目標(biāo)變量 加熱與冷卻負(fù)載要求
現(xiàn)在有 12 種不同房屋配置
這 12 種的不同房屋配置 通過(guò)改變 18 種建筑特征得出 768種建筑
加載數(shù)據(jù)
CSV 格式
CSV的意思為逗號(hào)分隔值



轉(zhuǎn)換之后

// 加載 CSV 文件
CSVLoader loader = new CSVLoader();
// 設(shè)置數(shù)據(jù)源
loader.setSource(new File(EnergyLoad.class.getClassLoader().getResource("data/ENB2012_data.csv").getPath()));
// 獲取數(shù)據(jù)集
Instances data = loader.getDataSet();
System.out.println(data);


// 除開(kāi)冷 熱 屬性作為結(jié)果變量 其余屬性作為分類(lèi)屬性
data.setClassIndex(data.numAttributes() - 2);
// 移除冷卻負(fù)載屬性 即為 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
使用算法訓(xùn)練模型
// 創(chuàng)建一個(gè)線性回歸模型
// 新模型實(shí)例 傳遞參數(shù)和數(shù)據(jù)
LinearRegression model = new LinearRegression();
// 學(xué)習(xí)的模型存儲(chǔ)在 model 對(duì)象當(dāng)中
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
線性回歸模型構(gòu)建了一個(gè)函數(shù) 把輸入變量 x 的 各個(gè)值 映射為y 組合在一起 并且滿足線性關(guān)系
對(duì)加熱負(fù)載進(jìn)行評(píng)估
特征變量前面的數(shù)字 對(duì)要預(yù)測(cè)的目標(biāo)變量的影響
+符號(hào)表示正面影響
-符號(hào)表示負(fù)面影響
數(shù)值的大小影響的程度
比如特征X1 相對(duì)緊湊度 它跟加熱負(fù)載是負(fù)相關(guān)
玻璃窗面積與加熱負(fù)載正相關(guān)的
這兩個(gè)特征也對(duì)最后加熱負(fù)載的評(píng)估有明顯影響
交叉驗(yàn)證對(duì)模型性能做評(píng)估
做10折交叉驗(yàn)證
Evaluation eval = new Evaluation(data);
eval.crossValidateModel(model, data, 10,
? ? ? ?new Random(1), new String[]{});
System.out.println(eval.toSummaryString());
輸出常見(jiàn)的評(píng)估指標(biāo) 包括相關(guān)系數(shù) 平均絕對(duì)誤差 相對(duì)絕對(duì)誤差
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
回歸樹(shù)
一組回歸模型
每一個(gè)模型對(duì)應(yīng)與模型相關(guān)的數(shù)據(jù)中一部分

回歸模型與所有數(shù)據(jù)達(dá)到最好的擬合的模型
擬合可以理解為誤差
回歸樹(shù)是一組的回歸模型
每個(gè)回歸模型只對(duì)一部分?jǐn)?shù)據(jù)進(jìn)行建模
相比回歸模型來(lái)說(shuō) 回歸樹(shù)對(duì)數(shù)據(jù)的擬合更加好
但是兩個(gè)回歸模型(函數(shù))在各自的建模區(qū)域之間會(huì)出現(xiàn)分段的現(xiàn)象
Weka 中用 M5 類(lèi)實(shí)現(xiàn)回歸樹(shù)
// 回歸樹(shù)
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?
一顆葉子節(jié)點(diǎn)帶有方程式的樹(shù)
就是說(shuō)葉子節(jié)點(diǎn)是有方程式的

這棵樹(shù)總共 13 個(gè)葉子節(jié)點(diǎn)
每個(gè)葉子節(jié)點(diǎn)對(duì)應(yīng)于一個(gè)線程方程
對(duì)預(yù)測(cè)輸出做可視化處理
最重要的特征在樹(shù)頂為 X1 相對(duì)密實(shí)性
終端節(jié)點(diǎn)也叫葉子節(jié)點(diǎn)都是一個(gè)線性回歸模型
總共線性回歸模型用于解釋到達(dá)這部分的數(shù)據(jù)
評(píng)估模型性能
// 評(píng)估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??