Алгоритм сопоставления с образцом - PullRequest
1 голос
/ 21 сентября 2011

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

Type    geneA    geneB    geneC    ...    geneN
A       1        0        1               1
A       0        0        1               1
B       1        1        1               0
C       0        1        1               0
B       1        1        0               0
etc        

Так что не все А точно такие же, невсе B одинаковы и т. д., но, надеюсь, у них есть какая-то модель.Желательно, чтобы данные были не просто логическими значениями (поэтому они содержали бы числа, отличные от 0 и 1), но логические значения были бы хороши для начала.

Что я хочу сделать, так это дать серию генов для человека, найтииз какого они типа.Например, я хотел бы ввести «011 ... 1» и сказать, что этот человек, скорее всего, имеет тип А.

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

Любая помощь в том, с чего начать поиск такого рода вещей или алгоритмы, которые делают такие вещи, была бы очень признательна.

Ответы [ 5 ]

2 голосов
/ 21 сентября 2011

Вы можете объединить ваши gene* двоичные значения в векторы: например, 1001...1, 001...1 и т. Д. И выполнить кластеризацию k - означает на них.

Например, если вы знаете априори , что у вас есть три типа A, B и C, вы, вероятно, выполните кластеризацию с k = 3.

Как только у вас есть кластеры, вы можете использовать silhouettes , чтобы определить, насколько хорошо входной вектор ( например , 011...1) будет соответствовать одному из трех установленных кластеров.

2 голосов
/ 21 сентября 2011

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

Weka даст вам возможность решить эту проблему с помощью дерева решений, сети Байеса, правил, нейронной сети .etc ...

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

Вы хотите предсказать оснащение класса:

создайте файл, подобный этому:

@relation gene

@attribute gene1 {0,1}
@attribute gene2 {0,1}
@attribute gene3 real
...
@attribute class {A, B, C }

@data
1,1,1,A
1,0,0,B
1,0,1,D 
0,0,1,?
..etc

и отдай его веку.Вы получите свой результат через секунду.

Надеюсь, это поможет

1 голос
/ 22 сентября 2011

Существует простой подход с использованием методов кластеризации.

Центроид кластера - это среднее значение вектора для всех векторов в кластере.

Собрать все экземпляры типа A (кластер A) и рассчитать его центр тяжести.
Собрать всеэкземпляры типа B (кластер B) и вычисление его центроида.
И аналогично для других типов, собирать их и вычислять их центроид.

Затем возьмите неизвестный тип X и вычислите расстояние (евклидово расстояние) до каждого центроида кластеров.Минимальное расстояние - наиболее вероятный тип.

Вот пример для измерения 2 *.

Кластер A имеет два типа с вектором [1,1] и [3,3].Центроид для кластера A имеет вид [2,2]

. Кластер B имеет два типа с вектором [10,10] и [12,8].Центроид для кластера B: [11,9]

Вот случайный тип X с вектором [2,4].Расстояние от X в этом примере будет ближе к кластеру A, чем к кластеру B.

1 голос
/ 21 сентября 2011

Это кажется решаемым без особых усилий: все ваши входные данные являются векторами целых чисел. Ваши шаблоны также являются векторами с прикрепленным типом. Чтобы найти наилучшее соответствие шаблону для данного входного вектора, вы можете рассчитать расстояние между одним входным вектором и всеми векторами шаблона. Таким образом, для шаблона [A: (0, 0, 1, 0)] расстояние для входа (0, 1, 1, 0) будет | 0-0 | + | 0-1 | + | 1-1 | + | 0-0 | = 1. Наилучшие совпадения - это модели с наименьшим расстоянием. Это будет работать и для произвольных целочисленных компонентов.

1 голос
/ 21 сентября 2011

Если вы не знаете, как что-то решить, просто используйте нейронные сети :-) Я думаю, что это подходит для этого случая. Или используйте некоторые N-мерные алгоритмы кластеризации или классификации.

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