神经网络在日志文件数据中的应用

我一直在关注Andrew NG的Coursera AI课程,特别是关于神经网络的部分,我计划在日志文件数据上实现一个神经网络。

我的日志文件包含以下类型的数据:

<发起请求的机器IP><请求日期><请求时间><服务器上被访问的资源名称><响应代码><服务器提供页面所需时间>

我知道还有其他分类算法可以用于此任务,例如朴素贝叶斯局部异常因子,但我想通过一个实际应用的问题来接触神经网络。

我读过关于神经网络自组织映射的内容,这似乎更适合这种类型的问题,因为日志文件没有任何结构,但这似乎是一个更高级的话题。

我计划不使用自组织映射神经网络,而是通过将数据分组为键值对来从日志文件数据中创建训练数据,其中键是<发起请求的机器IP>,每个键的值是[<服务器上被访问的资源名称>, ><服务器提供页面所需时间>]

基于上述日志文件数据,我打算使用神经网络来:

根据访问的资源对相似的IP行为进行分类。在特定时间段/时刻对行为进行分类,因此在特定时刻哪些IP的行为相似。 

我不知道从哪里开始。我已经实现了一些非常基本的神经网络来执行整数运算,但现在我想实现一个基于我所拥有数据的有用网络。

基于日志数据格式,这是一个好的用例吗?

关于如何开始这项任务,有什么建议吗?

我希望这个问题不是太泛泛而谈,我只是不确定在开始实现神经网络时应该考虑哪些问题。

更新:

我想输出最适合由神经网络生成的数据。

为此,我认为输出基于相似度分数在不同时间段对用户的分类是合适的。

为了生成相似度分数,我可以计算每个IP地址访问资源的次数:

例如:

1.2.3.A,4,3,11.2.3.B,0,1,21.2.3.C,3,7,3

然后生成:

<一天中的小时>,<IP地址X>,<IP地址Y>,<相似度分数>

1,1.2.3.A,1.2.3.B,.31,1.2.3.C,1.2.3.B,.21,1.2.3.B,1.2.3.B,02,1.2.3.D,1.2.3.B,.7642,1.2.3.E,1.2.3.B,.3323,1.2.3.F,1.2.3.B,.631

这样就可以开始关联用户在一天中的行为模式。

这适用于神经网络吗?

我意识到我在寻找一个适合神经网络的问题,但这是一个合适的问题吗?


回答:

基于日志数据格式,这是一个好的用例吗?

你可以使用它作为数据集来训练神经网络以预测未来值或分类它们为标签(或类别)。对于某些类型的神经网络(特别是多层感知器),这取决于你在训练神经网络期间如何组织你的数据集。还有其他情况你可以对样本进行分组(也称为聚类)。

神经网络概念

由于你有按字段(或属性)分隔的历史数据,你可以创建一个神经网络模型来分类预测可能的未来值。

鉴于神经网络是一个由训练步骤定义的数学模型,你必须定义输入和输出集以在训练期间使用来定义这个模型(神经网络)。鉴于此,你的定性值(文本、字符、字母等)必须转换为定量值,例如:

A 你转换为 1B 你转换为 2C 你转换为 3...Z 你转换为 N

之后,你可以将你的数据集按样本排列,以便将其分成输入列表和每个样本的理想输出。例如,假设你有一个数据集,定义房地产市场上的房屋及其价格。你有任务为未来的新房屋定义一个价格(建议),你的训练集的一个样本可能如下所示:

输入:

卧室 ; 浴室 ; 车库 ; 靠近地铁1        ; 1         ; 0      ; 13        ; 2         ; 2      ; 12        ; 2         ; 1      ; 0

理想输出(分别对应每个输入样本)

价格100.000150.000230.000

并使用这些集合来训练神经网络,为提供特征的未来房屋建议一个价格

你的问题

在你的案例中,IPs字段可以转换为定量值。例如:

1.2.3 转换为 11.2.4 转换为 21.2.5 转换为 3

假设你想对相似度分数字段进行分类,那么,你可以使用一天中的小时IP地址XIP地址Y列作为输入集,而输出集只有相似度分数。下图展示了如何处理它(一个简单的前馈神经网络)。

enter image description here

有许多工具可以让你轻松地使用神经网络,你可以使用double值的数组来定义这些集合,对象将为你进行训练。我一直在使用Heaton Research的Encog框架,它支持Java、C#、C++和其他语言。还有另一个称为Accord框架,但它仅适用于.Net。

使用Encog为Java实现前馈神经网络的一个非常简单的示例:

BasicNetwork network = new BasicNetwork();// 在神经网络中添加层network.addLayer(new BasicLayer(null, true, 3));network.addLayer(new BasicLayer(new ActivationTANH(), true, 4));network.addLayer(new BasicLayer(new ActivationTANH(), true, 1));// 完成并随机化神经网络network.getStructure().finalizeStructure();network.reset();// 定义一个随机训练集。// 你可以在这里使用你的double数组来定义MLDataSet training = RandomTrainingFactory.generate(1000, 5, network.getInputCount(), network.getOutputCount(), -1, 1);ResilientPropagation train = new ResilientPropagation(network, training);double error = 0;Integer epochs = 0;//开始训练do {    //训练    train.iteration();    //计算循环的迭代次数    epochs++;    //获取神经网络在训练集上的误差    error = train.getError();// 停止训练的条件} while (epochs < 1000 && error > 0.01);

注意:我没有测试这段代码。

如果你刚开始接触神经网络,我建议你实现你的模型,并使用UCI机器学习库的数据集进行尝试。那里有许多用于分类、回归和聚类问题的数据库,你可以测试你的实现。

Related Posts

L1-L2正则化的不同系数

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

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

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

f1_score metric in lightgbm

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

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

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

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

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

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

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

发表回复

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