C# Gradient descent algorithm

//gradient descent algorithm
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace gradient_descent_algorithm
{
    class Program
    {
        /// <summary>
        /// 定义二元函数,容易知道该函数在(0,0)处有全局的最小值,可以用来检验算法是否收敛
        /// </summary>
        /// <param name="var1"></param>
        /// <param name="var2"></param>
        /// <returns></returns>
        private static double function(double var1, double var2)
        {
            double value_fun = var1 * var1 + var2 * var2;
            return value_fun;
        }
        static void Main(string[] args)
        {
            //求偏导数时的delta值
            double delta_x = 0.001;
            double delta_y = 0.001;
            //迭代次数
            double NumIterations = 0;
            //初始值
            double init_x = 4;
            double init_y = 7;
            //学习率
            double rate = 0.002;
            while (NumIterations < 10000) //迭代次数
            {
                double temp1 = function(init_x + delta_x, init_y) - function(init_x,init_y);
                double temp2 = function(init_x, init_y + delta_y) - function(init_x, init_y);
                //分别求关于x和y的偏导数
                double patial_x = temp1 / delta_x;
                double patial_y = temp2 / delta_y;
                //更新初始值
                double new_x = init_x - rate * patial_x;
                double new_y = init_y - rate * patial_y;

                Console.WriteLine("新的X值为:{0},新的Y值为:{1},当前最小值为:{2}", new_x,new_y,function(new_x,new_y));
                
                init_x = new_x;
                init_y = new_y;
                NumIterations++;
            } 
            double result = function(init_x,init_y);
            Console.WriteLine("\r\n");
            Console.WriteLine("迭代结果为:{0}", result);
            Console.ReadKey();
        }
        
        
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值