@stewinz

Какой тип нейронной сети лучше подходит для работы с числовыми входными параметрами разной длины?

Мне нужно создать нейронную сеть для моего небольшого учебного проекта. Идея заключается в том, что пользователь выбирает определенную категорию (например, определенную веб-уязвимость), затем задает присущие этой категории определенные характеристики через диапазон ввода. И затем ему должен быть показан результат вероятности этой уязвимости. Изначально для каждой отдельной категории существует определенное количество обучающих примеров, но в дальнейшем все будет основываться на ответах пользователей. Тут также встает вопросы выбора типа нейронной сети. Я столкнулся с проблемой выбора нейронной сети для работы с различным количеством входных параметров. Входными параметрами являются числовые значения (например, float), количество входных параметров - от 3 до 12. Цель - создать сеть, которая будет корректно обрабатывать различные числовые значения без искажения результата. (Предпочтительно использовать Keras)

На данный момент, как я понимаю, есть несколько способов решить эту задачу:

Использовать фиксированный размер 10 и заполнять пустые значения нулями. Однако, будет ли это хорошей практикой, и не слишком ли сильно это исказит результаты?

Изменить размер до фиксированного (примерно 7), но подойдет ли это для числовых значений?

Использование RNN, но RNN в основном используются для текста и речи, и будут ли они также работать с числами? Есть ли другие варианты и какие из них были бы наиболее правильными? Заранее спасибо за любой ответ или ссылку
  • Вопрос задан
  • 174 просмотра
Пригласить эксперта
Ответы на вопрос 3
@dmshar
Начнем с простейшего вопроса. А как вы собираетесь определять вероятность уязвимости, если вы будете все "основывать на ответах пользователей."? Как вы себе это представляете? Но даже если теоретически представить, что вы что-то такое создадите, то она будет показывать не правильный ответ, а тот ответ, которые есть в голове вашего пользователя и который очень не факт, что соответствует реальному ответу.

Теперь вопросы конкретные "Я столкнулся с проблемой выбора нейронной сети для работы с различным количеством входных параметров." - можно попросить вас перечислить те проблемы, с которыми вы столкнулись. Но только с конкретными. Очень даже стало интересно. Может что и посоветуем.

числовыми входными параметрами разной длины - так вопрос в параметрах разной длинны или с разным количеством параметров? Вы уж как-то определитесь, т.к. это совершенно разные вопросы.

Использовать фиксированный размер 10 и заполнять пустые значения нулями.
Изменить размер до фиксированного (примерно 7), но подойдет ли это для числовых значений?
- а почему 10, почему 7, если параметров у вас может быть до 12? Остальные будете с негодованием отбрасывать?

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

Использование RNN, но RNN в основном используются для текста и речи, и будут ли они также работать с числами? Раскрою вам секрет. При работе с текстом и речью входные данные сначала диджитализируются, а уж потом поступают на вход нейросеть. Странно, что вы этого не понимаете, ориентируясь на keras.

Есть ли другие варианты и какие из них были бы наиболее правильными? Наиболее правильным будет сначала открыть какую-нибудь книгу и изучить, что такое нейросеть и как она работает. Или хотя-бы нагуглить какие-нибудь статьи для новичков в интернете. На худой конец, на этом сайте набрать тег "нейросети" и посмотреть какие вопросы там задаются и как на них отвечает (последнее, конечно, так себе решение, но хоть какое-то понятие о нейросетях и работе с ними получите, а также какие книги/ресурсы по нейросетям рекомендуют, потому как переписывать это сюда в двадцать восьмой раз не хочется). А пока вопрос настолько сырой, что дать не него какой-нибудь близкий к правде жизни ответ практически невозможно.
Ответ написан
Комментировать
Fujitawa
@Fujitawa
для работы с числовыми входными параметрами разной длины можно использовать рекуррентные нейронные сети (rnn), такие как lstm или gru. эти типы сетей позволяют обрабатывать последовательности переменной длины, и они хорошо работают с числовыми значениями.
кроме того, можно использовать сверточные нейронные сети (cnn), которые могут обрабатывать последовательности фиксированной длины. для этого можно использовать предварительную обработку данных, например, заполнение нулями или повторение последнего значения, чтобы привести все последовательности к одной длине.
еще одним вариантом может быть использование комбинации сверточных и рекуррентных слоев в нейронной сети, такой как cnn-rnn.
в keras можно использовать следующие типы слоев для создания таких нейронных сетей…
LSTM: keras.layers.LSTM()
GRU: keras.layers.GRU()
Conv1D: keras.layers.Conv1D()
MaxPooling1D: keras.layers.MaxPooling1D()
Flatten: keras.layers.Flatten()
Dense: keras.layers.Dense()

Ответ написан
Комментировать
Maksim_64
@Maksim_64
Data Analyst
1. Все сети работают с числами, если входные данные не числа то они кодируются (разными методами в зависимости от типа).
2. А почему не использовать стандартные алгоритмы классификации? Multinomial Logistic Regression, Random Forest Classifier и.тд. Основная работа она все равно ляжет трансформации и манипуляции с данными.
3. Что касается размера входного вектора. То я бы работал с фиксированным размером. Потому что чем больше предикторов ввел пользователь тем точнее должен быть результат. Насчет заполнения нулями не уверен. Я бы провел анализ важности предикторов установил бы веса и заполнял бы не нулями а например вес умножить на среднее значение по предиктору в тренировочном сете. (Но это как один из возможных сценариев) Заполнение данных большая работа особенно для такой задачи, где они по условию будут. Просто нулями где максимум 12 а минимум три. Что может алгоритм предсказать если у него будет вектор где в худшем случае только 3 компонента не нули. Каким образом это будет работать? Я бы однозначно заполнял данные не введенные пользователем. ВЕС предиктора * на какую нибудь агрегирующую статистику по предиктору.

Я бы использовал, scikit-learn здесь.
1. Провел бы анализ важности предикторов каждого в отдельности. (получил бы веса).
2. Посмотрел бы что за дистрибуции у каждого предиктора в отдельности (что бы понимать какой статистикой заполнять когда на входе этот предиктор отсутствует).
3. Возможно нормализовал или стандартизировал предикторы. (по выбору)
4. Затем начал бы работать с моделями (смотрел бы что получается)
5. Если что то получается тюнил бы параметры если нет менял бы трансформации данных.

Вообще мысли такие, ну это мысли а так начни делать появятся конкретика, ее здесь пока мало.

И да пункты не воспринимай буквально (там нету разбиения на тренировочную выборку и тестировочную выборку ) И много чего еще нету. Это не инструкция (конкретики мало), а общая картинка возможного решения проблемы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы