Який алгоритм статистичної класифікації може передбачити істинне / хибне для послідовності входів?


15

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

Точний взаємозв'язок між послідовністю та властивістю незрозумілий, але я вважаю, що це дуже послідовно і має піддаватися статистичній класифікації. У мене є велика кількість випадків навчання класифікатору, хоча це може бути трохи шумним, в тому сенсі, що є невелика ймовірність того, що послідовності присвоєно неправильний клас у цьому навчальному наборі.

Приклад навчальних даних:

Sequence 1: (7 5 21 3 3) -> true
Sequence 2: (21 7 5 1) -> true
Sequence 3: (12 21 7 5 11 1) -> false
Sequence 4: (21 5 7 1) -> false
...

Приблизно кажучи, властивість визначається набором значень у послідовності (наприклад, наявність "11" означає, що властивість майже напевно буде помилковою), а також порядком значень (наприклад, "21 7 5 "значно збільшує ймовірність того, що властивість відповідає дійсності).

Після тренування я повинен мати можливість надати класифікатору раніше небачену послідовність, наприклад (1 21 7 5 3) , і він повинен впевненість у тому, що властивість є істинною. Чи існує добре відомий алгоритм підготовки класифікатора з таким видом входів / виходів?

Я вважав наївний байєсівський класифікатор (який насправді не пристосований до того, що порядок має значення, принаймні, не без того, щоб сильно порушити припущення про незалежність даних). Я також дослідив прихований підхід Маркова моделі, який видається непридатним, оскільки доступний лише один вихід, а не один вихід на кожен вхід. Що я пропустив?


Чи є у вас спосіб виміряти відстань між парою послідовностей? Чи відома мінімальна та / або максимальна довжина послідовності?
Крейг Райт

@CraigWright Немає застосовних мір відстані, про які я можу придумати. Максимальна довжина порядку 12 і мінімум близько 4 може бути припущена. Також існує близько 30 чітких значень (вони не є безмежними природними; просто досить невеликий набір можливостей)
Роман Старков

Які ваші декілька змінних відповідей ви згадуєте? Я читав вашу проблему, оскільки це двійковий вихід, і, можливо, ви можете просто створити фіктивні змінні Var1.1, Var1.12, ..., Var12.12
B_Miner

