Logistic回归

一、什么是回归

        现有一些数据点,我们用 一条直线对这些点进行拟合,该线称为最佳拟合直线,这个拟合过程就称作回归。利用Logistic 回归进行分类的主要思想是:根据现有数据对分类边界线建立回归公式,以此进行分类。这里的 “回归”一词源于最佳拟合,表示要找到最佳拟合参数集。 训练分类器时的做法就是寻找最佳拟合参数,使用的是最优化算法。

logistic回归:Logistic回归是一种监督学习算法,适用于解决二分类问题。其基本思想是通过sigmoid函数将输入特征映射到[0, 1]的范围,表示事件发生的概率。

二、Logistic回归的步骤

        1.收集数据:收集包含特征(输入)和标签(输出)的数据集。对于二分类问题,标签通常是0或1。

        2.准备数据:

                ·对数据进行清理,处理缺失值和异常值。

                ·若有必要,对特征进行标准化或归一化,确保他们在相同尺度上

        3.选择模型:选择Logistic回归作为模型。

        4.定义假设函数:Logistic回归的假设函数使用sigmoid函数将线性组合的特征映射到[0, 1]的范围。

        5.定义代价函数:用于衡量模型预测与实际标签之间的差异。对数似然代价函数是Logistic回归常用的代价函数。

        6.最小化代价函数:使用梯度下降或者其他优化算法最小化代价函数,更新参数。

        7.训练模型

        8.做出预测:使用训练好的参数对新的数据进行预测。

三、sigmoid函数

Sigmoid函数,也称为logistic函数,具有如下的数学表达式:

                        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \sigma(z)=\frac{1}{1+e^{-z}}

其中,z 是输入的线性组合,即 =z=θTx,θ 是参数向量,x 是特征向量。

1.Sigmoid函数在Logistic回归中的作用

        在Logistic回归中,Sigmoid函数的作用是将线性组合的特征映射到[0, 1]的范围,表示事件发生的概率。

Logistic回归的假设函数可以表达为:

                                        h_{\theta }(x)=\frac{1}{1+e^{-\theta}Tx} 

        hθ​(x) 表示预测的概率,θ 是参数向量,x 是特征向量。如果hθ​(x) 大于等于0.5,我们预测事件发生;如果小于0.5,则预测事件不发生。 

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

2.为什么选择Sigmoid函数?

        Sigmoid函数具有良好的性质,使其成为Logistic回归中的理想选择。其将输入映射到0和1之间的范围,同时在导数的计算中也表现得相对简单,有助于模型的训练和收敛。

四、极大似然估计

1.极大似然估计与Logistic回归的关系

        Logistic回归中,我们通常使用对数似然代价函数来衡量模型的性能。对于二分类问题,似然函数被表达为观察到的数据在给定模型下的概率。极大似然估计的目标是找到一组参数,使得这一概率最大化。具体来说,我们使用对数似然函数,并通过梯度下降等优化算法来估计最优参数。

2.梯度下降 

        梯度下降是一种迭代优化算法,用于最小化一个函数,通过沿着函数梯度的反方向迭代更新参数,直至找到函数的最小值。在Logistic回归中,我们的目标是最小化代价函数,即对数似然代价函数。

# 梯度下降算法
def gradient_descent(X, y, theta, learning_rate, iterations):
    m = len(y)
    cost_history = np.zeros((iterations, 1))

    for i in range(iterations):
        theta = theta - (learning_rate/m) * (X.T @ (sigmoid(X @ theta) - y))
        cost_history[i] = compute_cost(X, y, theta)

    return theta, cost_history

3.Logistic回归中的代价函数

  Logistic回归中的对数似然代价函数为:

        ​​​​​​​        ​​​​​​​        J(\theta )=\frac{-1}{m}\sum_{i=1}^{m}[y^{(i)}log(h_{\theta }(x^{i}))+(1-y)^{(i)}log(1-h_{\theta }(x^{(i)}))]

其中 m 是样本数量, y(i) 是第 i 个样本的实际标签, hθ​(x(i)) 是Logistic回归的假设函数。 

# 代价函数
def compute_cost(X, y, theta):
    m = len(y)
    h = sigmoid(X @ theta)
    cost = (1/m) * (-y.T @ np.log(h) - (1 - y).T @ np.log(1 - h))
    return cost

 

五、实例:信用卡违约预测

        在信用卡领域,银行和金融机构经常需要评估客户的信用风险,以决定是否批准其申请或提供额度。Logistic回归可以用来预测客户是否会违约,未能按时偿还信用卡债务。

1.生成示例数据

np.random.seed(42)
# 特征:收入、信用分数
X = np.random.rand(100, 2) * 10
# 标签:1表示违约,0表示未违约
y = (X[:, 0] + X[:, 1] > 10).astype(int).reshape(-1, 1)

# 在特征矩阵中添加一列偏置项
X_bias = np.c_[np.ones((X.shape[0], 1)), X]

2. 梯度下降与代价函数、Sigmoid函数和预测函数

# 代价函数
def compute_cost(X, y, theta):
    m = len(y)
    h = sigmoid(X @ theta)
    cost = (1/m) * (-y.T @ np.log(h) - (1 - y).T @ np.log(1 - h))
    return cost

# 梯度下降算法
def gradient_descent(X, y, theta, learning_rate, iterations):
    m = len(y)
    cost_history = np.zeros((iterations, 1))

    for i in range(iterations):
        theta = theta - (learning_rate/m) * (X.T @ (sigmoid(X @ theta) - y))
        cost_history[i] = compute_cost(X, y, theta)

    return theta, cost_history

# 预测函数
def predict(X, theta, threshold=0.5):
    probabilities = sigmoid(X @ theta)
    return (probabilities >= threshold).astype(int)

3. 初始化模型参数并调用梯度下降算法训练模型

# 初始化参数向量
theta_initial = np.zeros((X_bias.shape[1], 1))

# 设置学习率和迭代次数
learning_rate = 0.01
iterations = 10000

# 运行梯度下降算法
theta_final, cost_history = gradient_descent(X_bias, y, theta_initial, learning_rate, iterations)

4.输出并进行预测

# 输出最终参数
print("Final Parameters:")
print(theta_final)

# 预测
predictions = predict(X_bias, theta_final)

5.绘制决策边界

plt.scatter(X[:, 0], X[:, 1], c=y.flatten(), cmap=plt.cm.Paired)
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()

xx, yy = np.meshgrid(np.linspace(xlim[0], xlim[1], 100),
                     np.linspace(ylim[0], ylim[1], 100))
Z = sigmoid(np.c_[np.ones((xx.ravel().shape[0], 1)), xx.ravel(), yy.ravel()] @ theta_final)

Z = Z.reshape(xx.shape)
plt.contour(xx, yy, Z, levels=[0.5], linewidths=2, colors='red')
plt.title("Logistic Regression Decision Boundary")
plt.xlabel("Income")
plt.ylabel("Credit Score")
plt.show()

6.结果

六、总结

Logistic回归的优缺点:

·优点:计算代价不高,易于理解和实现。

·缺点:容易欠拟合,分类精度可能不高。

        Logistic回归作为机器学习领域中的经典算法之一,特别适用于处理二分类问题,通过了解其基本原理和与极大似然估计的关系,我们可以更深入地理解其应用。

参阅:

logistic回归详解_logistics回归函数-CSDN博客

 

机器学习 —— Logistic回归_使用logistic回归对数字6进行识别,分别对训练集与测试集,-CSDN博客

  • 23
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值