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