12.4 效果验证

效果验证阶段,使用测试数据集进行验证,遍历测试数据集中的每一条数据,生成特征向量,限制在nb_max_episode_steps_test步以内进行尝试免杀,如果免杀成功则计数并进入下一次循环。

最后统计训练数据集成功免杀的个数。整个过程中免杀动作的选择使用贪婪算法,即使用Q函数对应的最大值的动作执行,代码如下:


success=0
sum=0
shp = (1,) + tuple(model.input_shape[1:])
for sample in samples_test:
    sum+=1
    for _ in range(nb_max_episode_steps_test):
        featurevectors = features_extract.extract(sample)
        if spam_checker.check_spam(featurevectors)<1.0:
            success+=1
            print "Bypass spam rule!:"
            print sample
            break
        f = features_extract.extract(sample).reshape(shp)
        act_values = model.predict(f)
        action=np.argmax(act_values[0])
        sample=spam_manipulatorer.modify(sample,ACTION_LOOKUP[action])
print "Sum:{} Success:{}".format(sum,success)

运行程序,在nb_max_episode_steps_test取3的情况下,即只有3次机会进行免杀动作,100个测试样本里面有16个成功免杀,效果相当不错:


Sum:100 Success:16