Как построить контурную линию решающей функции, используемой LOF для обнаружения выбросов - PullRequest
0 голосов
/ 19 июня 2020

Это мой код:

lof=LocalOutlierFactor(n_neighbors=30,contamination=10/110) 

y_pred = lof.fit_predict(X)

xxx, yyy = np.meshgrid(np.linspace(3, 30, 50), np.linspace(0, 10, 50))

Z = lof._decision_function(np.c_[xxx.ravel(), yyy.ravel()])

Z = Z.reshape(xxx.shape)

con=0.09

tau_lof = mquantiles(Z,con)
plt.figure()

c_0 = plt.contour(xxx, yyy, Z, colors='red', levels = tau_lof, linewidths=1)

plt.clabel(c_0, inline=1, fontsize=10, fmt={tau_lof[0]: str(con)})

a = plt.scatter(X[:100, 0], X[:100, 1], c='blue', edgecolor='k', s=40) ## plot inlier
b = plt.scatter(X[100:, 0], X[100:, 1], c='red', edgecolor='k', s=40) ## plot outlier

plt.axis('tight')
plt.xlim((5, 27.5))
plt.ylim((-1, 7.5))

plt.legend([a, b], ["normal observations","abnormal observations"], bbox_to_anchor=(1.05, 1.0), loc='upper left')

plt.show()

Я могу получить все точки для построения графика, но не могу получить ни одной контурной линии, представляющей 9-й процентиль на графике. Я знаю, что это как-то связано с уровнями и фмт. Но я новичок в этом и не уверен, как это исправить График

...