Выбрать главу

Процедура на основе PCA

Идея алгоритма представлена в книге: Анкур Пател — «Прикладное машинное обучение без учителя» ", Диалектика — 2020.

Предположим, что выбраны K параметров для каждого из M «слов» во входном потоке. Для каждого слова получаем вектор длины K, содержащий все значения параметров, найденных для этого слова. В результате всех вычислений находим матрицу размера M x K. Выбираем количество N компонент с помощью функций класса PCA из модуля from scikit-learn.decomposition import PCA и находим приближение каждой строки матрицы с помощью найденных компонент. Затем вычисляем разницу между оригиналом и приближением. Те строки (слова), для которых эти отклонения оказались большими, объявляются зонами возбуждения. Все подробности указанной процедуры можно найти в книге, отмеченной выше.

Решение на основе процедуры GaussianMixture

В этом пункте изложим процедуру выделения отклонения от нормы, принятую на упомянутом выше сайте http://5.23.55.2. Снова имеем M «слов», для каждого из которых имеется K измеряемых параметров. Измеренные параметры помещаем в матрицу D размера K x M. Таким образом, в каждой строке находится одна и та же характеристика, например, длина слова, вычисленная для каждого из имеющихся слов. Теперь в каждой строке надо выделить отклонение от нормы. Процедура GaussianMixture предназначена для построения модели смеси гауссовских распределений. Пользователь указывает число смесей, а функция относит то или иное измерение к нужному классу.

from sklearn import mixture

def gaussDistr(In):

Clf = mixture.GaussianMixture(n_components=2,

covariance_type="full")

Clf.fit(In)

return Clf.predict(In)

На вход этой функции подаем строку матрицы D, а на выходе получаем последовательность из 0 и 1. Это означает, что каждый элемент строки отнесен к тому или иному классу (элементу смеси). Мы используем гипотезу, согласно которой элементы возбуждения встречаются реже, чем обычные фрагменты в речи. Для этого подсчитываем число 1 в выходной последовательности и сравниваем это число с длиной последовательности. Если оно превышает половину длины последовательности, то последовательность инвертируется. Обработав все строки матрицы D, получаем новую матрицу F, состоящую из 0 и 1. Окончательное решение о принадлежности слова моменту возбуждения решается с помощью процедуры голосования. Для этого суммируются элементы в каждом столбце матрицы F, и если эта сумма превышает K/2, то принимается решение о принадлежности слова, определяющего столбец матриц, моменту возбуждения.