-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathKitNET.h
More file actions
74 lines (66 loc) · 2.44 KB
/
Copy pathKitNET.h
File metadata and controls
74 lines (66 loc) · 2.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#pragma once
#include "corClust.h"
#include "dA.h"
#include <cstdio>
#include <memory>
#include <stdexcept>
#include <vector>
class KitNET {
private:
// 参数
size_t AD_grace_period; // 产生异常分数前网络将学习的实例数
size_t FM_grace_period; // 用于学习特征映射的实例数
size_t m; // 集成层中任何自动编码器的最大大小
double lr; // 学习率
double hr; // 隐藏比例
size_t n; // 特征数量
// 变量
size_t n_trained; // 到目前为止的训练实例数
size_t n_executed; // 到目前为止的执行实例数
std::vector<std::vector<size_t>> v; // 特征映射
std::unique_ptr<corClust> FM; // 特征映射过程的增量特征聚类
std::vector<std::unique_ptr<dA>> ensembleLayer; // 集成层自动编码器
std::unique_ptr<dA> outputLayer; // 输出层自动编码器
/**
* @brief 创建异常检测器
*/
void __createAD__();
public:
/**
* @brief 构造函数
* @param n 输入数据集中的特征数量
* @param max_autoencoder_size 集成层中任何自动编码器的最大大小
* @param FM_grace_period
* 用于学习特征映射的实例数,如果为0,则等于AD_grace_period
* @param AD_grace_period 产生异常分数前网络将学习的实例数
* @param learning_rate 所有自动编码器的默认随机梯度下降学习率
* @param hidden_ratio
* 隐藏层与可见层神经元的默认比率,例如0.75将导致隐藏层大约25%的压缩
* @param feature_map
* 可选提供特征映射而不是学习它,映射必须是一个向量,其中第i个条目包含要分配给集成中第i个自动编码器的特征索引列表
*/
KitNET(size_t n, size_t max_autoencoder_size = 10,
size_t FM_grace_period = 0, size_t AD_grace_period = 10000,
double learning_rate = 0.1, double hidden_ratio = 0.75,
const std::vector<std::vector<size_t>> *feature_map = nullptr);
/**
* @brief 处理输入向量
* 如果FM_grace_period+AD_grace_period已过,则此函数在x上执行KitNET。否则,此函数从x学习。
* @param x 长度为n的输入向量
* @return 如果在执行模式下,返回异常分数;否则返回0.0
* @note KitNET会自动对所有属性执行0-1归一化
*/
double process(const std::vector<double> &x);
/**
* @brief 强制KitNET在x上训练
* @param x 输入向量
* @return 训练期间x的异常分数(不用于警报)
*/
double train(const std::vector<double> &x);
/**
* @brief 强制KitNET在x上执行
* @param x 输入向量
* @return 异常分数
*/
double execute(const std::vector<double> &x);
};