2015-02-24 4 views
0

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

Пример:

Document 1 = ["I", "am", "awesome"] 
Document 2 = ["I", "am", "great", "great"] 

Словарь:

["I", "am", "awesome", "great"] 

Так документы как вектор будет выглядеть следующим образом:

Document 1 = [1, 1, 1, 0] 
Document 2 = [1, 1, 0, 2] 

Алгоритм затем узнает граничное уравнение Решение, т.е. :

feature_0 * weight_0 + 
feature_1 * weight_1 + 
feature_2 * weight_2 + 
feature_3 * weight_3 + 
bias 

Теперь у меня есть тестовый набор, который в формате очень похож на набор тренировок, изображенный выше. Что такое psuedocode для проверки этих значений в отношении моего решения граничного уравнения и присвоения им меток?

Я предполагаю, что это что-то вроде (псевдокод):

For each word in the test set 
    if that word exists in the global dict 
     value = the frequency of that word * the learned weight 
      if value >= 0 
       return 1 
      else 
       return -1 

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

ответ

1

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

В принципе, вы должны генерировать тестовые и обучающие данные вместе, чтобы обеспечить их максимально возможное распространение, а затем разделить на два набора. Генерирование тестовых данных (т. Е. Меток) в зависимости от того, как устанавливается граница принятия решения, является очень плохой идеей: Основная идея тестового набора - проверить текущую подготовленную границу на данные, которые следует за неизвестной, реальной границей. Посредством привлечения знаний в систему ваши результаты теста будут плохо отражать точность real.

+0

Я думаю, что получил, не могли бы вы взглянуть на мой код, чтобы убедиться, согласны ли вы? Это на моей странице [github] (https://github.com/h1395010/perceptron/blob/master/src/file_dict_createur/Perceptron.java) Я прокомментировал, где я делаю тест. –

+0

Кажется правильным, но не принимайте это как должное, так как я немного устал atm :) Если все правильно, вы можете установить test = train set и получить почти 100% с правильными параметрами. – runDOSrun

+0

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

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