2017-02-05 3 views
-1

Я работаю над походкой задачи распознавания, цель данного исследования будет использоваться для аутентификации пользователяобучения нейронная сеть для распознавания пользователя в MATLAB

У меня есть данные 36 пользователей

Я успешно извлек 143 функции для каждого образца (или примера), которые являются (36 строк и 143 столбца) для каждого пользователя

(другими словами, у меня есть 36 примеров и 143 функции извлечены для каждого примера. Таким образом, матрица под названием All_Feat от 36 * 143 была создана для каждого отдельного пользователя).

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

Тогда я разделил данные в две часть, обучения и тестирование (обучения матрицы содержит 25 строк и 143 столбцов, в то время как тестирования Матрицы содержит 11 строк и 143 столбцов).

Затем для каждого пользователя я разделил матрицу (All_Feat) на две матрицы: (Тренировочная матрица и тестовая матрица).

обучения матрица содержит (25 строк (примеры) и 143 столбцов), а матрица тестирования имеет (11 строк и 143 столбцов).

Я новичок в классификацию и этот материал

Я хотел бы использовать машинное обучение (Neural Network) для классификации этих функций.

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

это может быть сделано путем обучения классификатора с функциями пользователя (данные) и остальными пользователями (35 пользователей считаются самозванцами).

Основываясь на том, что я прочитал, для обучения нейронной сети требуются два класса: первый класс содержит все данные обучения подлинного пользователя (например, User1) и помечен как 1, а второй класс - данные обучения импостеров, помеченных как 0 (это двоичная классификация, 1 для авторизованного пользователя и 0 для самозванцев).

** теперь мой вопрос: **

1- я не знаю, как создать эти классы!

2- Например, если я хочу, чтобы обучать нейронную сеть для User1, у меня есть эти переменные, вход и целевой. что я должен назначать этим переменным?

следует ввод = учебная матрица User1 и обучающих матриц User2, User3, ..... User35?

Target = что я должен назначать этой матрице?

Я очень ценю любую помощь!

ответ

1

Попробуйте это: https://es.mathworks.com/help/nnet/gs/classify-patterns-with-a-neural-network.html

Несколько заметок:

  1. Вы сказали, что для каждого пользователя, вы извлекли 136 функций. Похоже, у вас есть только одно повторение для каждого пользователя (т. Е. Пользователь попытался использовать систему один раз). Однако я не знаю источник ваших данных, но я не знаю, что у него нет какой-то случайности. Вы упоминаете анализ походки, и это звучит так, что записанные данные данного одного пользователя будут разными при каждом использовании пользователем системы. Другими словами: пользователь использует вашу систему, вы захватываете данные, вы извлекаете 136 функций (чисел); то пользователь снова использует систему, но извлеченные 136 функций будут немного разных. Поэтому вы должны получить несколько примеров для каждого пользователя для обучения классификатора. В терминах «матрица матрицы» ваша матрица должна иметь один COLUMN для каждого примера и 136 строк (каждая из ваших функций). Поскольку у вас должно быть несколько повторений для каждого пользователя (например, 10 раз), ваша большая матрица должна быть примерно такой: 136 строк х 360 столбцов.

  2. Вы должны «создать» новую нейронную сеть для каждого пользователя. Учитывая пользователя (например, User4), вы создаете набор данных (новую матрицу) с образцами этого пользователя и образцы нескольких других пользователей (User1, User3, User5 ...). Вы выполняете двоичную классификацию (случаи: «user4» против «других пользователей»). После обучения было бы целесообразно протестировать классификатор с данными других пользователей, чьи данные отсутствовали на этапе обучения (например, User2 и другие). Поскольку вы делаете двоичную классификацию, ваши матрицы должны быть примерно такими:

Пример: у вас есть 10 проб (примеров) каждого пользователя. Вы хотите создать нейронную сеть для обнаружения пользователя User1. Матрица должна быть такой: (обозначение cU1_t1 означает: столбец с функциями пользователя 1, пробный 1) input_matrix = [cU1_t1; cU1_t2; ...; cU1_t10; cU2_t1; ...; cU36_t10]

