我正在尝试将isolation forest algorithm与Python scikit-learn一起使用。
我不明白为什么我必须生成集合X_test
和X_outliers
,因为当我获取数据时,我不知道是否存在异常值。但也许这只是一个例子,我不必为每个案例生成和填充集合。我认为隔离林不需要接收干净的X_train
(没有异常值)。
我误解了算法吗?我是否必须使用其他算法(我考虑过一类SVM,但其X_train
必须尽可能干净)?
隔离林算法是无监督算法还是有监督算法(如随机森林算法)?
答案 0 :(得分:3)
问题:
我不明白为什么我必须生成集合X_test
和X_outliers
,因为当我获取数据时,我不知道是否有异常值的
回答:
您不必生成X_outliers
。这是一个示例,向您展示隔离林可以检测异常值。该数据集是随机的。它与原始数据无关。
您需要做的只是使IsolationForest
适合您的训练数据。如果你愿意,可以检查测试集 - 作为预处理步骤 - 如果有一些异常值。
答案 1 :(得分:3)
“隔离森林算法是无监督算法还是受监督算法(如随机森林算法)?”
隔离树是一种无监督算法,因此不需要标签来识别异常值/异常。它遵循以下步骤:
一旦数据的递归分区完成,就会到达树的末尾。预计到达异常值的距离远远小于正常数据的距离(见图)。
对路径的距离进行平均并归一化以计算异常分数。异常得分为1被认为是异常值,接近0的值被认为是正常的。
异常值的判断是根据得分进行的。不需要标签栏。因此,它是一种无监督算法。
答案 2 :(得分:0)
隔离林和dbscan方法是非参数结构的主要方法。隔离林方法的优点是无需事先缩放,但无法处理缺少的值。所以您必须处理它。
preds = iso.fit_predict(train_nan_dropped_for_isoF)
请记住,.fit_predict()
将不用于测试数据。只是.predict()
我该如何解决问题?