Я использую несколько наборов данных, доступных в Интернете, и пытаюсь визуализировать дерево. Однако это вообще не позволяет мне визуализировать вариант дерева. Может ли кто-нибудь помочь мне, как получить древовидную диаграмму в weka, используя наборы данных, доступные в Интернете?
Визуализация дерева классификации Weka
Ответы (5)
Посмотрите здесь http://maya.cs.depaul.edu/classes/ect584/weka/classify.html, например.
Сначала вы должны подогнать свое дерево решений (я использовал классификатор J48 для набора данных iris
) обычным способом. На панели списка результатов (внизу слева в проводнике Weka) щелкните правой кнопкой мыши соответствующий вывод и выберите «Визуализировать дерево», как показано ниже.
Если вы установили плагин Prefuse, вы даже можете визуализировать свое дерево в более привлекательном виде.
Если вы хотите сделать это с помощью java-программы, напишите следующую программу:
import java.awt.BorderLayout;
import java.io.BufferedReader;
import java.io.FileReader;
import weka.classifiers.*;
import weka.classifiers.trees.J48;
import weka.core.Instances;
import weka.gui.treevisualizer.PlaceNode2;
import weka.gui.treevisualizer.TreeVisualizer;
public class WekaJ48 {
public static void main(String args[]) throws Exception {
// train classifier
J48 cls = new J48();
Instances data = new Instances(new BufferedReader(new File
Reader("D:\\sample.arff")));
data.setClassIndex(data.numAttributes() - 1);
cls.buildClassifier(data);
// display classifier
final javax.swing.JFrame jf =
new javax.swing.JFrame("Weka Classifier Tree Visualizer: J48");
jf.setSize(500,400);
jf.getContentPane().setLayout(new BorderLayout());
TreeVisualizer tv = new TreeVisualizer(null,
cls.graph(),
new PlaceNode2());
jf.getContentPane().add(tv, BorderLayout.CENTER);
jf.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent e) {
jf.dispose();
}
});
jf.setVisible(true);
tv.fitToScreen();
}
}
Вы увидите всплывающее окно, показывающее вам дерево.
С помощью Weka 3.7, которая включает в себя менеджер пакетов, вы можете сделать следующее:
Перейдите на страницу http://weka.wikispaces.com/Unofficial+packages+for+WEKA+3.7 и прочитать текст о пакетах, и перейти к
Визуализация
graphviz-treevisualize -- Создание красивых графиков в Проводнике из деревьев (например, J48) с использованием исполняемых файлов GraphViz.
Скопируйте этот URL в буфер обмена:
(Я думаю, что это репозиторий github от одного из разработчиков weka. Ссылка может немного измениться в будущем)
Откройте менеджер пакетов, нажмите кнопку «Файл/URL», введите этот URL из буфера обмена, установите пакет.
Теперь запустите классификатор. Щелкните правой кнопкой мыши в списке результатов (см. рисунок)
Затем вы можете визуализировать дерево решений в виде красивого растрового изображения и экспортировать его в формате .bmp, Файл .png, .eps с помощью диалогового окна «Сохранить как». (Файл .eps будет содержать встроенный растровый объект):
Если вам нужен вывод векторной графики, запустите классификацию из командной строки и экспортируйте в файл формата .dot.
java -Xmx1024M -cp /usr/local/lib/R/site-library/RWekajars/java//weka.jar weka.classifiers.trees.J48 -t breast-cancer.arff -C 0.25 -M 2 -g > breast-cancer.arff.dot
Затем переводим в формат svg:
dot -o breast-cancer.arff.dot.svg breast-cancer.arff.dot -Tsvg
В Java код, реализующий это, находится в packages/graphviz-treevisualize-2014.8.1.jar.
weka/gui/visualize/plugins/GraphVizPanel.class
weka/gui/visualize/plugins/GraphVizTreeVisualization.class
weka/gui/visualize/plugins/GraphVizTreeVisualization.props
weka/gui/visualize/plugins/GraphVizTreeVisualizationPlugin$1$1.class
weka/gui/visualize/plugins/GraphVizTreeVisualizationPlugin$1$2.class
weka/gui/visualize/plugins/GraphVizTreeVisualizationPlugin$1.class
weka/gui/visualize/plugins/GraphVizTreeVisualizationPlugin.class
Опция "Визуализированное дерево" недоступна, поскольку у вас не установлен соответствующий плагин визуализации. Некоторые из алгоритмов древовидной классификации (такие как R48 и RandomTree) используют «инструментарий предварительной визуализации», поэтому для визуализации дерева необходимо установить плагин prefuseTree
.
Используйте Weka 3.7.* со встроенным диспетчером пакетов для простой установки подключаемого модуля.
Если вы используете командную строку WEKA (Simple CLI), вы можете вывести информацию о графике с помощью параметра -g, а затем использовать ее в GraphViz.
Пример запуска J48 в наборе данных радужной оболочки:
`java weka.classifiers.trees.J48 -C 0.25 -M 2 -t "C:\datasets\iris.arff" -g`
выходы:
digraph J48Tree {
N0 [label="petalwidth" ]
N0->N1 [label="<= 0.6"]
N1 [label="Iris-setosa (50.0)" shape=box style=filled ]
N0->N2 [label="> 0.6"]
N2 [label="petalwidth" ]
N2->N3 [label="<= 1.7"]
N3 [label="petallength" ]
N3->N4 [label="<= 4.9"]
N4 [label="Iris-versicolor (48.0/1.0)" shape=box style=filled ]
N3->N5 [label="> 4.9"]
N5 [label="petalwidth" ]
N5->N6 [label="<= 1.5"]
N6 [label="Iris-virginica (3.0)" shape=box style=filled ]
N5->N7 [label="> 1.5"]
N7 [label="Iris-versicolor (3.0/1.0)" shape=box style=filled ]
N2->N8 [label="> 1.7"]
N8 [label="Iris-virginica (46.0/1.0)" shape=box style=filled ]
}
и в Графвизе: