标签、弱标签与真值

用 Python 设计机器学习工作流

Dr. Chris Anagnostopoulos

Honorary Associate Professor

标签并非总是完美

真值的层级:

  • 真实标签(Ground truth)
    • 电脑崩溃并弹出勒索信息
  • 人工专家标注
    • 分析师检查日志并识别未授权行为
  • 启发式标注
    • 极短时间内有过多端口收到流量
用 Python 设计机器学习工作流

标签并非总是完美

无噪声或"强"标签:

  • 真实标签(Ground truth)
  • 人工专家标注

有噪声或"弱"标签:

  • 启发式标注

特征工程:

  • 启发式所用特征
用 Python 设计机器学习工作流

特征与启发式

每个被感染主机访问的唯一端口平均数:

np.mean(X[y]['unique_ports'])
15.11

不考虑标签的每台主机唯一端口平均数:

np.mean(X['unique_ports'])
11.23
用 Python 设计机器学习工作流

从特征到标签

将特征转为标注启发式:

X_train, X_test, y_train, y_test = train_test_split(X, y)
y_weak_train = X_train['unique_ports'] > 15

hist_cropped.png

用 Python 设计机器学习工作流

从特征到标签

两份特征矩阵上下堆叠。其一由领域专家标注,另一份用启发式标注。

X_train_aug = pd.concat([X_train, X_train])
y_train_aug = pd.concat([pd.Series(y_train), pd.Series(y_weak_train)])
用 Python 设计机器学习工作流

数据与上一页相同方式堆叠,但原始标签权重为 1.0,由启发式生成的标签权重为 0.5。

weights = [1.0]*len(y_train) + [0.1]*len(y_weak_train)
用 Python 设计机器学习工作流

仅使用真值的准确率:

0.91

真值与弱标签(无权重):

accuracy_score(y_test, clf.fit(X_train_aug, y_train_aug).predict(X_test))
0.93

加入权重:

accuracy_score(y_test, clf.fit(X_train_aug, y_train_aug, sample_weight=weights).predict(X_test))
0.95
用 Python 设计机器学习工作流

标签不必完美!

用 Python 设计机器学习工作流

Preparing Video For Download...