Обчислювально найефективніший спосіб вирішити, чи лінійно відокремлюються два набори точок, це шляхом застосування лінійного програмування . GLTK ідеально підходить для цієї мети і майже кожна мова високого рівня пропонує інтерфейс для неї - R , Python, Octave, Julia тощо.
Що стосується відповіді, що пропонує використання SVM :
Використання SVM є неоптимальним рішенням для перевірки лінійної роздільності з двох причин:
SVM - класифікатори з низьким рівнем обмеження. Це означає, що лінійне ядро SVM може осісти для роздільної площини, яка не відокремлюється ідеально, хоча це може бути реально можливим. Якщо ви перевірите коефіцієнт помилок, це буде не 0, і ви помилково зробите висновок, що два набори не є лінійно відокремлюваними. Цю проблему можна пом'якшити, вибравши дуже високий коефіцієнт витрат C - але це пов'язано з дуже високими обчислювальними витратами.
SVM - це класифікатори максимальної маржі. Це означає, що алгоритм намагатиметься знайти площину, що розділяє два класи, намагаючись триматися подалі від обох, наскільки це можливо. Знову ж таки, це особливість, що непотрібно збільшує обчислювальні зусилля, оскільки обчислює щось, що не має значення для відповіді на питання про лінійну відокремлюваність.
Скажімо, у вас є набір точок A і B:
Тоді вам доведеться мінімізувати 0 для наступних умов:
(Нижче A - це матриця, а не набір точок згори)
"Зведення до мінімуму 0" ефективно означає, що вам не потрібно фактично оптимізувати цільову функцію, оскільки це не обов'язково, щоб з'ясувати, чи множини лінійно відокремлюються.
Зрештою ( ) визначає розділову площину.
Якщо вас цікавить робочий приклад з R або математичні деталі, перевірте це .