Stanford ML - Support Vector Machines 支持向量机

来源:互联网 发布:斗鱼软件 编辑:程序博客网 时间:2024/05/14 07:17

SVM,感觉很高大上的一个名词,最开始听到的时候还以为是Space Vector Model呢,碰巧那几天看点信息检索的东西;原来是Support Vector Machines。从逻辑回归来推导得出SVM的代价方程为:


其中cost0,cost1如下。可以看出,当满足条件(y = 1 && theta' * x >>0 或者y = 0 && theta' * x << 0)时,SVM的代价方程取值最小 - 只有后面theta那一项。这里C是1/lambda。

SVM是最大间隙分类器,也就是它的决策边界到不同分类的元素距离尽可能大。数学推导就不管了:)

我们用近似性来做特征 - 选定一些基准,计算输入元素与这些基准的近似性。近似性有很多种算法(核),比较常用的是高斯核,如下。当两个元素完全一样的时候,特征值为1,相差越大特征值越小,最终接近于0。


怎么选择基准呢?可以用训练集中所有数据来做基准,这样特征数量n就等于训练集中数据数量m。计算出了theta和特征向量f之后,根据theata' * f 的值可以判断分类。

参数C和sigma对特征方程有很大影响,C大,sigma^2小,会lower bias, higher variance;C小,sigma^2大,会higher bias, lower variance。在应用SVM的时候需要合理的选择这两个参数。现在有很多成熟的SVM软件包,我们可以直接拿来用,只要指定C和相应的核函数即可。常用的是高斯核,如果选用线性核则退化为逻辑回归。用高斯核的时候要注意对不同的特征做均值归一化处理。

什么时候用逻辑回归,什么时候用SVM呢?直接贴图吧。看来神经网络才是真正的高大上啊,怪不得项目里貌似用了不少神经网络的算法。


作业里面选择C和sigma的过程,就是在训练集上训练model,在验证集上预测并计算误差,选择误差最小时的参数。

C_set = [0.01 0.03 0.1 0.3 1 3 10 30];sigma_set = [0.01 0.03 0.1 0.3 1 3 10 30];min_error = intmax;for i = 1:size(C_set, 2)    for j = 1:size(sigma_set, 2)        model= svmTrain(X, y, C_set(i), @(x1, x2) gaussianKernel(x1, x2, sigma_set(j)));         predictions = svmPredict(model, Xval);        pred_error = mean(double(predictions ~= yval));        if (pred_error < min_error)            min_error = pred_error;            C = C_set(i);            sigma = sigma_set(j);    endend


0 0
原创粉丝点击