我已阅读决策函数和 Score_samples 的文档,但无法弄清楚这两种方法之间有什么区别,以及我应该使用哪一种方法来进行异常值检测算法。
任何帮助,将不胜感激。
我有一个没有目标值的值样本。实际上,X 特征(预测变量)全部用于拟合隔离森林估计器。目标是确定哪些 X 特征以及未来出现的特征实际上是异常值。举例来说,假设我拟合一个数组 (340,3) => (n_samples, n_features)并且我预测这些特征来识别 340 个观察值中哪些是异常值。
到目前为止我的方法是:
首先我创建一个管道对象
from sklearn.pipeline import Pipeline
from sklearn.ensemble import IsolationForest
from sklearn.model_selection import GridSearchCV
steps=[('IsolationForest', IsolationForest(n_jobs=-1, random_state=123))]
pipeline=Pipeline(steps)
Run Code Online (Sandbox Code Playgroud)
然后我创建一个用于超参数调整的参数网格
parameteres_grid={'IsolationForest__n_estimators':[25,50,75],
'IsolationForest__max_samples':[0.25,0.5,0.75,1.0],
'IsolationForest__contamination':[0.01,0.05],
'IsolationForest__bootstrap':[True, False]
}
Run Code Online (Sandbox Code Playgroud)
最后,我应用GridSearchCV算法
isolation_forest_grid=GridSearchCV(pipeline, parameteres_grid, scoring=scorer_f, cv=3, verbose=2)
isolation_forest_grid.fit(scaled_x_features.values)
Run Code Online (Sandbox Code Playgroud)
我的目标是确定最适合的评分函数(记为Scorer_f ),它将有效地选择最合适的隔离森林估计器来进行异常值检测。
到目前为止,基于这个出色的答案,我的评分如下:
isolation_forest_grid=GridSearchCV(pipeline, parameteres_grid, scoring=scorer_f, cv=3, verbose=2)
isolation_forest_grid.fit(scaled_x_features.values)
Run Code Online (Sandbox Code Playgroud)
简单解释一下,我不断地将批次中 5%(0.05 分位数)的观察值识别为异常值。因此,每个低于阈值的分数都被表示为异常值。因此,我指示 GridSearch 函数选择异常值最多的模型作为最坏情况。
让您尝尝结果:
isolation_forest_grid.cv_results_['mean_test_score']
array([4. , 4. , 4. , …Run Code Online (Sandbox Code Playgroud) python machine-learning outliers scikit-learn isolation-forest