随机梯度下降感知机Perceptron(C#)学习案例

文章介绍了感知机作为线性分类模型的基本原理,特别是它在高维空间中寻找分类超平面的角色。文中提供的代码示例展示了如何使用随机梯度下降法实现感知机,用于更新权重以最小化损失函数。此外,还提到单个感知机的局限性,即无法解决非线性可分问题,如异或逻辑分类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.思想

感知机(Perceptron)是一种线性分类的模型,针对线性可分的数据,感知机分类结果并不唯一,进寻找其中一种方案。如果推广至高维空间,则为寻找一个分类超平面,其学习过程就是寻找合适的损失函数,并尽可能使损失最小化,属于监督学习算法;

2.代码

      /// <summary>
        /// 随机梯度下降感知机
        /// </summary>
        /// <param name="x">样本矩阵(存在首列1向量)</param>
        /// <param name="y">标签矩阵(列)</param>
        /// <param name="lr">学习率</param>
        /// <param name="iterations">最大迭代次数</param>
        /// <returns></returns>
        public static double[,] PerceptronModel(double[,] x, double[,] y,double lr=1e-2,double iterations=1e4)
        {
            int p = x.GetLength(1);
            int n = x.GetLength(0);
            double[,] beta = new double[p, 1]; 
            //初始化权重矩阵[0,0,…,0]
            int rId = 0;
            for(int t = 0; t < iterations; t++)
            {
            		//随机梯度下降部分
                rId = new Random().Next(n);
                //随机找寻样本数据相应索引
                double[,] currRow = Matrix.VectorGenerate(Matrix.MatrixGetVector(x, rId, true), true);
                //获取随机索引样本数据
                double linePart = Matrix.MultiplyMatrix(currRow, beta)[0, 0];
                //误分类条件:
                //当样本标签yi与分类结果符号不一致,说明判定与结果不符
                //sign(x)={x>0,-1;x=0,0;x<0,-1}
                bool check = -1 * y[rId, 0] * Sign(linePart) >= 0;
                //误分类判断
                if (!check)
                {
                    continue;
                }
                else
                {
                    double[,] lossGrad = Matrix.MultiplyConst(currRow, y[rId, 0]);
                    //损失函数梯度计算
                    lossGrad = Matrix.MultiplyConst(lossGrad, lr);
                    //权重系数=权重系数+学习率*损失函数梯度
                    beta = Matrix.AddMatrix(beta, Matrix.Transpose(lossGrad));
                    //权重系数更新
                }
            }
            return beta;
        }

3.缺点

单个感知机仅能实现与、或、非逻辑分类,无法实现异或。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值