Оптимизация входных данных нейронной сети

Я пытаюсь создать приложение для обнаружения изображений, которые являются рекламными объявлениями с веб-страниц. Как только я обнаружу их, я не позволю отображать их на стороне клиента.

В основном я использую алгоритм обратного распространения для обучения нейронной сети с использованием набора данных, приведенного здесь: http://archive.ics.uci.edu/ml/datasets/Internet+Advertisements.

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


person Amol Joshi    schedule 02.01.2010    source источник


Ответы (3)


1558 на самом деле скромное количество функций/атрибутов. Количество экземпляров (3279) также невелико. Проблема не на стороне набора данных, а на стороне алгоритма обучения.

ANN медленно обучается, я бы посоветовал вам использовать логистическую регрессию или svm. Оба они очень быстро тренируются. В частности, у svm много быстрых алгоритмов.

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

Если вы используете для производства и не можете использовать открытый исходный код. Логистическую регрессию очень легко реализовать по сравнению с хорошей ИНС и SVM.

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

person Yin Zhu    schedule 02.01.2010
comment
Сэр, моя проектная группа хотела использовать для этого нейронную сеть? Есть ли у меня какие-либо варианты с нейронной сетью? Могу ли я получить помощь где-нибудь по этому поводу? Могу ли я использовать логистическую регрессию, как алгоритмы с нейронной сетью? И главное, есть ли такие? - person Amol Joshi; 03.01.2010
comment
Нейронные сети не являются большим многомерным проблемным пространством. Что касается ускорения, попробуйте использовать графический процессор или уменьшите количество функций или примеров. В конце концов, энн — неподходящий инструмент для работы. - person Steve Severance; 07.01.2010
comment
Хорошо, теперь я знаю, что ИНС будетt be the right tool,so I have decided to use SVM now. It прекрасна, если вы порекомендуете несколько статей об ее использовании в моем проекте. Также я хотел спросить у вас, должен ли я сначала реализовать. PCA перед внедрением SVM. Спасибо. Ваше здоровье! - person Amol Joshi; 08.01.2010
comment
выполнение уменьшения размерности (здесь PCA) перед SVM обычно не улучшает никакой точности! Потому что SVM может выбирать функции. Другая причина в том, что SVM достаточно быстр. Сначала вы хотите взглянуть на пакет libsvm, это хорошо спроектированный, хорошо написанный, хорошо протестированный и качественный пакет SVM. Его авторские права указаны здесь: csie.ntu.edu.tw/~cjlin/libsvm /АВТОРСКИЕ ПРАВА. Он использует алгоритм оптимизации SMO, который не сложно реализовать, если вам нужно реализовать этот алгоритм самостоятельно. Подробности см. на странице SVM в Википедии. пожалуйста, оставьте комментарии, если вам нужна дополнительная помощь :) - person Yin Zhu; 08.01.2010
comment
В порядке. Яll have to write the code by myself. Basically Iм столкнулся со следующими проблемами при написании кода. 1. Первые несколько значений атрибутов в наборе данных — это высота, ширина и соотношение сторон, которые являются плавающими значениями. Итак, могу ли я использовать их вместе с другими значениями атрибутов, которые равны 0/1? 2. При реализации алгоритма оптимизации SMO ​​могу ли я обойтись без этого, если я реализую упрощенный SMO, предоставленный Стэнфордом ( stanford.edu/class/cs229/materials/smo.ps). Они говорят, что упрощенный работает для их проблемы. Должен ли я реализовать полный SMO, указанный в статье Джона Патта? - person Amol Joshi; 10.01.2010
comment
3. Также я решил использовать Gaussian Kernel в основном потому, что онs the most popular one. In that kernel how can i decide the sigma parameter? I know Iм задает несколько основных вопросов, но я прочитал много материала по SVM, но не смог найти ответы на них. Спасибо Инь Чжу и другим, кто ответил здесь раньше. Ваше здоровье. - person Amol Joshi; 10.01.2010
comment
1. вам нужно немного масштабировать значения атрибутов, для тех больших, масштабировать их до маленького значения. например вы можете разделить атрибут i на его максимум, таким образом масштабируя атрибут до [0..1] (если все они положительные). 2. вы можете реализовать это в качестве начала и протестировать его на своем наборе данных с помощью таких пакетов, как svmlight и libsvm, чтобы увидеть, нужно ли вам его улучшить. 3. Вам нужно установить параметр сигмы после попытки, он не определяется вашим алгоритмом. ВНИМАНИЕ: после того, как вы реализовали svm, он может использовать любые ядра, большинство из которых довольно просто реализовать. - person Yin Zhu; 11.01.2010
comment
Спасибо за ответ, Инь Чжу. У меня есть несколько других вопросов. Мы подумали о том, чтобы разделить SVM на две части, одна из которых будет принимать непрерывные значения, а другая SVM будет обучаться со всеми двоичными атрибутами. Поскольку я создаю свой собственный код SVM, я хотел спросить вас, могу ли я использовать один и тот же код SVM для обеих этих SVM. Может ли Binary data SVM работать для SVM с непрерывными значениями атрибутов. - person Amol Joshi; 16.01.2010
comment
Другой вопрос, который у меня есть, касается недостающих данных. Могу ли я получить несколько указателей на несколько хороших ссылок, где решаются проблемы с отсутствующими атрибутами данных? Также нужно ли мне заботиться об отсутствующих значениях данных в моем проекте SVM? - person Amol Joshi; 16.01.2010
comment
На ваш первый вопрос. SVM предполагает, что все атрибуты непрерывны. Он работает для данных двоичных атрибутов как 1 и 0. Таким образом, вам не нужно разрабатывать еще один SVM для двоичных атрибутов. Во-вторых, одной из распространенных практик является использование средних значений для заполнения отсутствующих данных или просто не использование отсутствующего атрибута при расчете функции ядра. например вычислить K(xi,xj), если xi имеет отсутствующее значение, то не используйте его как в xi, так и в xi в расчете. Вот ссылка на отсутствующие данные: en.wikipedia.org/wiki/Missing_values. Обычно 1% отсутствующих данных не влияет на точность обучения. - person Yin Zhu; 16.01.2010
comment
Я разработал свой SVM с упрощенным SMO, приведенным в Стэнфордской статье. Но в основном альфа-значения находятся в диапазоне e +305. Я делаю что-то ужасно неправильно здесь? Существуют ли какие-либо эмпирические правила для выбора этих констант, используемых в SMO, таких как C, толерантность, eps? Ваше здоровье. - person Amol Joshi; 16.02.2010
comment
Ой. Я понял, что сделал несколько ошибок при кодировании SMO. Я их исправил и теперь яm getting some output. But now got another issue which Iпостил сюда. stackoverflow.com/questions/2284059/ Пожалуйста, помогите. Спасибо и ура. - person Amol Joshi; 17.02.2010

