sigmoid分类器的一些性质

对sigmoid分类器进行了进一步实验以帮助自己进行更深的理解,

在A中一共有9个特征,其中只有最后一组具有分类价值(以0为界)

进行了足够多的迭代后,发现依然得到了理想的分类结果。

o =


    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    1.0000    1.0000    1.0000    1.0000    1.0000    1.0000    1.0000


theta =


   -1.9421   -1.7052    3.2767   -4.6341    8.1949    7.2902    6.1837   -2.0975   40.8495

由最后参数的结果可以看出,最后一个属性对应的参数明显比其它参数要大,考虑到学习率alpha的制约,当迭代次数不足时应该会影响结果:

迭代20次

o =


    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    1.0000    1.0000    1.0000    0.0000    1.0000(错误3个)


迭代50次

o =


    0.0000         0    0.0000    0.0000    0.0000    0.0000    0.0000    1.0000    0.0000    1.0000    1.0000    1.0000    0.0000    1.0000(错误1个)


迭代100次


o =


    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    1.0000    1.0000    1.0000    1.0000    1.0000    1.0000    1.0000

theta =


   -1.9424   -1.7337    3.2740   -4.6344    8.1924    7.2881    6.1835   -2.0987   40.8493


theta已经接近了最终值。

结论:sigmoid分类器具有比较好的抗干扰性,这也可以解释为什么用sigmoid单元组建起来的人工神经网络有如此好的健壮性。



令人惊奇的是,使用随机梯度上升算法却没有得到更快的收敛速度,

当使用同样的迭代次数时(100次)随机梯度上升算法仍然出现了错误。

o =
    0.0000    1.0000    0.0000    1.0000    0.0000    0.0000    0.0000    1.0000    1.0000    1.0000    1.0000    1.0000    1.0000    1.0000


迭代200次时才得到了预期效果:

o =
    0.0000    0.0000    0.0000    0.0001    0.0000    0.0000    0.0000    1.0000    1.0000    1.0000    1.0000    1.0000    0.9995    1.0000


下次再试试牛顿方法可以得到什么样的结果。



A = [
    3 4  5 6 1  15 16  120 17 18 118 10 11 13;
    118 120 13 15 85 2  3  18 4  5  6  19 1  8;
    12 13 14 1 2 3 4 8 9 10 11 5 6 7;
    5 6 7 12 13 14 1 2 3 4 8 9 10 11;
    5 6 7 12 1 2 3 4 13 14  8 9 10 11;
    12 8 9 13  4 5 14 1 2 3 6 10 11  7;
    -4 -2 9 1 -5 -1 3 5 -8 -9 -12  11 2 4;
    -8 -2 -5 -1 9 1 -4  3 5 11 2 -9 -12 4;
    -4 -2 -5 -1 -8 -9 -12 9 1 3 5 11 2 4
    ]
Y = [0   0   0  0  0  0  0  1  1  1  1  1  1  1];


theta = [0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1];


b = 0.1;
alpha = 0.05
rand('seed',10)




for i = 1:size(A) - 1
    index = randperm(length(A))%打乱顺序
    for j = 1:length(A)
        x = A(i,index(j))
        A(i,index(j)) = A(i,j)
        A(i,j) = x
    end
end


for j = 1:1:200
    sum = [0]
    sumb = 0
    for k = 1:1:length(A)
        sum(k) = 0
    end
    if(0)%梯度上升
        for i = 1:1:length(A)
            exp_list = b
            for k = 1:1:size(A)
                exp_list = exp_list + theta(k) * A(k,i)
            end
            for k = 1:1:size(A)
                sum(k) = sum(k) + (Y(i) - 1 / (1 + exp(- exp_list))) * A(k,i);
            end
            sumb = sumb + (Y(i) - 1 / (1 + exp(- exp_list)));
        end
    end%注释
    
    if(1)%随机梯度上升
        for i = 1:1:length(A)
            exp_list = b
            for k = 1:1:size(A)
                exp_list = exp_list + theta(k) * A(k,i)
            end
            
            for k = 1:1:size(A)
                sum(k) = (Y(i) - 1 / (1 + exp(- exp_list))) * A(k,i)
            end
            
            for k = 1:1:size(A)
                theta(k) = theta(k) + alpha * sum(k) %随机梯度上升
            end
            sumb = Y(i) - 1 / (1 + exp(- exp_list))
            b = b + alpha * sumb;       
        end
    end
    
    for k = 1:1:size(A)
        sum(k) = (Y(i) - 1 / (1 + exp(- exp_list))) * A(k,i)
    end
    b = b + alpha * sumb;       
    display(theta)    
end
o = [0]
for i = 1:1:length(A)
        exp_list = b
        for k = 1:1:size(A)
            exp_list = exp_list + theta(k) * A(k,i)
        end
        o(i) = 1 / (1 + exp(- exp_list))
end
display(o);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值