Statistics and Machine Learning Toolbox™ обеспечивает функции обнаружения аномалии модели специфичные, которые можно применить после обучения классификация, регрессия или кластеризирующаяся модель. Например, можно обнаружить аномалии при помощи этих объектных функций:
Матрица близости — outlierMeasure для случайного леса (CompactTreeBagger)
Расстояние Mahalanobis — mahal для классификатора дискриминантного анализа (ClassificationDiscriminant) и mahal для смешанной гауссовской модели (gmdistribution)
Безусловная плотность вероятности — logp для классификатора дискриминантного анализа (ClassificationDiscriminant), logp для наивного классификатора Байеса (ClassificationNaiveBayes), и logp для наивного классификатора Байеса для пошагового обучения (incrementalClassificationNaiveBayes)
Для получения дополнительной информации смотрите страницы ссылки на функцию.
Обучите случайный лесной классификатор при помощи TreeBagger функция, и обнаруживает выбросы в обучающих данных при помощи объектного функционального outlierMeasure.
Обучите случайный лесной классификатор
Загрузите ionosphere набор данных, который содержит радар, возвращает качества (Y) и данные о предикторе (X) для 34 переменных. Радар возвращается, или имеют хорошее качество ('g') или плохое качество ('b').
load ionosphereОбучите случайный лесной классификатор. Храните информацию из сумки для оценки важности предиктора.
rng("default") % For reproducibility Mdl_TB = TreeBagger(100,X,Y,Method="classification", ... OOBPredictorImportance="on");
Mdl_TB TreeBagger объект модели для классификации. TreeBagger важность предиктора хранилищ оценивает в свойстве OOBPermutedPredictorDeltaError.
Обнаружьте выбросы Используя близость
Обнаружьте выбросы в обучающих данных при помощи outlierMeasure функция. Функция вычисляет меры по выбросу на основе средней близости в квадрате между одним наблюдением и другими наблюдениями в обученном случайном лесу.
CMdl_TB = compact(Mdl_TB); s_proximity = outlierMeasure(CMdl_TB,X,Labels=Y);
Высокое значение меры по выбросу указывает, что наблюдение является выбросом. Найдите порог, соответствующий 95-й процентили, и идентифицируйте выбросы при помощи isoutlier функция.
[TF,~,U] = isoutlier(s_proximity,Percentiles=[0 95]);
Постройте гистограмму мер по выбросу. Создайте вертикальную линию в пороге выброса.
histogram(s_proximity) xline(U,"r-",join(["Threshold =" U])) title("Histogram of Outlier Measures")

Визуализируйте значения наблюдения, использующие две самых важных функции, выбранные оценками важности предиктора в свойстве OOBPermutedPredictorDeltaError.
[~,idx] = sort(Mdl_TB.OOBPermutedPredictorDeltaError,'descend'); TF_c = categorical(TF,[0 1],["Normal Points" "Anomalies"]); gscatter(X(:,idx(1)),X(:,idx(2)),TF_c,"kr",".x",[],"on", ... Mdl_TB.PredictorNames(idx(1)),Mdl_TB.PredictorNames(idx(2)))

Обучите классификатор снова без выбросов и постройте гистограмму мер по выбросу.
Mdl_TB = TreeBagger(100,X(~TF,:),Y(~TF),Method="classification"); s_proximity = outlierMeasure(CMdl_TB,X(~TF,:),Labels=Y(~TF)); histogram(s_proximity) title("Histogram of Outlier Measures After Removing Outliers")

Обучите модель дискриминантного анализа при помощи fitcdiscr функция, и обнаруживает выбросы в обучающих данных при помощи объектных функций logp и mahal.
Обучите модель дискриминантного анализа
Загрузите ирисовый набор данных Фишера. Матричный meas содержит цветочные измерения для 150 различных цветов. Переменная species перечисляет разновидности для каждого цветка.
load fisheririsОбучите модель дискриминантного анализа использование целого набора данных.
Mdl = fitcdiscr(meas,species,PredictorNames= ... ["Sepal Length" "Sepal Width" "Petal Length" "Petal Width"]);
Mdl ClassificationDiscriminant модель.
Обнаружьте выбросы Используя журнал безусловная плотность вероятности
Вычислите журнал безусловные плотности вероятности обучающих данных.
s_logp = logp(Mdl,meas);
Низкое значение плотности указывает, что соответствующее наблюдение является выбросом.
Определите более низкий порог плотности для выбросов при помощи isoutlier функция.
[~,L_logp] = isoutlier(s_logp);
Идентифицируйте выбросы при помощи порога.
TF_logp = s_logp < L_logp;
Постройте гистограмму значений плотности. Создайте вертикальную линию в пороге выброса.
figure histogram(s_logp) xline(L_logp,"r-",join(["Threshold =" L_logp])) title("Histogram of Log Unconditional Probability Densities ")

Чтобы сравнить значения наблюдения между нормальными точками и аномалиями, создайте матрицу сгруппированных гистограмм и сгруппированных графиков рассеивания для каждой комбинации переменных при помощи gplotmatrix функция.
TF_logp_c = categorical(TF_logp,[0 1],["Normal Points" "Anomalies"]); gplotmatrix(meas,[],TF_logp_c,"kr",".x",[],[],[],Mdl.PredictorNames)

Обнаружьте выбросы Используя расстояние Mahalanobis
Найдите расстояния Mahalanobis в квадрате от обучающих данных до средних значений класса истинных меток.
s_mahal = mahal(Mdl,meas,ClassLabels=species);
Большое значение расстояния указывает, что соответствующее наблюдение является выбросом.
Определите порог, соответствующий 95-й процентили, и идентифицируйте выбросы при помощи isoutlier функция.
[TF_mahal,~,U_mahal] = isoutlier(s_mahal,Percentiles=[0 95]);
Постройте гистограмму расстояний. Создайте вертикальную линию в пороге выброса.
figure histogram(s_mahal) xline(U_mahal,"-r",join(["Threshold =" U_mahal])) title("Histogram of Mahalanobis Distances")

Сравните значения наблюдения между нормальными точками и аномалиями при помощи gplotmatrix функция.
TF_mahal_c = categorical(TF_mahal,[0 1],["Normal Points" "Anomalies"]); gplotmatrix(meas,[],TF_mahal_c,"kr",".x",[],[],[],Mdl.PredictorNames)

outlierMeasure | mahal
(ClassificationDiscriminant) | mahal
(gmdistribution) | logp
(ClassificationDiscriminant) | logp
(ClassificationNaiveBayes) | logp
(incrementalClassificationNaiveBayes) | isoutlier