Выполните классификацию текстов инкрементно

В этом примере показано, как инкрементно обучить модель классифицировать документы на основе частотности слова в документах; модель сумки слов.

Загрузите набор данных NLP, который содержит разреженную матрицу частотности слова X вычисленный из документации MathWorks®. Маркирует Y документация тулбокса, которой принадлежит страница.

load nlpdata

Для получения дополнительной информации о наборе данных, таком как словарь и корпус, вводят Description.

Наблюдения располагаются меткой. Поскольку программное обеспечение пошагового обучения не начинает вычислять показатели производительности, пока оно не обрабатывает все метки, по крайней мере, однажды, переставьте набор данных.

[n,p] = size(X)
n = 31572
p = 34023
rng(1);
shflidx = randperm(n);
X = X(shflidx,:);
Y = Y(shflidx);

Определите количество классов в данных.

cats = categories(Y);
maxNumClasses = numel(cats);

Создайте наивного Бейеса инкрементный ученик. Задайте количество классов, метрический период прогрева 0 и метрический размер окна 1 000. Поскольку предиктор j частотность слова слова j в словаре укажите, что предикторы условно, совместно многочлен, учитывая класс.

Mdl = incrementalClassificationNaiveBayes(MaxNumClasses=maxNumClasses,...
    MetricsWarmupPeriod=0,MetricsWindowSize=1000,DistributionNames='mn');

Mdl incrementalClassificationNaiveBayes объект. Mdl холодная модель, потому что это не обработало наблюдение; это представляет шаблон для обучения.

Измерьте производительность модели и подбирайте инкрементную модель к обучающим данным при помощи updateMetricsAndfit функция. Симулируйте поток данных путем обработки фрагментов 1 000 наблюдений за один раз. В каждой итерации:

  1. Процесс 1 000 наблюдений.

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

  3. Сохраните текущую минимальную стоимость.

Этот этап может занять несколько минут, чтобы запуститься.

numObsPerChunk = 1000;
nchunks = floor(n/numObsPerChunk);
mc = array2table(zeros(nchunks,2),'VariableNames',["Cumulative" "Window"]);

for j = 1:nchunks
    ibegin = min(n,numObsPerChunk*(j-1) + 1);
    iend   = min(n,numObsPerChunk*j);
    idx = ibegin:iend; 
    XChunk = full(X(idx,:));
    Mdl = updateMetricsAndFit(Mdl,XChunk,Y(idx));
    mc{j,:} = Mdl.Metrics{"MinimalCost",:};
end

Mdl incrementalClassificationNaiveBayes объект модели, обученный на всех данных в потоке. Во время пошагового обучения и после того, как модель подогревается, updateMetricsAndFit проверяет эффективность модели на входящем фрагменте наблюдений, и затем подбирает модель к тем наблюдениям.

Постройте минимальную стоимость, чтобы видеть, как она развилась во время обучения.

figure;
plot(mc.Variables)
ylabel('Minimal Cost')
legend(mc.Properties.VariableNames)
xlabel('Iteration')

Совокупная минимальная стоимость гладко уменьшает и улаживает близкие 0.16, в то время как минимальная стоимость, вычисленная для фрагмента, переходит между 0,14 и 0.18.

Смотрите также

Объекты

Функции

Похожие темы