2013-11-09 2 views
0

У меня есть куча данных о вампирах и вампирах. У меня есть матрица с 2000 темами, в которой представлены статистические данные о предмете.Как я могу построить функцию правдоподобия?

#[height(cm), weight(kg), stake aversion, garlic aversion, reflectance, shiny, IS_VAMPIRE?] 

, если IS_VAMPIRE равен 1, то субъект представляет собой вампир, и 0 в противном случае. У меня есть пара идей о том, как я могу построить функцию, чтобы сказать мне, является ли новая тема вампиром или нет, но мне было интересно, есть ли у кого-нибудь действительно хорошие идеи, которые я мог бы преследовать.

+0

У вас есть логическое значение, которое сообщает вам да/нет, зачем вам что-нибудь еще? – roippi

+0

Возможно, вы заинтересованы в использовании 'scikit-learn' или' pandas' для построения логистической регрессии. См. [Это сообщение в блоге] (например, http://blog.yhathq.com/posts/logistic-regression-and-python.html). –

+0

Чего вы хотите достичь? Каковы твои цели? –

ответ

1

Вы можете использовать один из алгоритмов классификатора в scikit-learn. Если ваша группа данных уже помечена, вы знаете, кто является и не является вампиром, и вы просто хотите классифицировать новые, самый простой подход для кого-то нового для машинного обучения и scikit-learn использует алгоритм дерева решений для постройте классификатор из ваших примерных данных и примените его к новым.

http://scikit-learn.org/stable/modules/tree.html

>>> from sklearn import tree 
>>> clf = tree.DecisionTreeClassifier() 
>>> clf = clf.fit(X, Y) 

Где X это список (или массив Numpy) со всеми вашими полями данных, для логического is_vampire кроме:

>>> X = [[v0_height, v0_weight, v0_stake_aversion, v0_garlic_aversion, 
      v0_reflectance, v0_shiny], 
     [v1_height, v1_weight, v1_stake_aversion, v1_garlic_aversion, 
      v1_reflectance, v1_shiny], 
     ... 
     ] 

И Y представляет собой список с тем же длина, соответствующая этикетке для каждого из них:

>>> Y = [v0_is_vampire, v1_is_vampire, ...] 

После установки дерево может быть использована для проверки, если новые один вампир по следующему вызову, где new является Подсписком как и в X:

>>> clf.predict(new) 
array([1]) 

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

Имейте в виду, что если ваш массив Y содержит только 1 и 0 значений метки is_vampire, тогда этот подход даст вам один и тот же двоичный ответ. Если ваш массив Y имеет значения с плавающей точкой и вы хотите количественно оценить вероятность того, что новый будет вампиром со значением от 0 до 1, просто используйте класс tree.DecisionTreeRegressor вместо tree.DecisionTreeClassifier.

Кстати, это, вероятно, не самый лучший алгоритм для выполнения того, что вы просите, но это довольно просто и вам нужно начать. Если вы получаете неправильные результаты или проблемы с производительностью, просто получите больше информации о том, что лучше подходит для вашего дела. Эта ссылка может быть очень полезной: http://peekaboo-vision.blogspot.com.br/2013/01/machine-learning-cheat-sheet-for-scikit.html

+0

Я пытаюсь выполнить ваш ответ, однако у меня возникают проблемы. –

+0

Учитывая ваш список вампиров, где is_vampire - последнее поле, X должен быть [v [: - 1] для v в данных] и Y [v [-1] для v в данных]. Понял? Если это не сработает, запустите чат и покажите мне код, данные и ошибку. –

+0

Хорошо, у меня все работает. Есть ли в любом случае мой результат может быть числом от 0 до 1? Таким образом, я мог бы интерпретировать это как вероятность вместо двоичного? –

0

Я не знаю, будет ли это работать, но, возможно, вы можете попробовать использовать переменные. так что, например, говорят, что высота высокая (10), вес низкий (1), высокая склонность к отклонению (10), отвращение чеснока велико (10), коэффициент отражения высокий (10), а блеск - высокий (10). вы затем складываете все эти переменные, а затем помещаете сумму в другую переменную. Если конечная переменная равна, например, 50 или выше, вы уверены, что это вампир, делающий IS_VAMPIRE true/1. вам понадобится еще несколько состояний, чтобы учитывать вероятность, и это большой блок кода для записи, который я бы подумал, но если он работает (я не знаю, будет ли это), тогда было бы хорошо. то снова я самый безобидный из нубов, когда дело доходит до программирования, может быть, я здесь не помогаю:/

Смежные вопросы