Если вы на самом деле используете сеть обратного распространения с 1558 входными узлами и всего 3279 выборками, то время обучения — наименьшая из ваших проблем: даже если у вас очень маленькая сеть только с одним скрытым слоем, содержащим 10 нейронов, у вас есть 1558* 10 весов между входным слоем и скрытым слоем. Как можно получить хорошую оценку для 15 580 степеней свободы всего лишь из 3 279 выборок? (И этот простой расчет даже не принимает во внимание «проклятие размерности»)

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

Также: вспомните известную «теорему о бесплатном обеде» Дуда и Харта: ни один алгоритм классификации не работает для каждой проблемы. И для любого алгоритма классификации X существует проблема, когда подбрасывание монеты приводит к лучшим результатам, чем X. Если вы примете это во внимание, решение, какой алгоритм использовать перед анализом ваших данных, может оказаться неразумной идеей. Возможно, вы выбрали алгоритм, который на самом деле работает хуже, чем слепое угадывание в вашей конкретной задаче! (Кстати: книга Duda&Hart&Storks о классификации шаблонов это отличная отправная точка, чтобы узнать об этом, если вы еще не читали.)

person Niki    schedule 04.01.2010

примените отдельный ANN для каждой категории функций, например, 457 входов 1 вывод для терминов URL (ANN1) 495 входов 1 вывод для origurl (ANN2)...

затем обучите их всех использовать другую основную ИНС для объединения результатов

person Birol Kuyumcu    schedule 04.01.2010