Целевая матрица должна быть равна: target = матрица, 10 первых столбцов которой [1, 0], а остальные 350 столбцов - [0, 1]. Это означает, что первые 10 столбцов имеют тип A, а другие типа B. В этом случае «тип A» означает «User1», а «тип B» означает «Not User1».

Затем вы должны сегментировать данные (данные поезда, данные проверки, тестовые данные) для обучения нулевой сети и т. Д. Не забудьте сохранить некоторых пользователей только для фазы тестирования, например, в матрице поездов не должно быть ни одного столбца из пяти пользователей: user2, user6, user7, user10, user20 (50 столбцов).

Я думаю, вы поняли.

С уважением.

************ ОБНОВЛЕНИЕ: ******************************

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

Предположим, вы записали данные от 15 пользователей (но в будущем у вас будет больше). Вы записываете «данные походки» из них, когда они что-то делают с вашим записывающим устройством. Из записанных сигналов вы извлекаете некоторые функции, скажем, вы извлекаете 5 функций (5 номеров). Следовательно, каждый раз, когда пользователь использует машину, вы получаете 5 номеров. Даже если пользователь один и тот же, 5 номеров будут отличаться каждый раз, потому что записанные сигналы имеют некоторую случайность. Поэтому для обучения нейронной сети необходимо иметь несколько примеров каждого пользователя. Предположим, что у вас есть 18 повторений, выполняемых каждым пользователем.

Подытоживая этот пример:

  • Есть 15 пользователей, доступных для эксперимента.

  • Каждый раз, когда пользователь использует систему, вы записываете 5 номеров (функций). Вы получаете вектор . В Matlab это будет COLUMN.

  • Для эксперимента каждый пользователь выполнил 18 повторений.

Теперь вам нужно создать одну нейронную сеть для каждого пользователя. Для этого вам нужно построить несколько матриц.

Предположим, вы хотите создать нейронную сеть (NN) пользователя 2 (U2). NN будет классифицировать векторы признаков в 2 классах: U2 и NotU2. Поэтому вы должны обучать и тестировать NN с примерами этого. Группа NotU2 представляет любого другого пользователя, что это не U2, однако вы НЕ должны тренировать NN с данными каждого другого пользователя, который у вас есть в вашем эксперименте. Это будет обман (подумайте, что у вас нет данных от каждого пользователя в мире). Поэтому, чтобы создать поезд набора данных вы исключите все повторы некоторых пользователей, чтобы проверить NN во время подготовки (проверки набора данных) и после Trainning (теста набора данных). В этом примере мы будем использовать пользователей {U1, U3, U4} для проверки и пользователей {U5, U6, U7} для тестирования.

