梯度下降法实例


梯度下降法 不懂的可以见斯坦福大学的公开课 :机器学习 第二课。 

现有一个方程:y=1+2x

给一个训练样本    x,y= {0,1},{1,3},{2,5},{3,7},{4,9},{5,11},{6,13},{7,15} 

要拟合出θ0,θ1  即y=θ0*x0+θ1 *x1;

根据课程:(训练样本中没有x0=1,初始化的时候补上) 初始步长ε=0.006555代码中用a表示,θ0,θ1都为0

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public  class  Test1 {
     static  float  a= 0 .006555f; //步长
     static  float  A[][]={ //初始化矩阵
         {1f,0f,1f},{1f,1f,3f},{1f,2f,5f},{1f,3f,7f},{1f,4f,9f},{1f,5f,11f},{1f,6f,13f},{1f,7f,15f} 
     };
     static  float  B[]={0f,0f}; //初始化参数
     public  static  void  main(String[] args) {
         
         int  n= 0 ;
         float  g1,g2;
         while (n< 1000 ){
             g1=T( 0 );
             g2=T( 1 );;
             if ((Math.abs(g1)< 0.000001 )&&(Math.abs(g2)< 0.000001 )){
                 break ;
             }
             //更新参数
             B[ 0 ]-=g1;
             B[ 1 ]-=g2;
             System.out.println(B[ 0 ]+ "," +B[ 1 ]);
             n++;System.out.println( "n:" +n);
         }
     }
     static  float  T( int  s){
         float  sum= 0 ;
         for ( int  i= 0 ;i<A.length;i++){
             sum+=(B[ 0 ]*A[i][ 0 ]+B[ 1 ]*A[i][ 1 ]-A[i][ 2 ])*A[i][s];
         }
         return  sum*a;
     }
}

        

0.9999359,2.000013经过597步计算,拟合出θ0,θ1分别为:


   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值