Простой / практический пример нечеткого алгоритма c-средних

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

Мой текущий простой подход просто проверяет, совпадают ли коды ключей ссылочного пароля с набранными в настоящее время кодами клавиш, а также проверяет, совпадают ли времена нажатия клавиш (задержка) и время нажатия клавиши (полет) с эталонным временем +/- 100 мс (допуск). Это, конечно, очень ограничено, и я хочу дополнить его неким нечетким сопоставлением с образцом c-средних.

Для каждого ключа функции выглядят так: код, время ожидания, время полета (время первого полета всегда равно 0).

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

2 ответа

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

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

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

Извините, я действительно не вижу здесь никакой кластеризации. Термин "нечеткий", кажется, ввел вас в заблуждение относительно этого алгоритма кластеризации. Попробуйте вместо "нечеткой логики".

Как правило, вы должны сделать следующее:

  1. Определите, сколько кластеров вы хотите (2? "Аутентичные" и "Поддельные"?)
  2. Определите, какие элементы вы хотите кластеризовать (отдельные нажатия клавиш? Попытки входа в систему?)
  3. Определите, как будут выглядеть ваши векторы характеристик (время задержки, время полета?)
  4. Определите, какую метрику расстояния вы будете использовать (как вы будете измерять расстояние каждой выборки от каждого кластера?)
  5. Создайте учебные данные для каждого типа кластера (как выглядит аутентичный логин?)
  6. Запустите алгоритм FCM для данных обучения, чтобы сгенерировать кластеры.
  7. Чтобы создать вектор членства для любого данного примера попытки входа в систему, запустите его с помощью алгоритма FCM, используя кластеры, которые вы нашли в шаге 6
  8. Используйте полученный вектор членства, чтобы определить (на основе некоторых пороговых критериев), является ли попытка входа в систему аутентичной

Я не эксперт, но это кажется странным подходом к определению, является ли попытка входа в систему аутентичной или нет. Я видел FCM, используемый для распознавания образов (например, какое выражение лица я делаю?), Что имеет смысл, потому что вы имеете дело с несколькими категориями (например, счастливые, грустные, злые и т. Д.) С определяющими характеристиками. В вашем случае у вас действительно есть только одна категория (аутентичная) с определяющими характеристиками. Не аутентичные нажатия клавиш просто "не похожи" на аутентичные нажатия клавиш, поэтому они не будут кластеризоваться.

Возможно, я что-то упустил?

Другие вопросы по тегам