机器学习之逻辑回归


目录

前言

一、逻辑回归是什么?

二、Sigmoid

三、回归系数

四、梯度上升算法

五、代码实战

1.数据导入

2.主要算法

3.效果图

总结


前言

逻辑回归是一种常用的机器学习算法,用于解决分类问题。它的名字可能会让人误解,因为它实际上是一种用于分类而不是回归的算法。在我们现实生活中逻辑回归可以用于疾病预测, 信贷风险评估, 股票市场预测,用户行为分析等等


一、逻辑回归是什么?

逻辑回归是一种广义的线性模型,主要用于二分类问题的预测和分析。它通过将输入特征与一个或多个权重相乘,然后将结果传递给一个逻辑函数(如Sigmoid函数),以预测输入属于某个类别的概率。在训练过程中,逻辑回归会调整权重,使得模型能够更好地预测类别。在本文中用到的是Logistic回归与Sigmoid函数

二、Sigmoid

Sigmoid函数是一个广泛应用于数学、统计学和机器学习领域的函数,它将任意实数映射到(0,1)区间内的一个概率值。Sigmoid函数也被称为逻辑函数,因为它在逻辑回归(Logistic Regression)模型中扮演着核心角色。

公式:

\text{Sigmoid}(x) = \frac{1}{1 + e^{-x}}

在不同坐标尺度下Sigmoid的图像也不相同

如图

   x\in [-60,60]                                      x\in [-6,6]                                           x\in [-1,1]  

       图1                                                               图2                                     图3                                                                 

  1. 由图我们可以看出来图1在x=0时Sigmoid像跃迁函数,图2则较为平滑,图3则为一条直线

  2. 所以为了实现logistic分类器,我们可以在每个特征上乘以一个回归系数,并把这个总和代入Sigmoid,可以得出一个范围在0~1之间的数值,然后根据自己的设计让 数值<0.5归为0类,大于的则为1类。

三、回归系数

由上节我们可以知道·我们需要确定一个好的回归系数让我们预测模型变得准确

我们可以先把Sigmoid的输入记为z

z=w_{1}x_{1}+x_{2}w_{2}+x_{3}w_{3}+\cdots \cdots +x_{n}w_{n}w^{T}x

为了可以找到最佳参数本文中使用的是梯度上升算法

四、梯度上升算法

梯度上升算法(Gradient Ascent Algorithm)是一种优化算法,用于最大化一个函数的取值,通常用于求解最优化问题

把梯度记为\bigtriangledown,则\triangledown f(\mathbf{x}) = \left( \frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2}, \ldots, \frac{\partial f}{\partial x_n} \right)

如图

梯度算法

如图梯度算法每当一个新的点就会重新计算移动方向,从p0开始,计算完该点的梯度,函数会根据这个梯度继续移动到p1,以此迭代直到满足停止条件。从图中p0到p1是函数增长最快的方向,p0 到p1移动量我们称为步长,记为\alpha 然后可以得到w=w+\alpha \bigtriangledown _{w}f(w)
 

五.代码实战

1.数据导入

# 生成随机数据集
np.random.seed(0)
num_samples = 100
mean_class_0 = [2, 2]
mean_class_1 = [-2, -2]
cov = [[1.5, 0.5], [0.5, 1.5]]
x_class_0 = np.random.multivariate_normal(mean_class_0, cov, num_samples)
x_class_1 = np.random.multivariate_normal(mean_class_1, cov, num_samples)
X = np.vstack((x_class_0, x_class_1))
y = np.concatenate((np.zeros(num_samples), np.ones(num_samples)))

2.主要算法

#定义sigmoid
def sigmoid(z):
    z = np.clip(z, -500, 500)
    return 1 / (1 + np.exp(-z))

# 定义梯度上升算法
def gradient_ascent(X, y, learning_rate, num_iterations):
    num_samples, num_features = X.shape
    weights = np.zeros(num_features)

    for _ in range(num_iterations):
        z = np.dot(X, weights)
        h = sigmoid(z)

        # 计算梯度
        gradient = np.dot(X.T, (h - y)) / num_samples
        weights += learning_rate * gradient

    return weights

3.效果图

 

                         原始散点图                                                  分类后

可能是因为使用随机数据集的关系导致分类标签较为混乱,从而导致模型预测准确率较低


总结

由于本次实验数据集是随机生成的,没有现实世界的特定背景。但通过随机生成数据,可以控制数据的属性和标签,以更好地理解模型性能和影响因素。通过本次实验学会逻辑回归,并且学会新的优化算法——梯度上升算法还有sigmoid函数,将两者结合起来实现一个简单的实验

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值