Обучение дерева

В этой статье используется алгоритм CART (Classification and Regression Trees – деревья классификации и регрессии). Для построения дерева решений алгоритм сначала создает корневой узел. Рассмотрев все наблюдения в таблице, он выбирает наилучшую переменную, по которой можно разбивать данные на две части. Для этого нужно решить, какое условие (например, «Читал ли пользователь FAQ (Часто задаваемые вопросы)?») разобьет множество выходных данных так, чтобы было проще догадаться, что пользователь собирается сделать (на какое обслуживание он подпишется).

Функция divideset разбивает множество строк на два подмножества исходя из данных в одном столбце. На входе она принимает список строк, номер столбца и значение, по которому делить столбец. В случае прочтения FAQ возможные значения – «Да» или «Нет», а для столбца «Откуда пришел» есть несколько возможностей. Функция возвращает два списка строк: первый содержит те строки, для которых данные в указанной колонке соответствуют переданному значению, второй – остальные строки.

#  Разбиение множества по указанному столбцу. Может обрабатывать как числовые,

#  так и дискретные значения.

def divideset(rows,column,value):

#       Создать функцию, которая сообщит, относится ли строка к первой группе

#       (true) или ко второй (false) split_function=None

if isinstance(value,int) or isinstance(value,float):

split_function=lambda row:row[column]>=value else:

split_function=lambda row:row[column]==value

#       Разбить множество строк на две части и вернуть их set1=[row for row in rows if split_function(row)] set2=[row for row in rows if not split_function(row)] return (set1,set2)

В этом коде создается функция split_function, которая разбивает данные на две части. Это делается по-разному в зависимости от того, является ли множество значений непрерывным (float) или дискретным (int). В первом случае возврат true означает, что значение в столбце больше value. Во втором split_function просто проверяет, совпадает ли значение в столбце с value. Затем созданная функция применяется для разбиения множества данных на две части: первая состоит из строк, для которые split_function вернула true, вторая – из тех, для которых она вернула false.

Запустите интерпретатор Python и попробуйте разбить множество результатов по столбцу «Читал FAQ»: $ python

>>> import treepredict

>>> treepredict.divideset(treepredict.my_data,2,’yes’)

([[‘slashdot’, ‘USA’, ‘yes’, 18, ‘None’], [‘google’, ‘France’, ‘yes’, 23, ‘Premium’],…]]

[[‘google’, ‘UK’, ‘no’, 21, ‘Premium’], [‘(direct)’, ‘New Zealand’, ‘no’, 12,

‘None’],…])

В табл. 7.2 показано получившееся разбиение.

Таблица 7.2. Разбиение множества результатов по значениям в столбце «Читал FAQ»

True

False

Нет

Премиальное

Премиальное

Нет

Базовое

Базовое

Базовое

Премиальное

Нет

Нет

Базовое

Нет

Базовое

Нет

Не похоже, что на данном этапе это хорошая переменная для разбиения результатов, поскольку множества в обоих столбцах неоднородны – они содержат все возможные значения. Нужно отыскать переменную получше.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100