感知器算法

引例:判断一个人是否长得帅??? 有如下feature: 身高,体重,三围,颜值,学习成绩(帅的人学习成绩好的少...为何要这么一个扯淡的特征下面会讲解)等等。

假设有一个标准:每一个评分项给予多少分的权重,当所有feature与权重相乘的和大于某一个值的时候,那这个人就是帅哥!!

例子: 180*5+150*3+....>1000 帅哥! 小于则.....

感知器任务:通过已知的实例调节权重,使其能够预测出未知实例的结果。

符号表示:

if       (w1*x1+w2*x2+.......>b) return true

else        return false

由于b是常数,我们可以将b表示为-w0×X0,则可以表示为

if       (w1*x1+w2*x2+.......+w0×x0>0) return true

else        return false

训练方法:

当预测值等于我们期待的结果时: 什么也不用做

但当其小于的时候,说明我们增加的权值小了,赢补上一个正数数 例如所有xi××2的和数学表达推导如下:

w1*x1+a*x1*x1+w2*x2+a*x2*x2+......  住:a为学习速率因子,会影响学习速率

w的更新值相当于wi=wi+a×xi

当其大于时候应改为减号,归结起来应为如下表达式:

wi=wi+a*(y-h(x))*xi

伪代码表示:

while(循环结束条件)  {#此处可设为让样本循环执行多少次
    delta_w[ ]={0};
    for(每个样本){
        for(每个特征 i){
            delta_w[i]+=a*(y-h(x))*wi;
        }
    }
     for(每个特征 i){
            更新w权值
            wi+=dealta_w[i]
        }
}

问题:

1.迭代的停止条件是什么?

答:自己定,可以是某个验证集取得理想结果的时候,或是向上述例子,单纯是循环多少次

2.当训练时候遇到正确样本会发生什么?

答:什么也不发生,当预测结果正确时候,就假定是最好感知器

3.每次迭代调整w或是所有样本迭代完全后调整w(上例)有区别么?

答:区别不大,也许w权值会有所变化,但实际效果没多大区别。

4.某轮迭代后结果一定变好么?

答:不一定,但总体趋势是变好的!

5.a的作用和取值问题

答:作用是控制学习速率,一般选0-1之间,过大不能学习到最优值,过小没有什么变化~~

C语言实现代码如下:

//此为预测函数
//注:此处x0皆为1,至少需要是一个定值
int predict(double x[ ] ,double w[ ],int feature){
    int sum=0;
    for(int i=0;i<feature;i++){
        sum+=w[i]*x[i];
    }
    if(sum>0) return 1;
    else return 0;
}
//此为调参函数
void train(double train_set[ ][ ],int y[ ],double w[ ],int feature_num,int sample_num,int a,int iterator_num){
    while(iterator_num--){
        double* dw=new double[feature_num];
        for(int i=0;i<sample_num;i++){
            for(int j=0;j<feature_num;j++){
                dw[j]+=a*(y-predict(train_set[i]))*train_set[i][j];
            }
        }
    }
    for(int j=0,j<feature_num;j++){
        w[j]+=dw[j];
    }
}

优化方法:找出训练后结果最好的一组w

                    由一个计数器,吧每次最好的记录即可!

缺点:只能解决线性可分问题

通过升维度来解决!但是并不一定能取得很好效果,如增加学习成绩这种特征...

更好的解决方法以后再讨论!

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值