Поэтому вы построить следующие матрицы:

  • Поезда ввод матрица Это Виль есть 12 примеров U2 (на 70% больше или меньше) и каждый пример пользователей {U8, U9, .. ., U14, U15}. Каждый пример представляет собой столбец, поэтому матрица поезда будет представлять собой матрицу из 5 строк и 156 столбцов (12 + 8 * 18). Я закажу его следующим образом: [U2_ex1, U2_ex2, ..., U2_ex12, U8_ex1, U8_ex2, ..., U8_ex18, U9_ex1, ..., U15_ex1, ... U15_ex18]. Где U2_ex1 представляет собой вектор-столбец с 5 признаками, полученными пользователем 2 во время повторения/примера № 1.

    - Целевая матрица матрицы поезда. Это матрица из двух строк и 156 столбцов.Каждый столбец j представляет собой правильный класс примера j. Столбец образован нулями, и он имеет 1 в строке, которая указывает класс. Поскольку у нас есть только 2 класса, матрица имеет всего 2 строки. Я скажу, что класс U2 будет первым (поэтому вектор-столбец для каждого примера этого класса будет [1 0]), а второй класс (NotU2) будет вторым (поэтому вектор-столбец для каждого примера этого класса будет [0 1]). Очевидно, что столбцы этой матрицы имеют тот же порядок, что и матрица поезда. Итак, в соответствии с порядком, который я использовал, целевой матрицей будет: 12 столбцов [1 0] и 144 столбца [0 1].

  • проверки входных данных матрицы Она будет иметь 3 примера U2 (на 15% больше или меньше), и каждый пример пользователей [U1, U3, U4]. Следовательно, это будет матрица из 6 строк и 57 столбцов (3 + 3 * 18).

    - Целевая матрица матрицы проверки: матрица из двух строк и 57 столбцов: 3 столбца [1 0] и 54 столбца [0 1].

  • Тестовый вход матрицы Она будет иметь оставшиеся 3 примера U2 (15%) и каждого примера пользователей [U5, U6, U7]. Следовательно, это будет матрица из 6 строк и 57 столбцов (3 + 3 * 18).

    - Целевая матрица тестовой матрицы: матрица из 2 строк и 57 столбцов: 3 столбца [1 0] и 54 столбца [0 1].

ВАЖНО. Столбцы каждой матрицы должны иметь случайный порядок улучшения обучения. То есть, не ставьте все примеры U2 вместе, а затем остальные. В этом примере я поставил их для ясности. Очевидно, что если вы измените порядок входной матрицы, вы должны использовать тот же порядок в целевой матрице.

Чтобы использовать MATLAB, вам нужно будет пройти две матрицы: inputMatrix и targetMatrix. В InputMatrix будут объединены поезда, валидации и тестовые входные матрицы. И targetMatrix то же самое с целями. Таким образом, inputMatrix будет представлять собой матрицу из 6 строк и 270 столбцов. TargetMatrix будет иметь 2 строки и 270 столбцов. Для ясности я скажу, что первые 156 столбцов - это обучающие, затем 57 столбцов валидации и, наконец, 57 столбцов тестирования.

команд, MATLAB будет:

% Create a Pattern Recognition Network 
hiddenLayerSize = 10; %You can play with this number 
net = patternnet(hiddenLayerSize); 

%Specify the indices of each matrix 
net.divideFcn = 'divideind'; 
net.divideParam.trainInd = [1: 156]; 
net.divideParam.valInd = [157:214]; 
net.divideParam.testInd = [215:270]; 

% % Train the Network 
[net,tr] = train(net, inputMatrix, targetMatrix); 

В открытом окне вы сможете увидеть производительность нейронной сети. Выходной объект «сеть» - это ваша тренированная нейронная сеть. Вы можете использовать его с новыми данными, если хотите.

Повторите этот процесс для каждого другого пользователя (U1, U3, ... U15), чтобы получить свою нейронную сеть.

+0

дорогой @ pable, я очень ценю вашу помощь и большое спасибо за ваши усилия и время, не могли бы вы посмотреть на сообщение снова, как я обновил. –

+0

@pable, я не получаю вход и цель, не могли бы вы объяснить мне больше? например, если я хочу обучить классификатор для user1 (и у меня есть 10 примеров для user1), поэтому входная матрица для обучения пользователя1 будет [cU1_t1; cU1_t2, ...... cU1_t10; cU2_t1; cU2_t2, ...... cU2_t10; и так далее]. мой вопрос в том, как classifer будет различать user1 и других пользователей? , Более того, я не понимаю целевую матрицу, пожалуйста? не могли бы вы объяснить целевую матрицу более подробно для меня, пожалуйста? как я могу создать целевую матрицу для user1? не могли бы вы привести мне пример? –

+0

Уважаемый @ pablo, вы действительно добрый и отзывчивый парень. Большое вам спасибо, ваш ответ велик и совершенен.пожалуйста, не могли бы вы поддерживать связь, возможно, у вас возникнут вопросы, связанные с вычислением EER (равный коэффициент ошибок). –