Как интерпретировать результат классификации weka J48
Мне нужна помощь, чтобы интерпретировать результат в Weka с помощью J48
Я не знаю, как объяснить результат, я использую набор данных о сердечных заболеваниях из http://archive.ics.uci.edu/ml/datasets/Heart+Disease
И дерево J48
Пожалуйста, помогите мне, с некоторыми точками, важными для этого анализа, мой результат:
=== Запустить информацию ===
- Схема: weka.classifiers.trees.J48 -C 0,25 -M 2
- Отношение: AnaliseCardiaca
- Экземпляры: 303
- Атрибуты: 14
- возраст
- секс
- ср
- trestbps
- Чхоль
- FBS
- restecg
- thalach
- exang
- oldpeak
- скат
- Калифорния
- Тал
- num Тестовый режим: 10-кратная перекрестная проверка
=== Модель классификатора (полный набор тренировок) ===
J48 обрезанное дерево
cp <= 3
| sex <= 0: 0 (57.0/2.0)
| sex > 0
| | slope <= 1
| | | fbs <= 0
| | | | trestbps <= 152
| | | | | thalach <= 162
| | | | | | ca <= 1
| | | | | | | age <= 56: 0 (12.0/1.0)
| | | | | | | age > 56: 1 (3.0/1.0)
| | | | | | ca > 1: 1 (2.0)
| | | | | thalach > 162: 0 (27.0)
| | | | trestbps > 152: 1 (4.0/1.0)
| | | fbs > 0: 0 (9.0)
| | slope > 1
| | | slope <= 2
| | | | ca <= 0
| | | | | fbs <= 0
| | | | | | chol <= 261
| | | | | | | oldpeak <= 2.5: 0 (11.61/1.0)
| | | | | | | oldpeak > 2.5: 1 (3.0)
| | | | | | chol > 261: 1 (4.0)
| | | | | fbs > 0: 0 (4.0)
| | | | ca > 0
| | | | | thal <= 6: 1 (6.0/1.0)
| | | | | thal > 6
| | | | | | thalach <= 145: 0 (3.39)
| | | | | | thalach > 145: 1 (5.0/1.0)
| | | slope > 2: 0 (8.0/1.0)
cp > 3
| thal <= 3
| | ca <= 2
| | | exang <= 0
| | | | sex <= 0
| | | | | chol <= 304: 0 (14.0)
| | | | | chol > 304: 1 (3.0/1.0)
| | | | sex > 0
| | | | | ca <= 0: 0 (10.0/1.0)
| | | | | ca > 0: 1 (3.0)
| | | exang > 0
| | | | restecg <= 1
| | | | | slope <= 1: 0 (2.0)
| | | | | slope > 1: 1 (5.37)
| | | | restecg > 1
| | | | | ca <= 0: 0 (4.0)
| | | | | ca > 0
| | | | | | ca <= 1
| | | | | | | thalach <= 113: 0 (2.0)
| | | | | | | thalach > 113: 1 (4.0)
| | | | | | ca > 1: 0 (2.0)
| | ca > 2: 1 (4.0)
| thal > 3
| | fbs <= 0
| | | ca <= 0
| | | | chol <= 278: 0 (23.0/8.0)
| | | | chol > 278: 1 (6.0)
| | | ca > 0: 1 (46.0/12.0)
| | fbs > 0
| | | ca <= 1: 1 (3.88)
| | | ca > 1: 0 (11.75/4.75)
Количество листьев: 31
Размер дерева: 61
2 ответа
Если вы используете Weka Explorer, вы можете щелкнуть правой кнопкой мыши по строке результатов в списке результатов (расположен слева от окна под кнопкой запуска). Затем выберите визуализировать дерево. Это покажет изображение дерева.
Если вы все еще хотите понять результаты, как они показаны в вашем вопросе:
Результаты отображаются в виде дерева. Корень дерева начинается слева. Вы можете видеть, что первая используемая функция называется cp. Если cp меньше или равно 3, то следующая особенность в дереве - это пол и так далее. Вы можете видеть, что когда вы разделяете на пол и пол <= 0, вы достигаете предсказания. Прогноз равен 0, а (57/2) означает, что 57 наблюдений в поезде, установленном на этом пути, имели метку 0, а 2 - метку 1.
Вот как выглядит начало дерева:
--------start---------
| |
| |
|cp > 3 | cp <= 3
_________|______ ____|__________
| | | |
|thal>3 |thal<=3 |sex>0 |sex<=0
| | | |
... ... ... prediction 0 (57,2)
Объяснение AndreyF хорошее. Я хочу добавить некоторую информацию.
Почему у дерева есть числа с плавающей точкой в его листьях? Можно ли разделить (индивидуальный) экземпляр и получить значение с плавающей запятой? (на самом деле человека нельзя расколоть)
Когда у экземпляра все атрибуты установлены идеально, проблем не возникает. Но когда у экземпляра отсутствуют атрибуты, тогда классификатор (J48) не знает путь дерева для этого атрибута.
Например, если экземпляр имеет свой атрибут "oldpeak", такой как отсутствующий атрибут, то, когда он достигает узла "chol <= 261" (от предыдущего узла до узла "oldpeak"), классификатор разделит экземпляр в соответствии с вероятностью и процент экземпляра перейдет к "oldpeak <= 2.5", а другой процент перейдет к "oldpeak > 2.5".
Как классификатор рассчитывает эту вероятность? Он рассчитывает через экземпляры, которые не имеют отсутствующего атрибута для фактического узла. Для этого примера будет атрибут "oldpeak".
Если у нас есть 25% экземпляров без отсутствующего атрибута "oldpeak", которые были классифицированы в узле "oldpeak <= 2.5", и у нас есть 75% экземпляров без отсутствующего атрибута "oldpeak", которые были классифицированы в узле "oldpeak> 2.5" затем, когда классификатор хочет классифицировать экземпляр с отсутствующим атрибутом "oldpeak", тогда 25% этого экземпляра пройдут через "oldpeak <= 2.5", а остальные (75%) пройдут через "oldpeak > 2.5".
Вы можете попытаться удалить экземпляры с отсутствующими атрибутами, и вы увидите, что в дереве будут только целые числа, а не числа с плавающей запятой.
Спасибо.