Как построить нейронную сеть, которая выводит набор значений для наиболее важной функции? - PullRequest
0 голосов
/ 20 декабря 2018

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

Снимок набора данных

Ниже приведены процедуры, которые я пробовална данный момент:

  1. Импорт набора данных (форма: 1162 на 22)
  2. Создание простой нейронной сети (2 скрытых слоя)
  3. Поскольку зависимая переменная просто0 или 1 (проблема классификации), я однозначно закодировал переменную.Так что это либо [0, 1], либо [1,0]
  4. После разделения на данные обучения и испытаний я обучаю свою модель NN и получаю точность 77,8%
  5. Чтобы узнать, какая функция (из 21) является наиболее важным при определении 0 или 1, я обучил данные с использованием классификатора Random Forest (scikit-learn), а также получил точность 77,8%, а затем использовал «feature_importances_», предложенный классификатором случайных лесов.
  6. В результате я обнаружил, что функция с именем 'a_L4' занимает наивысшую позицию с точки зрения относительной важности функции.
  7. Для функции 'a_L4' разрешено иметь значение от 0до 360, так как это означает угол.В исходном наборе данных «a_L4» содержит только 12 значений, которые [5, 50, 95, 120, 140, 160, 185, 230, 235, 275, 320, 345].
  8. Я увеличилисходный набор данных путем непосредственного добавления всех возможных 12 значений для каждого случая, получая новый набор данных формы (1162x12 на 22).
  9. Я импортировал расширенный набор данных и протестировал его на ранее обученной модели NN.Результатом стал провал.В классификации почти не было изменений, означающих, что «1» не переключился на «0».
  10. Мой вывод состоял в том, что изменения значений «a_L4» было недостаточно для внесения изменений в классификацию.Поэтому я дополнительно проделал ту же процедуру еще раз для второй по важности функции, которая в данном случае была 'b_L7_p1'.
  11. Итак, записывая все возможные значения, которые могут иметь две наиболее важные функции, теперь новый набор данных становитсяформа (1162x12x6 на 22).'b_L7_p1' может иметь только 6 различных значений, таким образом, умножение на 6.
  12. Снова результатом был отказ.

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

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

Заранее спасибо.

1 Ответ

0 голосов
/ 20 декабря 2018

В этом случае я бы подошел к проблеме следующим образом:

  1. Нормализовать весь набор данных.Как вы можете видеть из набора данных, ваши объекты имеют разные масштабы.Крайне важно, чтобы все функции были одинаковыми.Взгляните на: https://scikit -learn.org / stable / modules / generate / sklearn.preprocessing.StandardScaler.html
  2. Второе, что я хотел бы сделать сейчас, это обучить и оценитьмодель (это может быть все, что вы хотите) для получения так называемой базовой модели.
  3. Затем я бы попробовал PCA, чтобы увидеть, нужны ли все функции.Может быть, вы включаете ненужную редкость в модель.См .: https://scikit -learn.org / stable / modules / generate / sklearn.decomposition.PCA.html Например, если вы установите n_components в PCA равным 0.99, тогда вы уменьшитеколичество признаков при сохранении 0.99 объяснил дисперсию.
  4. Затем я обучил модель, чтобы увидеть, есть ли улучшения.Обратите внимание, что только добавление самой нормализации должно привести к улучшению.
  5. Если я хочу узнать по самому набору данных, какие функции важны, я бы сделал: https://scikit -learn.org / stable/modules/generated/sklearn.feature_selection.SelectKBest.html Это позволит выбрать определенное количество функций на основе некоторых статистических тестов, скажем: https://scikit -learn.org / stable / modules / generate / sklearn.feature_selection.chi2.html
  6. Обучите модель и оцените ее снова, чтобы увидеть, есть ли какие-то улучшения.

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

Дайте мне знать, увидите ли вы какие-либо улучшения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...