Какой алгоритм интеллектуального анализа данных вы бы предложили для этого конкретного сценария? - PullRequest
7 голосов
/ 01 марта 2010

Это не вопрос, связанный непосредственно с программированием, а с выбором правильного алгоритма интеллектуального анализа данных.

Я хочу определить возраст людей по имени, по региону, в котором они живут, и по наличию у них интернет-продукта или нет.Идея заключается в том, что:

  • есть имена, которые являются старомодными или популярными в конкретном десятилетии (знаменитости, политики и т. Д.) (Это может быть не в США, а в странеИнтересно, что это правда),
  • молодые люди, как правило, живут в густонаселенных регионах, в то время как пожилые люди предпочитают сельские районы, и
  • Интернетом пользуются чаще молодые люди, чем старики.

Я не уверен, что эти предположения верны, но я хочу это проверить.Итак, у меня есть 100Кб наблюдения из нашей базы данных клиентов с

  • ок.500 разных имен (номинальная входная переменная со слишком большим количеством классов)
  • 20 разных регионов (номинальная входная переменная)
  • Интернет Да / Нет (двоичная входная переменная)
  • 91 различных годов рождения(числовая целевая переменная с диапазоном: 1910-1992)

Поскольку у меня так много номинальных входных данных, я не думаю, что регрессия является хорошим кандидатом.Поскольку цель числовая, я не думаю, что дерево решений также является хорошим вариантом.Может кто-нибудь предложить мне метод, который применим для такого сценария?

Ответы [ 5 ]

3 голосов
/ 01 марта 2010

Я думаю, вы могли бы разработать дискретные переменные, которые отражают разрыв, который вы пытаетесь определить. Не похоже, что вам нужен регресс по их точному возрасту.

Одной из возможностей является кластеризация по возрастам, а затем обработка кластеров как дискретных переменных. Если это не подходит, другая возможность состоит в том, чтобы разделить возрасты на бункеры равного распределения.

Одна из техник, которая может очень хорошо работать для ваших целей, заключается в том, чтобы вместо кластеризации или разделения возрастов напрямую, кластеризовать или разделить средний возраст по имени. То есть, сгенерируйте список всех средних возрастов и поработайте с этим. (Могут быть некоторые статистические проблемы в классификаторе, если вы, однако, дискретные категории слишком мелкозернистые).

Тем не менее, лучший случай, если у вас есть четкое представление о том, какой возрастной диапазон вы считаете подходящим для «молодых» и «старых». Затем используйте их напрямую.

3 голосов
/ 01 марта 2010

Новый ответ

Я бы попытался использовать регрессию, но так, как я указал. Я хотел бы попробовать бинаризацию каждой переменной (если это правильный термин). Переменная Internet является двоичной, но я бы сделал ее двумя отдельными двоичными значениями. Я проиллюстрирую это на примере, потому что я чувствую, что он будет более ярким. Для моего примера я просто буду использовать три имени (Гертруда, Дженнифер и Мэри) и переменную Интернета.

У меня 4 женщины. Вот их данные:

Gertrude, Internet, 57
Jennifer, Internet, 23
Gertrude, No Internet, 60
Mary, No Internet, 35

Я бы сгенерировал матрицу А, вот так (каждая строка представляет соответствующую женщину в моем списке):

[[1,0,0,1,0], 
 [0,1,0,1,0],
 [1,0,0,0,1],
 [0,0,1,0,1]]

Первые три столбца представляют имена, а два последних - Интернет / Нет Интернета. Таким образом, столбцы представляют

[Gertrude, Jennifer, Mary, Internet, No Internet]

Вы можете продолжать делать это с другими именами (500 столбцов для имен) и для регионов (20 столбцов для них). Тогда вы будете просто решать стандартную задачу линейной алгебры A * x = b, где b для приведенного выше примера равно

b=[[57],
   [23],
   [60],
   [35]]

Вы можете быть обеспокоены тем, что A теперь будет огромной матрицей, но это огромная, чрезвычайно разреженная матрица, и, следовательно, ее можно очень эффективно хранить в виде разреженной матрицы. Каждая строка имеет 3 1 в, а остальные равны 0. Вы можете просто решить это с помощью разреженного матричного решателя. Вы захотите провести какой-то корреляционный тест по полученным возрастам прогнозирования, чтобы увидеть, насколько он эффективен.

2 голосов
/ 01 марта 2010

Вы можете проверить babynamewizard. Он показывает изменения частоты имен с течением времени и должен помочь преобразовать ваши имена в числовой ввод. Кроме того, вы должны иметь возможность использовать плотность населения из данных census.gov, чтобы получить числовое значение, связанное с вашими регионами. Я хотел бы предложить дополнительный флаг относительно доступности доступа DSL - во многих сельских районах нет покрытия DSL. Нет покрытия = меньше спроса на интернет-услуги.

Моим первым желанием было бы разделить ваш ответ на две группы: те, которые с большой вероятностью использовали компьютеры в школе или на работе, и те, которые гораздо реже. Вероятность использования компьютера в раннем возрасте в их карьере или в школе, вероятно, влияет на вероятность использования компьютера на более поздних этапах жизни. Тогда вы можете рассмотреть регрессии по группам отдельно. Это должно устранить некоторые естественные корреляции ваших входов.

1 голос
/ 06 октября 2010

Я думаю, что немного отличается от вас, я считаю, что деревья являются отличными алгоритмами для работы с номинальными данными, потому что они могут помочь вам построить модель, которую вы можете легко интерпретировать и определить влияние каждой из этих номинальных переменных и ее различных значений , Вы также можете использовать регрессию с фиктивными переменными для представления номинальных атрибутов, это также хорошее решение. Но вы также можете использовать другие алгоритмы, такие как SVM (smo), с предыдущим преобразованием номинальных переменных в двоичные фиктивные, как в регрессии.

1 голос
/ 03 марта 2010

Я бы использовал алгоритм классификации, который принимает номинальные атрибуты и числовой класс, например M5 (для деревьев или правил).Возможно, я бы совмещал это с мета-классификатором упаковки, чтобы уменьшить дисперсию.Оригинальный алгоритм M5 был изобретен Р. Куинланом, а Йонг Ванг внес улучшения.

Алгоритм реализован в R (библиотека RWeka )

Его также можно найти в программном обеспечении машинного обучения с открытым исходным кодом Weka

Для получения дополнительной информации см .:

Росс Дж. Квинлан: Обучение с непрерывными классами .В: 5-я Австралийская совместная конференция по искусственному интеллекту, Сингапур, 343-348, 1992.

Y.Wang, IH Witten: Индукция модельных деревьев для предсказания непрерывных классов .В кн .: Стендовые доклады 9-й Европейской конференции по машинному обучению, 1997 г.

...