返回

逻辑回归:从推导到numpy实现,揭开机器学习的奥秘

人工智能

逻辑回归:直观理解、numpy实现和实战应用

理解逻辑回归

逻辑回归是一种强大的分类算法,广泛应用于机器学习领域。它通过将线性回归输出值传递给sigmoid函数,将预测值转化为0到1之间的概率,从而实现分类。

推导过程

逻辑回归的核心在于Sigmoid函数:

h(x) = sigmoid(wx + b)

其中,x是输入向量,w是权重向量,b是偏置项。Sigmoid函数将值压缩到0到1之间,代表数据属于目标类的概率。

为了找到最佳的w和b,需要最小化代价函数,例如平方误差函数或交叉熵损失函数。可以使用梯度下降法或共轭梯度法来优化代价函数。

numpy实现

使用Python的NumPy库,我们可以实现逻辑回归算法:

import numpy as np

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

def logistic_regression(x, w, b):
    return sigmoid(np.dot(x, w) + b)

def cost_function(y, h):
    return -np.sum(y * np.log(h) + (1 - y) * np.log(1 - h))

def gradient_descent(x, y, w, b, alpha, num_iters):
    for i in range(num_iters):
        h = logistic_regression(x, w, b)
        gradient_w = np.dot(x.T, (h - y))
        gradient_b = np.sum(h - y)
        w = w - alpha * gradient_w
        b = b - alpha * gradient_b
    return w, b

实战应用

加载鸢尾花数据集,将其分为训练集和测试集。初始化w和b,然后使用梯度下降优化。最后,使用测试集评估模型性能:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

data = load_iris()
X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2)

w = np.zeros(X_train.shape[1])
b = 0

w, b = gradient_descent(X_train, y_train, w, b, alpha=0.01, num_iters=1000)

y_pred = logistic_regression(X_test, w, b)
accuracy = np.mean(y_pred == y_test)
print("Accuracy:", accuracy)

常见问题解答

  1. 逻辑回归适合处理什么类型的分类问题?
    答:二分类问题,例如垃圾邮件检测或医疗诊断。

  2. 如何选择最佳的学习率(alpha)?
    答:通过交叉验证或网格搜索来找到在训练集和验证集上性能最佳的学习率。

  3. Sigmoid函数的目的是什么?
    答:将线性回归输出值限制在0到1之间,代表属于目标类的概率。

  4. 如何处理数据不平衡问题?
    答:使用过采样、欠采样或阈值调整等技术。

  5. 逻辑回归与其他分类算法(如决策树)相比如何?
    答:逻辑回归易于解释、可伸缩且适合处理线性可分的数据。决策树更复杂,但更适合处理非线性可分的数据。