Я бы порекомендовал вам использовать OneClassSVM , что является обнаружением выброса без присмотра. Поскольку ваши данные об обучении содержат только образцы из одного класса, то есть с высокой вероятностью окончания обучения, регрессия Logisti c или нейронная сеть могут здесь не работать. Лучше учитывать, что любые данные, которые у вас есть, не являются выбросами, а другая категория, которая вряд ли будет выпускаться как выбросы. После того, как вы адаптируете модель OneClassSVM, вы можете использовать функцию solution_function , чтобы получить расстояние со знаком до разделяющей гиперплоскости, которое будет положительным для внутреннего и отрицательным для внешнего. Кроме того, вы можете использовать сигмовидную функцию, чтобы получить вероятности. Я показал пример ниже:
from sklearn.svm import OneClassSVM
X = [[0], [0.44], [0.45], [0.46], [1]]
clf = OneClassSVM(gamma='auto').fit(X)
def sigmoid(x):
return 1/(1+np.exp(-x))
prob = clf.decision_function([[0.455]]) # Not an outlier
sigmoid(prob)
#array([0.50027839])
prob = clf.decision_function([[5]]) # An outlier
sigmoid(prob)
#array([0.11356841])
Надеюсь, это поможет!