基本上我的问题与SciKit One-class SVM classifier training time increases exponentially with size of training data相同,但没人知道问题。
似乎在成千上万的某个地方运行良好,但是成千上万的人需要很长时间。而且我希望以数百万的价格运行它,但我不想等待一天半(甚至更多)。是否有更快的方法,或者我应该使用别的东西?
答案 0 :(得分:0)
我非常在这个领域的初级,所以带上一粒盐。
隔离森林似乎是异常检测的有效解决方案。它们已被证明与其他流行算法相比表现良好[Liu,2008]。此外,根据scikit学习,单类SVM在某种程度上容易出现异常。第1类中的异常可能与第2类重叠并导致数据被错误标记...可能采用样本的子集并使用它们来创建SVM集合可以避免这种情况(并且仍然可以节省您的时间,具体取决于子集),但隔离森林自然会这样做。
为了进一步阅读,这似乎是关于该主题的一篇很好的参考文献 http://www.robots.ox.ac.uk/~davidc/pubs/NDreview2014.pdf
它提到了可能适用于您的情况的聚类和距离方法。我认为最好做很多阅读并确保你理解算法的不同优点/缺点。特别是因为我正在做这件事,即使我知道你问题的具体细节,也无法提供可靠的建议。
注意:基于距离的算法。我知道有些是优化的,但我认为一般的抱怨是它们具有很高的计算复杂度。许多基于聚类/距离/概率的算法也具有处理高维数据的弱点。