使用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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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