@B_Miner Можливо, я неправильно розумію, як працює HMM, але здається, що він працює наступним чином: я подаю йому свою вхідну послідовність (abcde), і вона виводить приховану послідовність, найкраще відповідну цій, а саме (a 'b' c 'd' e ' ). Я не думаю, що фіктивні змінні вирішили б це; Мені потрібна правдива / хибна класифікація для всієї послідовності.
Роман Старков

@romkyns, це не зовсім так, як працює HMM. HMM - ймовірнісний процес. Враховуючи послідовність та HMM M , можна обчислити ймовірність того, що M виведе s (використовуючи динамічне програмування; алгоритм перемотки). Також, враховуючи набір навчальних послідовностей, ви можете знайти HMM M, який має максимальну ймовірність створення цих навчальних послідовностей (використовуючи алгоритм Баума-Велча). Тому HMM цілком може щось спробувати тут. Але деякі деталі потрібно заповнити. sMMsM
DW

Відповіді:


10

Можна спробувати ймовірнісні підходи, подібні до наївного класифікатора Байєса, але із слабшими припущеннями. Наприклад, замість того, щоб робити сильне припущення про незалежність, зробіть припущення Маркова:

p(xc)=p(x0c)tp(xtxt1,c)

- мітка вашого класу, x - ваша послідовність. Потрібно оцінити два умовні розподіли, один для c = 1 і один для c = 0cxc=1c=0 .

За правилом Байєса:

p(c=1x)=p(xc=1)p(c=1)p(xc=1)p(c=1)+p(xc=0)p(c=0).

Які розподіли вибрати для p(xtxt1,c) залежить від того, які інші припущення ви можете зробити про послідовності та скільки даних у вас є.

Наприклад, ви можете використовувати:

p(xtxt1,c)=π(xt,xt1,c)iπ(xi,xt1,c)

При таких розподілах, якщо у ваших послідовностях відбувається 21 різне число, вам доведеться оцінити параметри π ( x t , x t , c ) плюс 21 2 = 42 параметри для p ( x 0c ) плюс 2 параметри для p ( c )21212=882π(xt,xt,c)212=42p(x0c)2p(c) .

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

1#D(x,c)Dlogp(cx)

за допомогою градієнта-спуску.


(+1) Мені це подобається. Однак, можливо, знадобиться жахливий обсяг даних, щоб отримати достовірні оцінки для всіх p(xt|xt1,c)
steffen

Якщо ви можете зробити більше припущень щодо залучених дистрибутивів, ви можете піти з набагато меншими параметрами. Якби, наприклад, ви знали, що є двочленним, а E [ x tx t - 1 , c ] = x t - 1 , вам доведеться оцінити лише два параметри, по одному для кожного значення c . Звичайно, якщо ви не можете зробити жодних припущень і не маєте достатньо даних, ви можете зробити не багато. Безкоштовного обіду немає.p(xtxt1,c)E[xtxt1,c]=xt1c
Лукас

6

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

Особливості: В основному кожна функція повинна бути чимось, що можна обчислити з певної послідовності, і що, на вашу думку, може мати відношення до того, має ці властивість послідовність чи ні. Виходячи з опису, ви можете розглянути такі функції, як:

  • iiз'являється в послідовності. Наприклад, послідовність (7 5 21 3 3)генерує особливість вектора (0,0,2,0,1,0,1,0, ..., 0,1,0, ..., 0).

  • "Мішок діаграм." Діаграма - пара послідовних чисел. Враховуючи послідовність, ви можете витягти всі його діаграми. Тоді ви могли порахувати, скільки разів з’являється кожна можлива діаграма. Так , наприклад, послідовність (7 5 21 3 3)має наступну як її біграми: 7 5, 5 21, 21 3, і 3 3. Припустимо, що послідовність складається з чисел 1-30, є302 можливі діаграми, тож ви отримаєте 302особливості. Враховуючи послідовність, ви можете генерувати цей вектор функції.

  • "Мішок із триграмами". Ви також можете розглянути триграми, що є послідовністю трьох послідовних чисел з початкової послідовності. Можна зробити так само, як вище.

Якщо ви використовуєте наведені вище функції, ви можете витягнути їх г=30+302+303характеристики з кожної послідовності. Іншими словами, до кожної послідовності ви пов'язуєте aг-вимірний векторний вектор, який представляє собою сукупність ознак. Після цього ви можете викинути оригінальні послідовності. Наприклад, ваш навчальний набір стає купою пар вводу / виводу, де вхід є векторним ознакою (відповідає певній послідовності з вашого навчального набору), а вихід - булевим (вказує, чи мала ця послідовність властивість чи ні) .

Інша варіація вищезгаданої ідеї полягає у використанні "набору X" замість "bag of X". Наприклад, замість підрахунку, скільки разів кожне числоi З'являється, ви можете просто створити булеве значення, яке вказує, чи є число iз’явився хоча б раз чи ні. Це може чи не може дати кращих результатів. Як правило, ви можете експериментувати з набором використовуваних вами функцій, щоб зрозуміти, які з них дають найкращі результати (наприклад, можливо, ви кинете "мішок з триграмами"; або, можливо, ви можете придумати деякі інші ідеї, щоб спробувати) .

Алгоритм машинного навчання: я не кваліфікований, щоб давати вам поради щодо вибору алгоритму машинного навчання; можливостей багато. Але в цілому ви будете застосовувати алгоритм навчання до свого навчального набору (пари вхідних / вихідних функцій / булевих) і намагаєтеся використовувати його для передбачення, яке зі значень у тестовому наборі має властивість. Вибір алгоритму машинного навчання може залежати від кількох факторів, включаючи те, як розмір навчального набору порівнюється відносног(кількість особливостей). Вашою найкращою ставкою може бути спробувати кілька алгоритмів машинного навчання та побачити, який працює найкраще. Ви можете включити підтримку векторних машин підтримки (SVM) як один із алгоритмів, які ви намагаєтеся.


Перша спроба, яку я насправді здійснив, - це «мішок триграмів» з наївною байєсівською класифікацією. Результати є обнадійливими, але не великими. Я подумав, що це може бути пов’язано з тим, що триграми зовсім не є незалежними: якщо у мене є "1 2 3", то я також дуже ймовірно мати триграму "2 3 *". Можливо, я повинен ще експериментувати з точними особливостями.
Роман Старков

Експериментувати більше, як з різними наборами функцій, так і з різними алгоритмами навчання - хороша ідея. Також, виходячи з опису вашої проблеми, ви можете додати функції для появи кожного окремого числа (мішок слів, а не лише мішок триграм): якщо ви використовуєте лише триграми, ви ускладнюєте навчання алгоритму машинного навчання такі факти, як "послідовності, які містять 11, майже не мають властивості".
DW

2

Те, що ви ефективно робите, - це тестування гіпотез щодо часових рядів. HMM працюватимуть для вас, хоча вам доведеться адаптувати їх до вашого конкретного випадку.

Чесно кажучи, якщо ви не можете записати якийсь математичний опис того, що ви намагаєтесь виявити, ви не збираєтеся дуже далеко виходити. Можливо, ви можете сказати нам про те, яку особливість ви очікуєте побачити?


1
Machine learning has shown us that we can get very far without having any idea about what to look for.
bayerj

1

Given a max length of 12 on the sequence, then a neural network with 12 inputs and one output may work, but you would have to pad the end of each sequence with zeroes or some inert value.


1

Have you tried using Bayesian networks? That's the first thing I think of when I need to fuse multiple pieces of data (coming in one at a time) to arrive at the probabilities of a random variable.

Bayesian networks don't rely on the independence assumption that naive Bayes does.

BTW, hidden Markov models are a special case of Bayesian networks.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.