当然现在SVM,我调了一天调出来了(实际重写了2天)
为啥我要弄呢
JackyMark0w0/SpringAlpha: An open-source lightweight antivirus engine
然后看这里,不要翻其他代码
SpringAlpha/SVMScan/SVMScan.cpp at main · JackyMark0w0/SpringAlpha
这个是我14岁写的
因为我没python环境,C#太大了,而且也不喜欢老是用别人的库,本来就是定制化服务,C++实现汇集一堆库难弄
我用了visual studio 6年都没用明白
结果写出一坨答辩(请不要纳入到自制杀毒引擎里,这个东西bug逆天的多,后来成功的代码和那个2年前的18马的东西比对下来,2年前的16个逆天bug)
想想PYAS在2024年是咋样的,当然2025-2026年史诗级加强,但是是静态扫描方面,不是动态
当然还是样式机,也只能达到算法原型
但还是训练不了大样本,nxn的核矩阵全部存在内存里,
训练集只有 8 个样本没问题,但工业级数据通常是几万甚至百万级,我这种写法会直接把内存撑爆。
哈哈
已经纳入我的Vortexiv神经网络算法库了(还有一长段路要走)
偏值b的话我是b1 = b - Ei - yi*(ai_new - ai_old)*Kii - yj*(aj_new - aj_old)*Kij
然后用的是高斯Kernel
K(x1, x2) = exp(-γ * x1 - x2²)
通过遍历维度累加平方差后取指数,γ 最终固定为 8
训练过程
首先呢数据要归一化
使用对训练数据拟合(计算 min/max)并转换,得到scaled_data
Note:归一化可避免特征尺度差异影响核函数计算,并提升数值稳定性,所以我采用
第二预计算核矩阵
在归一化后的数据上计算所有样本间的核矩阵K[n][n](n 为样本数)
因样本量很小(8 个),预计算可加速后续迭代
接下来是SMO
首先初始化
alphas全部置0
b = 0
误差缓存为E = f(x_i) - y_i
初始为f(x)=0
把0带入得E = -y_i
外层循环的话每轮遍历所有样本,寻找违反 KKT 的样本作为第一个变量i
接下来定义violate
KKT 违反判定
若 代码登录后可见 且 代码登录后可见,则样本被错误分类且 α 可增加 则违反
若 代码登录后可见 且 代码登录后可见,则样本被正确分类但 α 可减小 则违反
满足其一则选中该样本
…
嘴巴要说烂了
反正搞完后要构建模型提取所有 代码登录后可见 的样本作为支持向量,存储 α、原始特征和归一化特征,并保存归一化参数
好的预测与评估
首先利用模型中的 min/max 对测试样本进行与训练相同的归一化,其次计算决策函数值,接下来仅遍历支持向量,
预测部分若f(x) >= 0 判为正类 (+1),否则为负类 (-1)
最后计算整个数据集上的准确率(百分比)
时间复杂度 O(n²)
但是是原理机,绝对不能用于实战,所以我最难的路走通了,接下来就是细节优化了
代码登录后可见
网安里[]被我用习惯了
图:

夯爆了
总结:反正被我纳入我的Vortexiv AI算法库了