Python Logistic 回归分类

Logistic回归可以认为是线性回归的延伸,其作用是对二分类样本进行训练,从而对达到预测新样本分类的目的。
假设有一组已知分类的MxN维样本X,M为样本数,N为特征维度,其相应的已知分类标签为Mx1维矩阵Y。那么Logistic回归的实现思路如下:
(1)用一组权重值W(Nx1)对X的特征进行线性变换,得到变换后的样本X’(Mx1),其目标是使属于不同分类的样本X’存在一个明显的一维边界。
(2)然后再对样本X’进一步做函数变换,从而使处于一维边界两测的值变换到相应的范围之内。
(3)训练过程就是通过改变W尽可能使得到的值位于一维边界两侧,并且与已知分类相符。
(4)对于Logistic回归,就是将原样本的边界变换到x=0这个边界。
下面是Logistic回归的典型代码:



# -*- coding: utf-8 -*-
"""
Created on Wed Nov 09 15:21:48 2016
Logistic回归分类
"""

import numpy  as np


class LogisticRegressionClassifier ( ):
    
     def  __init__ ( self ):
         self._alpha  =  None
    

     #定义一个sigmoid函数
     def _sigmoid ( self , fx ):
         return  1.0/ ( 1 + np. exp (-fx ) )

     #alpha为步长(学习率);maxCycles最大迭代次数
     def _gradDescent ( self , featData , labelData , alpha , maxCycles ):
        dataMat  = np. mat (featData )                       #size: m*n
        labelMat  = np. mat (labelData ). transpose ( )         #size: m*1
        m , n  = np. shape (dataMat )
        weigh  = np. ones ( (n ,  1 ) ) 
         for i  in  range (maxCycles ):
            hx  =  self._sigmoid (dataMat * weigh )
            error  = labelMat - hx        #size:m*1
            weigh  = weigh + alpha * dataMat. transpose ( ) * error #根据误差修改回归系数
         return weigh

     #使用梯度下降方法训练模型,如果使用其它的寻参方法,此处可以做相应修改
     def fit ( self , train_x , train_y , alpha = 0.01 , maxCycles = 100 ):
         return  self._gradDescent (train_x , train_y , alpha , maxCycles )

     #使用学习得到的参数进行分类
     def predict ( self , test_X , test_y , weigh ):
        dataMat  = np. mat (test_X )
        labelMat  = np. mat (test_y ). transpose ( )   #使用transpose()转置
        hx  =  self._sigmoid (dataMat*weigh )   #size:m*1
        m  =  len (hx )
        error  =  0.0
         for i  in  range (m ):
             if  int (hx [i ] )  >  0.5:
                 print  str (i+ 1 )+ '-th sample ' ,  int (labelMat [i ] ) ,  'is classfied as: 1' 
                 if  int (labelMat [i ] )  !=  1:
                    error + =  1.0
                     print  "classify error."
             else:
                 print  str (i+ 1 )+ '-th sample ' ,  int (labelMat [i ] ) ,  'is classfied as: 0' 
                 if  int (labelMat [i ] )  !=  0:
                    error + =  1.0
                     print  "classify error."
        error_rate  = error/m
         print  "error rate is:" ,  "%.4f" %error_rate
         return error_rate
                    
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
分类问题是机器学习中的一种常见问题,可以使用回归算法来解决。Python中的logistic回归是一种二分类算法,可用于将数据分为两个类别。 随机梯度下降是一种常用的优化算法,用于最小化目标函数。在logistic回归中,我们使用的是交叉熵损失函数作为目标函数。随机梯度下降的思想是在每次迭代中仅使用一个样本来更新权重。这与批量梯度下降不同,后者需要用到所有训练样本。 使用Python进行logistic回归分类随机梯度下降,我们需要以下步骤: 1. 导入所需的库,如numpy和matplotlib。 2. 加载训练数据集,将数据划分为特征X和标签y。 3. 初始化模型的权重w和偏差b。 4. 定义sigmoid函数,用于将线性回归输出转换为概率值。 5. 定义损失函数,例如交叉熵损失函数。 6. 定义梯度计算函数,用于计算每个参数的梯度。 7. 选择学习率和迭代次数。 8. 使用随机梯度下降算法更新权重,直到达到最大迭代次数或损失函数收敛。 9. 对测试数据进行预测,计算准确率或其他评价指标。 随机梯度下降算法能够更快地收敛,但可能会牺牲一些精确度。因此,在实际应用中,需要权衡精确度和计算效率。通过调整学习率和迭代次数,可以在准确率和计算效率之间找到一个平衡点。 总结起来,Python中的logistic回归分类随机梯度下降是一种用于解决二分类问题的机器学习算法。它通过使用随机梯度下降算法和交叉熵损失函数来更新权重,以逐步优化模型。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coding的叶子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值