一种简单高效的分类算法——逻辑回归

一、什么是逻辑回归

        逻辑回归是一种统计学习方法,用于解决二分类问题。它基于线性回归的思想,通过对数据进行逻辑变换,将线性函数的输出值映射到[0, 1]范围内,从而得到一个概率值,表示样本属于某个类别的几率。

        在逻辑回归中,被建模的是一个条件概率,即给定特征条件下目标变量属于某一类的概率。逻辑回归使用了名为sigmoid函数(也称为逻辑函数)的非线性函数,将线性回归的输出进行逻辑变换。

        逻辑回归模型假设输入特征与目标变量之间存在着一个线性关系,然后通过最大似然估计等方法,估计模型的参数。具体来说,逻辑回归将线性函数的输出通过sigmoid函数转换为一个概率值,使用了Logistic函数的形式来建模条件概率。

        逻辑回归有很多应用场景,如预测患者是否患有某种疾病、客户是否会购买某个产品、邮件是否为垃圾邮件等。它在实践中广泛应用,因为它简单而有效,计算开销小,容易解释模型的结果,并且能够处理高维特征空间的分类问题。

二、逻辑回归的原理

        在“什么是逻辑回归”中,提到逻辑回归使用了名为sigmoid函数将线性回归的输出进行逻辑变换,Sigmoid函数(也称为逻辑函数)是一个S形的函数,它将任何实数值映射到0和1之间。它的数学表达式为:

\alpha (z)= \frac{1}{1+e{-z}''}

三、逻辑回归实例

1.数据准备

准备一份数据集,里面有一百份数据,每组数据包含两个特征值x1,x2,和一个类别,因为是二分法,所以类别取{0,1}。

x1,x2,Label
-3.346779,6.598435,0
-3.572691,10.751873,1
3.119014,9.896116,1
2.984582,8.020018,1
-0.311464,8.086096,1
2.882368,12.630635,1
-1.635797,13.661248,1
0.235125,13.906467,1
-0.383831,3.915327,0
1.350775,9.359368,1
0.217195,4.458460,0
-2.005690,9.439944,1
0.369123,11.048662,1
-3.454464,9.791264,1
-0.979069,1.703031,0
-1.042825,9.837216,1
-0.510284,10.951037,1
0.103680,11.077644,1
-3.615566,7.425991,0
3.590394,14.098319,1
-3.404072,7.738768,0
1.733468,4.048808,0
-3.863605,9.520848,1
-1.092603,11.738255,1
1.933252,8.377732,1
0.747766,8.403343,1
-2.003271,8.474311,1
-3.190953,0.479887,0
-2.671093,5.489693,0
-2.499644,10.600181,1
-1.359224,3.495547,0
-2.364849,9.153585,1
-2.671431,4.244890,0
1.052500,4.401043,0
1.973760,7.586393,1
1.263615,1.101084,0
-0.816525,12.887392,1
1.154387,8.674547,1
-2.046452,4.684154,0
1.434935,10.604420,1
-3.316157,4.771395,0
3.732391,13.878487,1
0.961582,13.647039,1
0.746453,5.061547,0
2.192805,11.049477,1
0.390464,14.095094,1
3.213523,2.523283,0
-1.006716,8.648946,1
-2.394018,2.628299,0
3.128700,3.316097,0
-1.598424,7.044168,0
0.882809,1.021032,0
0.200507,3.004039,0
1.743365,6.749293,1
-0.559414,12.700948,1
-2.690977,9.072812,1
1.670042,13.975356,1
3.642718,10.628240,1
-0.710466,2.427092,0
3.222439,9.380164,1
-2.679418,2.871734,0
2.900304,8.144637,1
2.985694,13.571508,1
-1.922006,7.246100,0
2.803586,11.104881,1
1.659858,14.593263,1
1.321891,10.106314,1
-1.775677,8.729331,1
3.700826,0.168873,0
0.594825,13.365155,1
-2.567871,7.053873,0
-2.409814,7.832318,0
0.151370,6.556311,1
0.404400,3.817120,0
......

2.导入数据集

def CreateData():
    dataSet = []; labelSet = []
    fr = open(r'文件路径')
    for line in fr.readlines():
        lineArr = line.strip().split(',')
        dataSet.append([1.0, float(lineArr[0]), float(lineArr[1])])
        labelSet.append(int(lineArr[2]))
    return dataSet, labelSet

3.利用梯度上升法求回归系数

import numpy as np

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

def gradAscent(dataMatIn, classLabels):
    dataMatrix = np.mat(dataMatIn)
    labelMat = np.mat(classLabels).transpose()
    m,n = np.shape(dataMatrix)
    alpha = 0.001
    maxCycles = 500
    weights = np.ones((n,1))
    for i in range(maxCycles):
        h = sigmoid(dataMatrix*weights)
        error = (labelMat - h)
        weights = weights + alpha * dataMatrix.transpose() * error
    return weights

初始化后,设定学习率为步长,并设定最大迭代次数。通过多次迭代,利用梯度上升方法来更新权重,以优化回归系数。最终,将所得到的优化后的权重向量返回。

4.画出决策边界

        上面已经解出了一组回归系数,通过Matplotlib画出决策边界。

def sigmoid(z):
    # Sigmoid函数,计算1 / (1 + exp(-z))
    return 1.0 / (1 + np.exp(-z))

def plotBestFit(wei):
    weights = wei.getA()
    dataMat, labelMat = CreateData()
    dataArr = np.array(dataMat)
    n = np.shape(dataArr)[0]
    xcord1 = []
    ycord1 = []
    xcord2 = []
    ycord2 = []
    for i in range(n):
        if int(labelMat[i]) == 1:
            xcord1.append(dataArr[i, 1])
            ycord1.append(dataArr[i, 2])
        else:
            xcord2.append(dataArr[i, 1])
            ycord2.append(dataArr[i, 2])
    # 绘制数据点
    plt.scatter(xcord1, ycord1, s=30, c='red', marker='s')
    plt.scatter(xcord2, ycord2, s=30, c='green')
    x = np.arange(-3.0, 3.0, 0.1)
    y = (-weights[0] - weights[1] * x) / weights[2]
    # 绘制决策边界
    plt.plot(x, y)
    plt.xlabel('X1')
    plt.ylabel('X2')
    plt.show()

结果图

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值