Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Системы искусственного интеллекта. Инструменты разработки. Экспертные системы. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
11
Правило 3
или
и
и
Правило 1
Правило 2
События
События
Условие 2
Условие 1
Условие 3
Рис. 1.2. Фрагмент структуры и-или графа
Продукционно-фреймовая модель знаний, имеющая широкое практическое применение, позволяет определять наборы правил непосредственно во фреймах. Декомпозиция области знаний на множество представляемых фреймами концептов остается постоянной в процессе логического вывода. Семантика процесса вывода инициирует вычисление неизвестных заранее значений слотов, например, характеристик объектов. Динамические знания образуются присоединенными процедурами и процедурами-демонами. Первые служат для определения значений слотов (процедуры-запросы), а демоны срабатывают при присваивании или изменении значения слота. Данная модель обеспечивает естественное распределение динамических знаний между узлами-концептами.
12
2. ИНСТРУМЕНТАЛЬНЫЕ СРЕДСТВА РАЗРАБОТКИ СИИ
2.1 Среда разработки и программное окружение
Дистрибутив1 языка программирования Python включает в себя легкую инструментальную среду разработки и обучения IDLE (Integrated Development and Learning Environment). Среда IDLE позволяет выполнять привычные задачи по запуску, редактированию и сопровождению проектов на языке программирования Python (рис. 2.1). Важным достоинством как самого дистрибутива Python (и языка программирования), так и непосредственно среды IDLE является кроссплатформенность, т. е. слабая зависимость от операционной системы и архитектуры ПК.
Рис. 2.1. Каталог дистрибутива Python в меню «Пуск» (Windows 10)
После запуска среды открывается окно интерактивного интерпретатора (shell) языка программирования Python, который позволяет выполнять инструкции программы в интерактивной форме – строка за строкой (рис. 2.2).
1
https://www.python.org/downloads/
13
Рис. 2.2. Окно Shell (интерактивная оболочка интерпретатора)
Скрипт-программы можно выполнять в пакетном режиме, когда программа, заранее подготовленная в редакторе исходного текста, загружается в интерпретатор языка программирования. Для этого необходимо использовать
пункт File (рис. 2.3) главного меню окна Shell → пункт Open и указать место размещения подготовленного файла (традиционно, для скрипт–программ
Python, в особенности в среде Windows-систем используется расширение py).
14
Рис. 2.3. Главное меню окна Shell
Очевидно, что среду разработки можно использовать для создания новых скрипт-программ. Для этого можно использовать встроенный редактор исходных текстов, доступ к которому осуществляется из главного меню File
главного меню окна Shell → пункт New File. Редактор исходного кода представляет все наиболее востребованные возможности для работы (рис. 2.4).
Рис. 2.4. Встроенный редактор исходных текстов
Главное меню редактора, наряду с множеством традиционных функций, позволяет отправить текущую скрипт–программу на интерпретацию. Для этого
следует использовать пункт Run → Run Module или воспользоваться клавишей
F5 (рис. 2.5).
15
Рис. 2.5. Запуск интерпретации текущего скрипта
Результаты интерпретации (ошибки и пр.), будут выводиться в главном окне Shell.
В инфраструктуру дистрибутива языка Python встроена система управления расширениями, которые оформлены в специальные пакеты. Утилита
pip используется для управления установкой и сопровождением расширений Python. Список расширений и индекс доступных пактов доступен через службу индексирования официальных расширений (пакетов) Python (Python Package Index, PyPI)2.
Официальный репозиторий PyPi (сетевое хранилище) построен по принципам схожим с таковыми в системах CPAN (Perl), PEAR (PHP), CTAN (TeX) и т. д., и предназначен в первую очередь для обеспечения доступа к большому количеству сторонних расширений и библиотек для языка программирования Python.
Среди наиболее востребованных библиотек, в фокусе научных и инженерных исследований, компьютерных наук, наук о данных и искусственному интеллекту можно выделить: NumPy, SciPy, Matplotlib, SciKit- Learn, Pandas и некоторые прочие. Несомненным достоинством инфраструктуры проекта Python (в целом) является возможность простой установки сторонних зависимостей (библиотек и расширений) с помощью встроенного пакетного менеджера pip. Например, на рис. 2.6 продемонстрирована инструкция стандартной командной строки Windows– систем (cmd.exe), позволяющая, при наличии активного подключения к сети Интернет, выполнить установку библиотеки NumPy в локальный (развернутый в системе) дистрибутив Python. Аналогичным образом устанавливаются все
2
https://pypi.python.org/
16
расширения и библиотеки, входящие в зависимости демонстрируемых далее скрипт-программ.
Рис. 2.6. Установка дополнительных пакетов с помощью менеджера pip
2.2 Машинное обучение на основе дерева решений
Деревья решений (от англ. Decision trees) — это непараметрический контролируемый метод обучения (обучение с учителем), используемый в целях классификации и регрессии. Цель построения дерева состоит в том, чтобы создать модель, которая способна предсказывать значение целевой (от англ. target) переменной, основываясь на относительно простых правилах принятия решений, которые выведены моделью в процессе обучения из исходных данных (обучающей выборки). Чем глубже дерево, тем сложнее правила принятия решений и тем точнее модель. Дерево решений можно рассматривать как один из методов кусочно-постоянной аппроксимации.
Среди преимуществ данного алгоритма отмечают следующие:
− относительно простой для понимания и интерпретации алгоритм
работы, который легко визуализируется;
− метод не требует глубокой подготовки данных. Другие методы
машинного обучения часто требуют предварительной нормализации данных, создания фиктивных переменных и удаления пустых значений;
− вычислительная сложность прогнозирования данных описывается
логарифмической функцией от длины исходных данных, используемых для обучения дерева;
− дерево решений поддерживает обработку как числовых, так и
категориальных данные. Методы машинного обучения обычно специализируются на анализе наборов данных, которые имеют только один тип переменной;
− метод подходит для решения задачи с несколькими выходами;
17
− использует модель белого ящика. Если какое-либо состояние
наблюдаемо в построенной модели, то объяснение перехода в данное состояние можно представить булевой логикой;
− модель можно проверить с помощью статистических тестов, что
позволяет проектировать системы заданной надежности принятия решений.
К недостаткам деревьев решений можно отнести:
− алгоритм может создавать слишком сложные деревья, плохо
обобщающие данные (проблема переобучения, от англ. overfitting). Для решения данных проблем используют методы раннего отсечения (от англ. pruning), установка минимального количества выборок, необходимых для конечного узла дерева (листа), или установка максимальной глубины дерева;
− деревья решений могут быть нестабильными, поскольку небольшие
изменения в данных приводят к созданию модифицированного дерева. Эта проблема смягчается использованием набора деревьев решений (от англ. random tree forest) и рандомизации;
− прогноз дерева решений представляет собой функцию кусочно-
постоянных приближений, поэтому они не используются для экстраполирования данных;
− задача получения оптимального дерева решений является NP-
полной (от англ. nondeterministic polynomial-time complete). Практические приемы обучения дерева решений основаны на эвристических методах (например, жадный алгоритм), в которых в каждом узел могут приниматься локально-оптимальные решения. Очевидно, что такие алгоритмы не могут гарантировать получение глобально оптимального дерева решений;
− если некоторые классы в исходном обучающем наборе доминируют,
то дерево может быть необъективным.
Деревья решений, как правило, подходят для данных с большим количеством признаков (от англ. features). Однако очень важно получить правильное соотношение выборок к количеству признаков, поскольку дерево с небольшим количеством выборок в многомерном пространстве признаков, скорее всего, переобучится.
В общем виде, не учитывающем особенности конкретной реализации дерева и набора данных, временная сложность построения дерева равна
𝑂((𝑛 ∙ 𝑚
)
𝑙𝑜𝑔⁡(𝑛)), где n – количество выборок обучения, m – количество
признаков. Время принятия решения по дереву равно 𝑂(log⁡(𝑛)).
Для принятия решения по модели построенного дерева используется несколько базовых алгоритмов:
1) ID3 (Итеративный дихотомайзер). Алгоритм создает многоходовое
дерево, находя для каждого узла категориальный признак, который даст наибольший прирост информации для классификационной цели (жадный алгоритм).
18
2) Алгоритм C4.5 использует динамическое определение дискретного
атрибута (на основе числовых переменных), который разбивает непрерывное значение атрибута на дискретный набор интервалов. C4.5 преобразует обученные деревья (т. е. выходные данные алгоритма ID3) в наборы правил «если – то». Затем оценивается точность каждого правила, чтобы определить порядок их применения. Сокращение дерева выполняется путем удаления предварительного условия, если при этом увеличивается точность полученного правила. Развитие этого алгоритма имеет обозначение C5.0. Однако алгоритм закрыт и опубликован под проприетарной лицензией. По результатам наблюдения, версия 5 использует меньше памяти и создает меньшие наборы правил, чем версия C4.5, при этом более точен.
3) CART3 (деревья классификации и регрессии) аналогичен алгоритму
C4.5, но отличается поддержкой числовых целевых переменных (регрессия). CART строит бинарные деревья, используя функцию и некоторый порог, которые дают наибольший прирост информации в каждом узле.
DecisionTreeClassifier – стандартный класс библиотеки scikit-learn, способный выполнять классификацию набора данных. Экземпляр класса принимает в качестве входных данных два массива: массив X, вида (n_samples, n_features), содержащий обучающие выборки, и массив Y целочисленных значений, вида (n_samples), содержащий метки классов для обучающих выборок. Пример создания и обучения простейшего дерева:
from sklearn import tree X = [[0, 0], [1, 1]] Y = [0, 1] clf = tree.DecisionTreeClassifier() сlf = clf.fit(X, Y)
После обучения (подгонки, от англ. fit) модель можно использовать для прогнозирования класса выборок:
clf.predict([[2., 2.]])
Если существует несколько классов с одинаковой и большей вероятностью, классификатор (дерево) предскажет класс с наименьшим индексом среди этих классов. В качестве альтернативы выводу определенного класса можно предсказать вероятность каждого класса, которая представляет собой долю обучающих выборок класса в конечном листе дерева:
clf.predict_proba([[2., 2.]])
3
Библиотека scikit-learn использует модифицированный алгоритм CART.
19
Класс DecisionTreeClassifier поддерживает как бинарную (метки [-1, 1]), так и мультиклассовую (метки [0, …, K-1]) классификацию. Используя демонстрационный набор данных Iris4, поставляемый в дистрибутиве библиотеки, можно построить дерево на реальной статистической выборке:
from sklearn.datasets import load_iris from sklearn import tree iris = load_iris() X, y = iris.data, iris.target clf = tree.DecisionTreeClassifier() clf = clf.fit(X, y)
После обучения можно построить дерево (рис. 2.7) с помощью функции plot_tree:
tree.plot_tree(clf)
Рис. 2.7. Пример дерева решений для набора данных Iris
Стандартная функция plot_tree отрисовки деревьев, реализованная в библиотеке scikit-learn, достаточно ограниченна в возможностях визуализации, хотя и использует библиотеку и драйвер matplotlib. В связи с этим предпочтительнее экспортировать дерево в формат векторной библиотеки Graphviz. Экспорт дерева, построенного в предыдущем примере, в файл PDF:
import graphviz dot_data = tree.export_graphviz(clf, out_file=None)
4
Подробнее о наборе, гиперссылка: https://en.wikipedia.org/wiki/Iris_flower_data_set
20
graph = graphviz.Source(dot_data) graph.render("iris")
При желании можно настроить вывод векторной графики (рис. 2.8) по своему вкусу, учитывая цветовое разделение разных классов, текстовые метки и т. д.:
dot_data = tree.export_graphviz(clf, out_file=None, feature_names=iris.feature_names, class_names=iris.target_names, filled=True, rounded=True, special_characters=True) graph = graphviz.Source(dot_data)
Наконец, дерево можно экспортировать в простой текстовый формат с помощью функции export_text. Этот способ не требует установки внешних библиотек и наиболее компактен:
Рис. 2.8. Модификация дерева решений
from sklearn.datasets import load_iris from sklearn.tree import DecisionTreeClassifier from sklearn.tree import export_text iris = load_iris() decision_tree = DecisionTreeClassifier(random_state=0, max_depth=2)
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]