Вот ответ на ваш последний вопрос.
import seaborn as sns
import pandas as pd
titanic = sns.load_dataset('titanic')
titanic = titanic.copy()
titanic = titanic.dropna()
titanic['age'].plot.hist(
bins = 50,
title = "Histogram of the age variable"
)
from scipy.stats import zscore
titanic["age_zscore"] = zscore(titanic["age"])
titanic["is_outlier"] = titanic["age_zscore"].apply(
lambda x: x <= -2.5 or x >= 2.5
)
titanic[titanic["is_outlier"]]
ageAndFare = titanic[["age", "fare"]]
ageAndFare.plot.scatter(x = "age", y = "fare")
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
ageAndFare = scaler.fit_transform(ageAndFare)
ageAndFare = pd.DataFrame(ageAndFare, columns = ["age", "fare"])
ageAndFare.plot.scatter(x = "age", y = "fare")
from sklearn.cluster import DBSCAN
outlier_detection = DBSCAN(
eps = 0.5,
metric="euclidean",
min_samples = 3,
n_jobs = -1)
clusters = outlier_detection.fit_predict(ageAndFare)
clusters
from matplotlib import cm
cmap = cm.get_cmap('Accent')
ageAndFare.plot.scatter(
x = "age",
y = "fare",
c = clusters,
cmap = cmap,
colorbar = False
)
![enter image description here](https://i.stack.imgur.com/iuhct.png)
См. Эту ссылку для всех деталей.
https://www.mikulskibartosz.name/outlier-detection-with-scikit-learn/
До сегодняшнего дня я никогда не слышал о «Факторе локальных выбросов». Когда я его погуглил, я получил некоторую информацию, которая, кажется, указывает на то, что это производная от DBSCAN Наконец, я думаю, что мой первый ответ на самом деле лучший способ обнаружить выбросы. DBSCAN объединяет в единое целое go, что приводит к обнаружению выбросов, которые действительно считаются «шумом». Я не думаю, что основной целью DBSCAN является обнаружение аномалий, а скорее кластеризация. В заключение нужно немного умения правильно выбирать гиперпараметры. Кроме того, DBSCAN может быть медленным на очень больших наборах данных, поскольку ему неявно необходимо вычислять эмпирическую плотность для каждой точки выборки, что приводит к квадратичной сложности времени наихудшего времени c, что довольно медленно для больших наборов данных.