2015-11-02 1 views
0

Этот код работает нормально, но не очень, потому что он не учитывает некоторые нелинейные, например. квадратичное поведение в экстремальных функцииWeka LinearRegression превосходит MultilayerPerceptron ... что я делаю неправильно?

LinearRegression finalClassifier = new LinearRegression();  
    finalClassifier.buildClassifier(adjInstances); 
    double predictedValue = finalClassifier.classifyInstance(finalInstance); 

и этот код производят совершенно фиктивные результаты

MultilayerPerceptron finalClassifier = new MultilayerPerceptron();  
    finalClassifier.buildClassifier(adjInstances); 
    double predictedValue = finalClassifier.classifyInstance(finalInstance); 

я считаю многослойный перцептрон румельхарт должен всегда опережать линейную регрессию. Есть только определенные формы функций, которые LinearRegression не может обрабатывать (например, f (x) = x^2), которые являются куском торта для нейронной сети MultilayerPerceptron.

Поэтому я, вероятно, неправильно использую API или есть некоторые недокументированные требования к допустимым входам для MultilayerPerceptron. Что бы это могло быть?

Моих экземпляров данных состоит из комбинации 20 числовых и номинальных атрибутов, например:

A01 750 
A02 1 
A03 1 
A04 true 
A05 false 
A06 false 
A07 false 
A08 false 
A09 true 
A10 false 
A11 true 
A12 false 
A13 false 
A14 false 
A15 true 
A16 false 
A17 false 
A18 false 
A19 Yes 
A20 34 

ответ

4

только часть вашего вопроса, который может ответить, является

Я считаю, что многослойный перцептрон румельхарт должен всегда превосходят LinearRegression. Есть только определенные формы функций, которые LinearRegression не может обрабатывать (например, f (x) = x^2), которые являются куском торта для нейронной сети MultilayerPerceptron.

Это просто неверно. Почему LR может быть лучше?

  1. Ваши данные могут быть хорошо представлены линейной моделью, в этом случае MLP, скорее всего, будет переоборудовать, в то время как LR будет работать просто отлично. Это очень распространенное промахи - более сложные модели не «лучше», они просто «требуются, если ваши отношения сложны», но для простых проблем - сложные модели сбой.
  2. Не подходит для вашей модели. LR тривиально подходит, на самом деле, без регуляризации (регрессия хребта), это одна из самых простых моделей, которые подходят, вы на самом деле имеете решение закрытой формы (метод OLS) для него и нет гиперпараметров. Однако для даже самого простого MLP у вас нет никакого метода обучения, который гарантирует оптимальное решение, и вам необходимо установить несколько гиперпараметров (количество скрытых отключений, функция активации, скорость обучения, скорость импульса ...). В реальной жизни вы почти никогда не Нейронная сеть поездов хорошо, это на самом деле самая большая проблема с NN - их чрезвычайно трудно обучить, и поэтому их никогда не следует использовать неопытными машинистами. Существует множество других регрессоров, которые могут использовать кто-то, не имея глубокого понимания поля, такого как SVR, Ridge Regression (и его Kernelized версия).

Если код предоставлен - это ваш фактический код, то наиболее вероятная причина для вашего результата - второй пункт выше - вы не можете просто сказать: «Создайте мне нейронную сеть!». и ожидаем, что он будет работать хорошо, он не работает таким образом :)