#c# #machine-learning #decision-tree
#c# #машинное обучение #дерево решений
Вопрос:
Я изучаю, как реализовать простое дерево решений на C #. Может кто-нибудь объяснить мне, как это выглядит в псевдокоде, или дать какой-нибудь простой учебник по реализации на c #?
У меня есть этот набор данных:
(отсюда: http://storm.cis.fordham.edu /~gweiss/интеллектуальный анализ данных/weka-data/weather.nominal.arff )
и я сделал графическое дерево решений
(Извините за мой английский)
Моя идея заключается только в этом:
if outlook = "overcast" then no
if outlook = "sunny" and humidity = "normal" then yes
if outlook = "sunny" and humidity = "high" then no
if outlook = "rain" and wind = "true" then no
if outlook = "rain" and wind = "fasle" then yes
Я действительно не знаю, как продолжить
Комментарии:
1. Нет ни одного способа реализовать дерево решений. Существует множество различных методов и алгоритмов. Вы могли бы вручную закодировать параметры. Вы можете создать таблицу решений, аналогичную той, которая у вас есть, и запросить ее. Вы могли бы вы могли даже использовать фактическое дерево, узлами которого являются метки правил. Тогда поиск конкретного ответа будет таким же, как поиск конечного узла с определенным путем
2. Я ищу самый простой способ его реализации… Для начала нужно какое-то руководство.
3. Самый простой способ — прочитать о деревьях решений и реализациях и найти тот, который вам больше всего подходит.
4. Вложенные случаи были бы началом
5. Создайте модульный тест для одного случая, напишите код для прохождения теста, создайте еще один тест для другого случая, напишите код для прохождения обоих случаев и так далее, пока тесты не охватят все случаи, и вы не заставите их пройти. После того, как вы сможете свободно проводить рефакторинг, попробуйте другие подходы. Когда вы будете писать код шаг за шагом, вы получите лучшее представление об алгоритме, который вам нужно использовать. И если вы начнете читать о принятии решений после прохождения всех тестов, вы поймете намного быстрее, тогда вы начнете готовиться сейчас
Ответ №1:
Чтобы частично ответить на вопрос, по-видимому, здесь описана концепция дерева решений. Чтобы реализовать дерево решений для указанного выше типа, вы можете объявить класс, соответствующий типу из таблицы в вашем вопросе. На основе этого типа вам необходимо создать древовидную структуру данных, в которой количество дочерних элементов не ограничено. Хотя фактические данные содержатся только в листьях, было бы лучше, чтобы каждый элемент базового типа был определен как nullable . Таким образом, в каждом узле вы можете установить только те элементы, для которых установлено определенное значение его дочерних элементов. Кроме того, тогда no
должно быть представлено количество узлов со значениями yes
и.
Ответ №2:
Если вы строите дерево решений на основе алгоритма ID3, вы можете ссылаться на этот псевдокод.
ID3 (Examples, Target_Attribute, Attributes)
Create a root node for the tree
If all examples are positive, Return the single-node tree Root, with label = .
If all examples are negative, Return the single-node tree Root, with label = -.
If number of predicting attributes is empty, then Return the single node tree Root,
with label = most common value of the target attribute in the examples.
Otherwise Begin
A ← The Attribute that best classifies examples.
Decision Tree attribute for Root = A.
For each possible value, vi, of A,
Add a new tree branch below Root, corresponding to the test A = vi.
Let Examples(vi) be the subset of examples that have the value vi for A
If Examples(vi) is empty
Then below this new branch add a leaf node with label = most common target value in the examples
Else below this new branch add the subtree ID3 (Examples(vi), Target_Attribute, Attributes – {A})
End
Return Root
Если вы хотите узнать больше об алгоритме ID3, пожалуйста, перейдите по ссылке Алгоритм ID3
Комментарии:
1. Похоже, это не тот алгоритм, с помощью которого было построено верхнее дерево.