擅长:python、mysql、java
<p>我还认为使用sklearn中的svm.OneClassSVM的方法将产生一个好的异常值检测器。然而,我根据问题中的示例整理了一些有代表性的数据,它根本无法检测出异常值。我将nu和gamma参数从0.01扫到0.99,发现没有令人满意的支持向量机预测。</p>
<p>我的理论是,由于样本具有分类数据(城市、州、国家、网络浏览器),SVM算法不是正确的方法。(顺便说一下,我是先用DictVectorizer.fit_转换方法把数据转换成二进制特征向量的)。</p>
<p>我相信@sullivanmatt建议使用贝叶斯分类器是正确的。贝叶斯分类器用于有监督的学习,但至少在表面上,这个问题被描述为无监督的学习问题,即我们不知道先验的哪些观察值是正常的,哪些是异常值。</p>
<p>因为您想要检测的异常值在网站访问流中非常罕见,所以我相信您可以通过将训练集中的每个观察标记为正/正态观察来训练贝叶斯分类器。分类器应该预测真实的正态观测值具有更高的概率,因为大多数观测值都是真正态的。一个真正的异常值应该是一个低预测概率。</p>