Метод на независимите компоненти в Python, Tetraquark Personal Card
В хода на работата си попаднах на интересен математически инструмент, нареченIndependent component analysis (OLS ) илиIndependent component analysis (ANC ) (на английскиIndependent component analysis,ICA ). Този метод беше предложен като начин за решаване на проблема със сляпото разделяне на сигнала илисляпото разделяне на източника, т.е. извличането на независими сигнали от предварително смесени данни.
Да дадем пример - каква е същността на задачата за сляпо разделяне на сигнала. Да кажем, че имаме двама души в една стая, които казват нещо / пеят / излъчват акустични вълни и два микрофона в различни части на стаята, улавяйки околните звуци. Тоест получаваме два сигнала от два микрофона към анализиращата система, всеки от които е дигитализирана смес от две акустични вълни на високоговорители и някакъв вид шум. Така че целта на решаването на проблема е да изолираме нашите оригинални сигнали от входящите смеси.


Така че това е, което методът на независимите компоненти ви позволява да направите: при наличие на известни стойности само на матрицата X, методът търсистойности на матрицата S, която е набор от независими компоненти, които описват нашите независими сигнали, и такива стойности на матрицата A, с които можете да преминете от пространство S към пространство X (и обратно, съответно). Крайната настройка обикновено се записва така:
Обратната матрица A често се нарича в англоезичната литература като unmixing matrix или demixing matrix и обикновено се обозначава като W.
Действието на метода се основава на два принципа или предпоставки:
- Независимите компоненти задължително трябва да са статистически независими (стойностите на матрицата S). Грубо казано, стойностите на един вектор на независимия компонент не влияят по никакъв начин на стойностите на другия компонент.
- Независимите компоненти задължително трябва да имат негаусово разпределение.
Също така си струва да се каже, че много измамници често използват този метод за решаване на проблема с намаляването на размерността на данните в машинното обучение, т.е. те го използват като аналог наАнализ на главните компоненти (Анализ на основните компоненти, PCA ). Идеята е рискована, но понякога работи.
Има доста алгоритми, които прилагат разглеждания метод на независими компоненти, например Infomax, KernelICA, JADE, FastICA. Различните алгоритми се основават на различни идеи, но ако са грубо закръглени, тогава работата се основава на такива техники като „избелване“ на вектори, минимизиране на корелационните стойности и минимизиране на „взаимната информация“ (чрез информационна ентропия) между компонентите, максимизиране на не-гаусите и т.н. За повече информация, моля, вижте специализираната литература, като тази: URL.
В тази статия ще разгледаме прост пример за практическото приложение на алгоритъмаFastICA за разделяне на смес от две изкуственисигнали в Python, използвайки готова реализация на алгоритъма в добре познатата библиотека sklearn.
И така, за работа имаме нужда от следните библиотеки:numpy,matplotlib иsklearn. В Linux всичко се инсталира лесно с помощта на мениджъра на пакети apt-get или pip. Най-лесно е да направите нещо подобно: