使用CouchDB和Python进行机器学习检测“异常行为”?

当用户访问我的Python网络服务时,我收集了很多非常有趣的数据点。例如,我有他们的当前城市、州、国家、用户代理等。我希望能够将这些数据输入到某种类型的机器学习系统/算法中(可能是贝叶斯分类器?),最终目标是在发生异常情况时通过电子邮件接收通知(异常检测)。例如,Jane Doe 一直只从美国使用Chrome登录。如果她突然从乌克兰使用Firefox登录我的网络服务,我希望将其视为高度“异常”的事件,并触发通知。

我已经在使用CouchDB(具体是Cloudant),我经常在网上看到人们说Cloudant/CouchDB非常适合这种类型的大数据分析。然而,我完全不知道从哪里开始。我没有找到太多关于相对简单的跟踪网络服务异常事件的文档,更不用说使用CouchDB存储之前“学习”的数据了。我看到了几种专门用于进行这种类型数据处理的系统(我想到了PredictionIO),但考虑到CouchDB的本质,我不禁觉得它们有些过头了。

任何见解都将不胜感激。谢谢!


回答:

你假设这是一个非常适合机器学习的问题是正确的,我偏爱scikit-learn.org来解决这类问题。暂时不要担心具体细节 – (couchdb cloudant),让我们先把你的问题调整到可以解决的状态。

如果我们可以假设对于给定用户的登录细节(时间、位置、用户代理等)的变化很小,那么任何大的变化都会触发你的警报。这就是@Robert McGibbon 建议的“异常值”检测发挥作用的地方。

例如,将每个登录细节压缩到一个维度,然后为每个用户创建一个登录细节向量(有很大的改进空间来消化这些登录信息);

  • 登录时间(模24小时)
  • 位置(可能是一个整数位置数组,每个整数代表不同的国家)
  • 用户代理(类似的整数用户代理数组)

依此类推。每次用户登录时,创建这个细节数组并存储它。一旦你积累了一大组测试数据,你可以尝试运行一些机器学习程序。

所以,我们有一个用户和一组对应成功登录的登录数据(一个训练集)。我们现在可以训练一个支持向量机来识别这个用户的登录模式:

from sklearn import svm# 训练数据 [[11.0, 2, 2], [11.3, 2, 2] ... 等]train_data = my_training_data()# 创建并拟合模型clf = svm.OneClassSVM()clf.fit(train_data)

然后,每次发生新的登录事件时,创建一个单一的登录细节数组并将其传递给SVM

if clf.predict(log_in_data) < 0:    fire_alert_event()else:    # 登录与之前的尝试不相似    print('log in ok')

如果SVM发现新数据点与其训练集显著不同,它将触发警报。

我的两分钱。一旦你掌握了一个好的训练集,还有许多其他机器学习技术可能更适合你的任务(它们可能更快、更准确等),但创建你的训练集并训练这些程序将是最大的挑战。

有很多令人兴奋的事情可以尝试!如果你知道有不良的登录尝试,你可以将这些添加到训练集中,通过使用更复杂的SVM来训练良好和不良的登录。不要使用一组不同的“位置”值的数组,你可以找到欧几里得不同的登录并使用它!这听起来很有趣,祝你好运!

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注