В этом примере показано, как инкрементно обучить модель классифицировать документы на основе частотности слова в документах; модель сумки слов.
Загрузите набор данных 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. Поскольку предиктор частотность слова слова в словаре укажите, что предикторы условно, совместно многочлен, учитывая класс.
Mdl = incrementalClassificationNaiveBayes(MaxNumClasses=maxNumClasses,... MetricsWarmupPeriod=0,MetricsWindowSize=1000,DistributionNames='mn');
Mdl
incrementalClassificationNaiveBayes
объект. Mdl
холодная модель, потому что это не обработало наблюдение; это представляет шаблон для обучения.
Измерьте производительность модели и подбирайте инкрементную модель к обучающим данным при помощи updateMetricsAndfit
функция. Симулируйте поток данных путем обработки фрагментов 1 000 наблюдений за один раз. В каждой итерации:
Процесс 1 000 наблюдений.
Перезапишите предыдущую инкрементную модель с новой, адаптированной к входящему наблюдению.
Сохраните текущую минимальную стоимость.
Этот этап может занять несколько минут, чтобы запуститься.
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.
predict
| fit
| updateMetrics