Java 人工智能 - Weka - 分類算法
數(shù)據(jù)樣本
加載數(shù)據(jù)
Weka 接收的格式為 ARRF
數(shù)據(jù)源對象
ConverterUtils.DataSource source = new ConverterUtils.DataSource(AnimalClassify.class.getClassLoader().getResource("data/zoo.arff").getPath());
從數(shù)據(jù)源對象獲取數(shù)據(jù)集
Instances dataSet = source.getDataSet();
打印數(shù)據(jù)集數(shù)據(jù)量
System.out.println(dataSet.numInstances() + " instances loaded.");

打印整個數(shù)據(jù)集
System.out.println(dataSet.toString());
@relation zoo
@attribute animal {aardvark,antelope,bass,bear,boar,buffalo,calf,carp,catfish,cavy,cheetah,chicken,chub,clam,crab,crayfish,crow,deer,dogfish,dolphin,dove,duck,elephant,flamingo,flea,frog,fruitbat,giraffe,girl,gnat,goat,gorilla,gull,haddock,hamster,hare,hawk,herring,honeybee,housefly,kiwi,ladybird,lark,leopard,lion,lobster,lynx,mink,mole,mongoose,moth,newt,octopus,opossum,oryx,ostrich,parakeet,penguin,pheasant,pike,piranha,pitviper,platypus,polecat,pony,porpoise,puma,pussycat,raccoon,reindeer,rhea,scorpion,seahorse,seal,sealion,seasnake,seawasp,skimmer,skua,slowworm,slug,sole,sparrow,squirrel,starfish,stingray,swan,termite,toad,tortoise,tuatara,tuna,vampire,vole,vulture,wallaby,wasp,wolf,worm,wren}
@attribute hair {false,true}
@attribute feathers {false,true}
@attribute eggs {false,true}
@attribute milk {false,true}
@attribute airborne {false,true}
@attribute aquatic {false,true}
@attribute predator {false,true}
@attribute toothed {false,true}
@attribute backbone {false,true}
@attribute breathes {false,true}
@attribute venomous {false,true}
@attribute fins {false,true}
@attribute legs numeric
@attribute tail {false,true}
@attribute domestic {false,true}
@attribute catsize {false,true}
@attribute type {mammal,bird,reptile,fish,amphibian,insect,invertebrate}
@data
aardvark,true,false,false,true,false,false,true,true,true,true,false,false,4,false,false,true,mammal
antelope,true,false,false,true,false,false,false,true,true,true,false,false,4,true,false,true,mammal
bass,false,false,true,false,false,true,true,true,true,false,false,true,0,true,false,false,fish
bear,true,false,false,true,false,false,true,true,true,true,false,false,4,false,false,true,mammal
boar,true,false,false,true,false,false,true,true,true,true,false,false,4,true,false,true,mammal
buffalo,true,false,false,true,false,false,false,true,true,true,false,false,4,true,false,true,mammal
calf,true,false,false,true,false,false,false,true,true,true,false,false,4,true,true,true,mammal
carp,false,false,true,false,false,true,false,true,true,false,false,true,0,true,true,false,fish
catfish,false,false,true,false,false,true,true,true,true,false,false,true,0,true,false,false,fish
cavy,true,false,false,true,false,false,false,true,true,true,false,false,4,false,true,false,mammal
cheetah,true,false,false,true,false,false,true,true,true,true,false,false,4,true,false,true,mammal
chicken,false,true,true,false,true,false,false,false,true,true,false,false,2,true,true,false,bird
chub,false,false,true,false,false,true,true,true,true,false,false,true,0,true,false,false,fish
clam,false,false,true,false,false,false,true,false,false,false,false,false,0,false,false,false,invertebrate
crab,false,false,true,false,false,true,true,false,false,false,false,false,4,false,false,false,invertebrate
crayfish,false,false,true,false,false,true,true,false,false,false,false,false,6,false,false,false,invertebrate
crow,false,true,true,false,true,false,true,false,true,true,false,false,2,true,false,false,bird
deer,true,false,false,true,false,false,false,true,true,true,false,false,4,true,false,true,mammal
dogfish,false,false,true,false,false,true,true,true,true,false,false,true,0,true,false,true,fish
dolphin,false,false,false,true,false,true,true,true,true,true,false,true,0,true,false,true,mammal
dove,false,true,true,false,true,false,false,false,true,true,false,false,2,true,true,false,bird
duck,false,true,true,false,true,true,false,false,true,true,false,false,2,true,false,false,bird
elephant,true,false,false,true,false,false,false,true,true,true,false,false,4,true,false,true,mammal
flamingo,false,true,true,false,true,false,false,false,true,true,false,false,2,true,false,true,bird
flea,false,false,true,false,false,false,false,false,false,true,false,false,6,false,false,false,insect
frog,false,false,true,false,false,true,true,true,true,true,false,false,4,false,false,false,amphibian
frog,false,false,true,false,false,true,true,true,true,true,true,false,4,false,false,false,amphibian
fruitbat,true,false,false,true,true,false,false,true,true,true,false,false,2,true,false,false,mammal
giraffe,true,false,false,true,false,false,false,true,true,true,false,false,4,true,false,true,mammal
girl,true,false,false,true,false,false,true,true,true,true,false,false,2,false,true,true,mammal
gnat,false,false,true,false,true,false,false,false,false,true,false,false,6,false,false,false,insect
goat,true,false,false,true,false,false,false,true,true,true,false,false,4,true,true,true,mammal
gorilla,true,false,false,true,false,false,false,true,true,true,false,false,2,false,false,true,mammal
gull,false,true,true,false,true,true,true,false,true,true,false,false,2,true,false,false,bird
haddock,false,false,true,false,false,true,false,true,true,false,false,true,0,true,false,false,fish
hamster,true,false,false,true,false,false,false,true,true,true,false,false,4,true,true,false,mammal
hare,true,false,false,true,false,false,false,true,true,true,false,false,4,true,false,false,mammal
hawk,false,true,true,false,true,false,true,false,true,true,false,false,2,true,false,false,bird
herring,false,false,true,false,false,true,true,true,true,false,false,true,0,true,false,false,fish
honeybee,true,false,true,false,true,false,false,false,false,true,true,false,6,false,true,false,insect
housefly,true,false,true,false,true,false,false,false,false,true,false,false,6,false,false,false,insect
kiwi,false,true,true,false,false,false,true,false,true,true,false,false,2,true,false,false,bird
ladybird,false,false,true,false,true,false,true,false,false,true,false,false,6,false,false,false,insect
lark,false,true,true,false,true,false,false,false,true,true,false,false,2,true,false,false,bird
leopard,true,false,false,true,false,false,true,true,true,true,false,false,4,true,false,true,mammal
lion,true,false,false,true,false,false,true,true,true,true,false,false,4,true,false,true,mammal
lobster,false,false,true,false,false,true,true,false,false,false,false,false,6,false,false,false,invertebrate
lynx,true,false,false,true,false,false,true,true,true,true,false,false,4,true,false,true,mammal
mink,true,false,false,true,false,true,true,true,true,true,false,false,4,true,false,true,mammal
mole,true,false,false,true,false,false,true,true,true,true,false,false,4,true,false,false,mammal
mongoose,true,false,false,true,false,false,true,true,true,true,false,false,4,true,false,true,mammal
moth,true,false,true,false,true,false,false,false,false,true,false,false,6,false,false,false,insect
newt,false,false,true,false,false,true,true,true,true,true,false,false,4,true,false,false,amphibian
octopus,false,false,true,false,false,true,true,false,false,false,false,false,8,false,false,true,invertebrate
opossum,true,false,false,true,false,false,true,true,true,true,false,false,4,true,false,false,mammal
oryx,true,false,false,true,false,false,false,true,true,true,false,false,4,true,false,true,mammal
ostrich,false,true,true,false,false,false,false,false,true,true,false,false,2,true,false,true,bird
parakeet,false,true,true,false,true,false,false,false,true,true,false,false,2,true,true,false,bird
penguin,false,true,true,false,false,true,true,false,true,true,false,false,2,true,false,true,bird
pheasant,false,true,true,false,true,false,false,false,true,true,false,false,2,true,false,false,bird
pike,false,false,true,false,false,true,true,true,true,false,false,true,0,true,false,true,fish
piranha,false,false,true,false,false,true,true,true,true,false,false,true,0,true,false,false,fish
pitviper,false,false,true,false,false,false,true,true,true,true,true,false,0,true,false,false,reptile
platypus,true,false,true,true,false,true,true,false,true,true,false,false,4,true,false,true,mammal
polecat,true,false,false,true,false,false,true,true,true,true,false,false,4,true,false,true,mammal
pony,true,false,false,true,false,false,false,true,true,true,false,false,4,true,true,true,mammal
porpoise,false,false,false,true,false,true,true,true,true,true,false,true,0,true,false,true,mammal
puma,true,false,false,true,false,false,true,true,true,true,false,false,4,true,false,true,mammal
pussycat,true,false,false,true,false,false,true,true,true,true,false,false,4,true,true,true,mammal
raccoon,true,false,false,true,false,false,true,true,true,true,false,false,4,true,false,true,mammal
reindeer,true,false,false,true,false,false,false,true,true,true,false,false,4,true,true,true,mammal
rhea,false,true,true,false,false,false,true,false,true,true,false,false,2,true,false,true,bird
scorpion,false,false,false,false,false,false,true,false,false,true,true,false,8,true,false,false,invertebrate
seahorse,false,false,true,false,false,true,false,true,true,false,false,true,0,true,false,false,fish
seal,true,false,false,true,false,true,true,true,true,true,false,true,0,false,false,true,mammal
sealion,true,false,false,true,false,true,true,true,true,true,false,true,2,true,false,true,mammal
seasnake,false,false,false,false,false,true,true,true,true,false,true,false,0,true,false,false,reptile
seawasp,false,false,true,false,false,true,true,false,false,false,true,false,0,false,false,false,invertebrate
skimmer,false,true,true,false,true,true,true,false,true,true,false,false,2,true,false,false,bird
skua,false,true,true,false,true,true,true,false,true,true,false,false,2,true,false,false,bird
slowworm,false,false,true,false,false,false,true,true,true,true,false,false,0,true,false,false,reptile
slug,false,false,true,false,false,false,false,false,false,true,false,false,0,false,false,false,invertebrate
sole,false,false,true,false,false,true,false,true,true,false,false,true,0,true,false,false,fish
sparrow,false,true,true,false,true,false,false,false,true,true,false,false,2,true,false,false,bird
squirrel,true,false,false,true,false,false,false,true,true,true,false,false,2,true,false,false,mammal
starfish,false,false,true,false,false,true,true,false,false,false,false,false,5,false,false,false,invertebrate
stingray,false,false,true,false,false,true,true,true,true,false,true,true,0,true,false,true,fish
swan,false,true,true,false,true,true,false,false,true,true,false,false,2,true,false,true,bird
termite,false,false,true,false,false,false,false,false,false,true,false,false,6,false,false,false,insect
toad,false,false,true,false,false,true,false,true,true,true,false,false,4,false,false,false,amphibian
tortoise,false,false,true,false,false,false,false,false,true,true,false,false,4,true,false,true,reptile
tuatara,false,false,true,false,false,false,true,true,true,true,false,false,4,true,false,false,reptile
tuna,false,false,true,false,false,true,true,true,true,false,false,true,0,true,false,true,fish
vampire,true,false,false,true,true,false,false,true,true,true,false,false,2,true,false,false,mammal
vole,true,false,false,true,false,false,false,true,true,true,false,false,4,true,false,false,mammal
vulture,false,true,true,false,true,false,true,false,true,true,false,false,2,true,false,true,bird
wallaby,true,false,false,true,false,false,false,true,true,true,false,false,2,true,false,true,mammal
wasp,true,false,true,false,true,false,false,false,false,true,true,false,6,false,false,false,insect
wolf,true,false,false,true,false,false,true,true,true,true,false,false,4,true,false,true,mammal
worm,false,false,true,false,false,false,false,false,false,true,false,false,0,false,false,false,invertebrate
wren,false,true,true,false,true,false,false,false,true,true,false,false,2,true,false,false,bird?
我們預測 Animal 屬性
因為對于新樣本 我們只知道其他屬性 不知道 Animal 屬性
所以要從數(shù)據(jù)集中去除該屬性
實例化一個移除屬性對象
Remove remove = new Remove();
實例化一個字符串數(shù)組對象
-R 為移除屬性
1 為移除第一個屬性
String[] opts = new String[]{"-R", "1"};
設置字符串數(shù)組對象
remove.setOptions(opts);
設置數(shù)據(jù)集
remove.setInputFormat(dataSet);
調用過濾器類的使用過濾器的靜態(tài)方法 把數(shù)據(jù)集以及要移除的屬性移除出去
dataSet = Filter.useFilter(dataSet, remove);
重新打印數(shù)據(jù)集
System.out.println(dataSet.toString());
特征選擇
也叫預處理 數(shù)據(jù)清洗
也就是選擇屬性
從屬性中選擇一個子集
可以簡化模型
減少訓練的時間 降低過擬合風險
用屬性選擇算法估評屬性的子集 計算出一個分數(shù)
分數(shù)可以表明屬性的品質
品質分數(shù)有信息增益 基尼指數(shù)
再用搜索算法 比如窮舉搜索 最佳優(yōu)先搜索進行屬性分類排序
信息增益 通過計算的個數(shù)等等 計算出屬性重要的程度 會給出一個分數(shù)
InfoGainAttributeEval eval = new InfoGainAttributeEval();
根據(jù)分數(shù)分類屬性的算法
Ranker search = new Ranker();
對象屬性選擇類
AttributeSelection attributeSelection = new AttributeSelection();
設置信息增益
attributeSelection.setEvaluator(eval);
設置搜索算法
attributeSelection.setSearch(search);
設置數(shù)據(jù)集
attributeSelection.SelectAttributes(dataSet);
調用 selectedAttributes 實例方法進行選擇
int[] indices = attributeSelection.selectedAttributes();
打印屬性索引數(shù)組
System.out.println(Arrays.toString(indices));
[12, 3, 7, 2, 0, 1, 8, 9, 13, 4, 11, 5, 15, 10, 6, 14, 16]
12 是 fins
3 是 eggs
7 是 aquatic
2 是 hair
@attribute hair {false,true}
@attribute feathers {false,true}
@attribute eggs {false,true}
@attribute milk {false,true}
@attribute airborne {false,true}
@attribute aquatic {false,true}
@attribute predator {false,true}
@attribute toothed {false,true}
@attribute backbone {false,true}
@attribute breathes {false,true}
@attribute venomous {false,true}
@attribute fins {false,true}
@attribute legs numeric
@attribute tail {false,true}
@attribute domestic {false,true}
@attribute catsize {false,true}
@attribute type {mammal,bird,reptile,fish,amphibian,insect,invertebrate}
保留的屬性應該是有助于進一步改進模型
學習算法
從訓練數(shù)據(jù)中學習算法
學習分類模型
J48 類 實現(xiàn)了 著名的 Quinlan's C4.5 決策樹學習算法
剪枝 tree pruning
控制模型的復雜度
未剪枝 un-pruned tree
可以傳遞一個 -U 參數(shù)
創(chuàng)建一個 J48 決策樹分類器空模型
J48 tree = new J48();
字符串數(shù)組
String[] options = new String[1];
-U 代表 未剪枝參數(shù)
options[0] = "-U";
設置決策樹分離器屬性
tree.setOptions(options);
調用構建分類器 存入數(shù)據(jù)集進行學習
tree.buildClassifier(dataSet);
經(jīng)過訓練的模型存儲在tree對象當中
輸出未剪枝的樹
System.out.println(tree);
未剪枝數(shù) 17個節(jié)點
9個葉子節(jié)點
J48 unpruned tree
------------------
feathers = false
| ? milk = false
| ? | ? backbone = false
| ? | ? | ? airborne = false
| ? | ? | ? | ? predator = false
| ? | ? | ? | ? | ? legs <= 2: invertebrate (2.0)
| ? | ? | ? | ? | ? legs > 2: insect (2.0)
| ? | ? | ? | ? predator = true: invertebrate (8.0)
| ? | ? | ? airborne = true: insect (6.0)
| ? | ? backbone = true
| ? | ? | ? fins = false
| ? | ? | ? | ? tail = false: amphibian (3.0)
| ? | ? | ? | ? tail = true: reptile (6.0/1.0)
| ? | ? | ? fins = true: fish (13.0)
| ? milk = true: mammal (41.0)
feathers = true: bird (20.0)
Number of Leaves ?: 9
Size of the tree : 17
可視化剪枝樹
TreeVisualizer tv = new TreeVisualizer(null, tree.graph(), new PlaceNode2());
JFrame frame = new JFrame("Tree Visualizer");
frame.setSize(800, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(tv);
frame.setVisible(true);

feathers 為根節(jié)點也稱為節(jié)點
會在當前節(jié)點檢查節(jié)點的屬性值
會先檢查feathers的屬性的值
如果feathers的屬性值存在 會進入右手分支
遍歷為bird是葉子節(jié)點就會輸出當前有多少個bird 樣本 當前有 20個
如果 feathers 屬性值不存在 會進入左手分支 到達下一個屬性 milk
繼續(xù)檢查milk屬性值
然后進入屬性值相匹配的分支 不斷重復這個過程 直到到達葉子節(jié)點
預測新數(shù)據(jù)

有其他屬性的未知動物的標簽
可以用已經(jīng)分類過的模型進行預測
構造一個特征向量
double[] vals = new double[dataSet.numAttributes()];
vals[0] = 1.0; // hair {false, true}
vals[1] = 0.0; // feathers {false, true}
vals[2] = 0.0; // eggs {false, true}
vals[3] = 1.0; // milk {false, true}
vals[4] = 0.0; // airborne {false, true}
vals[5] = 0.0; // aquatic {false, true}
vals[6] = 0.0; // predator {false, true}
vals[7] = 1.0; // toothed {false, true}
vals[8] = 1.0; // backbone {false, true}
vals[9] = 1.0; // breathes {false, true}
vals[10] = 1.0; // venomous {false, true}
vals[11] = 0.0; // fins {false, true}
vals[12] = 4.0; // legs INTEGER [0,9]
vals[13] = 1.0; // tail {false, true}
vals[14] = 1.0; // domestic {false, true}
vals[15] = 0.0; // catsize {false, true}
Instance myUnicorn = new DenseInstance(1.0,vals);
myUnicorn.setDataset(dataSet);
調用模型的classifyInstance方法獲取樣本的值 并返回標簽的索引
result的值為索引
模型訓練之后會存在各個樣本的標簽的索引
可以遍歷模型的標簽索引
double result = tree.classifyInstance(myUnicorn);
System.out.println(result);
System.out.println(dataSet.classAttribute().value((int)result));
0.0
0.0
預測的標簽結果為
mammal
評估模型的預測誤差以及性能
Classifier cl = new J48();
實現(xiàn)交叉驗證的類
Evaluation eval_roc = new Evaluation(dataSet);
cl 為模型 dataSet 提供數(shù)據(jù)集 10為折數(shù) random 隨機種子
eval_roc.crossValidateModel(cl, dataSet, 10, new Random(1), new Object[]{});
打印評估結果
System.out.println(eval_roc.toSummaryString());
Correctly Classified Instances ? ? ? ? ?93 ? ? ? ? ? ? ? 92.0792 %
Incorrectly Classified Instances ? ? ? ? 8 ? ? ? ? ? ? ? ?7.9208 %
Kappa statistic ? ? ? ? ? ? ? ? ? ? ? ? ?0.8955
Mean absolute error ? ? ? ? ? ? ? ? ? ? ?0.0225
Root mean squared error ? ? ? ? ? ? ? ? ?0.14 ?
Relative absolute error ? ? ? ? ? ? ? ? 10.2478 %
Root relative squared error ? ? ? ? ? ? 42.4398 %
Coverage of cases (0.95 level) ? ? ? ? ?96.0396 %
Mean rel. region size (0.95 level) ? ? ?15.4173 %
Total Number of Instances ? ? ? ? ? ? ?101 ? ?
正確數(shù)為 93
錯誤數(shù)為 8
混淆矩陣
查看特定的錯誤分類出現(xiàn)在什么地方
一個特定類值是如何進行預測的
double[][] confusionMatrix = eval_roc.confusionMatrix();
System.out.println(eval_roc.toMatrixString());
=== Confusion Matrix ===
?a ?b ?c ?d ?e ?f ?g ? <-- classified as
41 ?0 ?0 ?0 ?0 ?0 ?0 | ?a = mammal
?0 20 ?0 ?0 ?0 ?0 ?0 | ?b = bird
?0 ?0 ?3 ?1 ?0 ?1 ?0 | ?c = reptile
?0 ?0 ?0 13 ?0 ?0 ?0 | ?d = fish
?0 ?0 ?1 ?0 ?3 ?0 ?0 | ?e = amphibian
?0 ?0 ?0 ?0 ?0 ?5 ?3 | ?f = insect
?0 ?0 ?0 ?0 ?0 ?2 ?8 | ?g = invertebrate
第一行的字母為分類模型指派的標簽 對應于分類后的索引
其他行對應一個實際值為真的類值
比如說第二行是mammal的標簽 所有的都正確分類為該標簽為哺乳動物
第4行為爬行動物 有3個樣本被正確分類為reptile
一個分類為fish 一個被分類為insect?
package com.osrcd.weka;
import weka.attributeSelection.AttributeSelection;
import weka.attributeSelection.InfoGainAttributeEval;
import weka.attributeSelection.Ranker;
import weka.classifiers.Classifier;
import weka.classifiers.Evaluation;
import weka.classifiers.trees.J48;
import weka.core.DenseInstance;
import weka.core.Instance;
import weka.core.Instances;
import weka.core.converters.ConverterUtils;
import weka.filters.Filter;
import weka.filters.unsupervised.attribute.Remove;
import weka.gui.treevisualizer.PlaceNode2;
import weka.gui.treevisualizer.TreeVisualizer;
import javax.swing.*;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Random;
public class AnimalClassify {
? ?public static void main(String[] args) throws Exception {
? ? ? ?// 加載數(shù)據(jù)
? ? ? ?ConverterUtils.DataSource source = new ConverterUtils.DataSource(AnimalClassify.class.getClassLoader().getResource("data/zoo.arff").getPath());
? ? ? ?Instances dataSet = source.getDataSet();
? ? ? ?System.out.println(dataSet.numInstances() + " instances loaded.");
? ? ? ?System.out.println(dataSet.toString());
? ? ? ?Remove remove = new Remove();
? ? ? ?String[] opts = new String[]{"-R", "1"};
? ? ? ?remove.setOptions(opts);
? ? ? ?remove.setInputFormat(dataSet);
? ? ? ?dataSet = Filter.useFilter(dataSet, remove);
? ? ? ?System.out.println(dataSet.toString());
? ? ? ?// 特征選擇 預處理 數(shù)據(jù)清洗
? ? ? ?// 信息增益 通過計算的個數(shù)等等 計算出屬性重要的程度 會給出一個分數(shù)
? ? ? ?InfoGainAttributeEval eval = new InfoGainAttributeEval();
? ? ? ?// 根據(jù)分數(shù)分類屬性的算法
? ? ? ?Ranker search = new Ranker();
? ? ? ?AttributeSelection attributeSelection = new AttributeSelection();
? ? ? ?attributeSelection.setEvaluator(eval);
? ? ? ?attributeSelection.setSearch(search);
? ? ? ?attributeSelection.SelectAttributes(dataSet);
? ? ? ?int[] indices = attributeSelection.selectedAttributes();
? ? ? ?System.out.println(Arrays.toString(indices));
? ? ? ?// 學習算法
? ? ? ?J48 tree = new J48();
? ? ? ?String[] options = new String[1];
? ? ? ?options[0] = "-U";
? ? ? ?tree.setOptions(options);
? ? ? ?tree.buildClassifier(dataSet);
? ? ? ?System.out.println(tree);
? ? ? ?TreeVisualizer tv = new TreeVisualizer(null, tree.graph(), new PlaceNode2());
? ? ? ?JFrame frame = new JFrame("Tree Visualizer");
? ? ? ?frame.setSize(800, 500);
? ? ? ?frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
? ? ? ?frame.getContentPane().add(tv);
? ? ? ?frame.setVisible(true);
? ? ? ?double[] vals = new double[dataSet.numAttributes()];
? ? ? ?vals[0] = 1.0; // hair {false, true}
? ? ? ?vals[1] = 0.0; // feathers {false, true}
? ? ? ?vals[2] = 0.0; // eggs {false, true}
? ? ? ?vals[3] = 1.0; // milk {false, true}
? ? ? ?vals[4] = 0.0; // airborne {false, true}
? ? ? ?vals[5] = 0.0; // aquatic {false, true}
? ? ? ?vals[6] = 0.0; // predator {false, true}
? ? ? ?vals[7] = 1.0; // toothed {false, true}
? ? ? ?vals[8] = 1.0; // backbone {false, true}
? ? ? ?vals[9] = 1.0; // breathes {false, true}
? ? ? ?vals[10] = 1.0; // venomous {false, true}
? ? ? ?vals[11] = 0.0; // fins {false, true}
? ? ? ?vals[12] = 4.0; // legs INTEGER [0,9]
? ? ? ?vals[13] = 1.0; // tail {false, true}
? ? ? ?vals[14] = 1.0; // domestic {false, true}
? ? ? ?vals[15] = 0.0; // catsize {false, true}
? ? ? ?Instance myUnicorn = new DenseInstance(1.0,vals);
? ? ? ?myUnicorn.setDataset(dataSet);
? ? ? ?double result = tree.classifyInstance(myUnicorn);
? ? ? ?System.out.println(result);
? ? ? ?System.out.println(dataSet.classAttribute().value((int)result));
? ? ? ?Classifier cl = new J48();
? ? ? ?Evaluation eval_roc = new Evaluation(dataSet);
? ? ? ?eval_roc.crossValidateModel(cl, dataSet, 10, new Random(1), new Object[]{});
? ? ? ?System.out.println(eval_roc.toSummaryString());
? ? ? ?double[][] confusionMatrix = eval_roc.confusionMatrix();
? ? ? ?System.out.println(eval_roc.toMatrixString());
? ?}
}