如何确定在实现 LocalOutlierFactor 时要考虑多少个 n_neighbors?

数据挖掘 Python scikit-学习 离群值 超参数调整 k-nn
2021-10-13 16:09:10

我有一个行:134000 和列:200 的数据集。我正在尝试使用LocalOutlierFactorscikit-learn 识别数据集中的异常值。尽管我了解算法的工作原理,但我无法决定n_neighbors我的数据集。

请建议。

1个回答

在这些情况下,通常使用网格搜索来计算最佳参数:

from sklearn.model_selection import GridSearchCV
from sklearn.neighbors import KNeighborsClassifier
import numpy as np

n = 30 # Max number of neighbours you want to consider
param_grid = {'n_neighbors': np.arange(n)}
grid = GridSearchCV(KNeighborsClassifier(), param_grid)

然后给定这个网格,您可以将其拟合到您的数据以计算其最佳值(根据您提供的值,它们可能不是全局最优值(如果返回值是输入范围的极值之一,甚至是局部值)):

grid.fit(X_train, y_train)

您可以通过调用从输入中查看最佳参数:

grid.best_params_
>>> {'n_neighbors': ?}

您可以通过调用自动选择具有所述最佳参数的估计器:

model = grid.best_estimator_
y_pred = model.fit(X_train, y_train).predict(X_test)

注意:您可以通过将它们添加到输入字典中来找到其他参数的最佳值param_grid