Это не связанный вопрос непосредственно программирования, но это о выборе правильного алгоритма анализа данных.
Я хочу вывести возраст людей от их имен от региона, они живут, и если у них есть интернет-продукт или нет. Идея позади него состоит в том что:
Я не уверен, содержат ли те предположения, но я хочу протестировать это. Таким образом, то, что я имею, является 100K наблюдениями от нашей базы данных клиентов с
Поскольку у меня есть столько номинальных исходных данных, я не думаю, что регрессия является хорошим кандидатом. Поскольку цель является числовой, я не думаю, что дерево решений является хорошим вариантом также. Кто-либо может предложить меня метод, который применим для такого сценария?
Я думаю, вы могли бы разработать дискретные переменные, отражающие разделение, которое вы пытаетесь определить. Не похоже, что вам нужно возвращаться к их точному возрасту.
Одна из возможностей - кластеризовать возрасты, а затем рассматривать кластеры как дискретные переменные. Если это не подходит, есть еще одна возможность - разделить возрасты на интервалы с равным распределением.
Один из способов, который может очень хорошо сработать для ваших целей, - это вместо кластеризации или разделения возрастов напрямую кластеризовать или разбивать средний возраст на имя. То есть создайте список всех средних возрастов и вместо этого работайте с ним. (Тем не менее, в классификаторе могут возникнуть некоторые статистические проблемы, если вы слишком детализировали дискретные категории).
Однако лучше всего, если у вас есть четкое представление о том, какой возрастной диапазон вы считаете подходящим для «молодых» и «старых». Затем используйте их напрямую.
Вы можете проверить мастера имени ребенка. Он показывает изменение частоты имен с течением времени и должен помочь преобразовать ваши имена в числовые значения. Кроме того, вы должны иметь возможность использовать плотность населения из данных census.gov для получения числового значения, связанного с вашими регионами. Я бы предложил дополнительный флаг, касающийся доступности доступа DSL - многие сельские районы не имеют покрытия DSL. Отсутствие покрытия = меньший спрос на интернет-услуги.
Сначала я хотел бы разделить ваш ответ на две группы: те, кто с большой вероятностью пользовался компьютером в школе или на работе, и те, кто с меньшей вероятностью. Знакомство с компьютером в раннем возрасте в начале карьеры или учебы, вероятно, в некоторой степени влияет на их вероятность использовать компьютер в более позднем возрасте. Затем вы можете рассмотреть регрессии по группам отдельно. Это должно устранить некоторую естественную корреляцию ваших входных данных.
Новый ответ
Я бы попытался использовать регрессию, но указанным мной способом. Я бы попробовал преобразовать в двоичную форму каждую переменную (если это правильный термин). Переменная Internet является двоичной, но я бы разделил ее на два отдельных двоичных значения. Я проиллюстрирую это примером, потому что считаю, что он будет более ярким. В моем примере я просто буду использовать три имени (Гертруда, Дженнифер и Мэри) и интернет-переменную.
У меня 4 женщины. Вот их данные:
Gertrude, Internet, 57
Jennifer, Internet, 23
Gertrude, No Internet, 60
Mary, No Internet, 35
Я бы сгенерировал матрицу A, подобную этой (каждая строка представляет соответствующую женщину в моем списке):
[[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 единицы, а остальные - 0. Затем вы можете просто решить эту проблему с помощью решателя разреженных матриц.Вы захотите провести какой-то тест корреляции для результирующего прогнозируемого возраста, чтобы увидеть, насколько он эффективен.
Я бы использовал алгоритм классификации, который принимает номинальные атрибуты и числовой класс, например M5 (для деревьев или правил). Возможно, я бы совмещал его с мета-классификатором упаковки, чтобы уменьшить дисперсию. Первоначальный алгоритм M5 был изобретен Р. Куинланом, а Йонг Ван внес улучшения.
Алгоритм реализован в R (библиотека RWeka )
Его также можно найти в программном обеспечении машинного обучения с открытым исходным кодом Weka
Дополнительные сведения см .:
Росс Дж. Куинлан: Обучение с помощью непрерывных классов . В: 5-я Австралийская объединенная конференция по искусственному интеллекту, Сингапур, 343-348, 1992.
Y. Ван, И. Х. Виттен: Индукция модельных деревьев для предсказания непрерывных классов . В: Стендовые доклады 9-й Европейской конференции по машинному обучению, 1997 г.