📜  机器学习中的逻辑回归(1)

📅  最后修改于: 2023-12-03 15:10:40.545000             🧑  作者: Mango

机器学习中的逻辑回归

介绍

逻辑回归是一种经典的二分类算法,在机器学习领域广泛使用。其基本思想是通过对已知类别的样本进行学习,建立一个预测函数,用于对未知样本进行分类。

逻辑回归的输出是一个预测概率值,表示样本属于某一类别的概率。通常将预测概率值与一个阈值进行比较,大于阈值则分类为正例,小于阈值则分类为负例。

算法原理

逻辑回归基于一个称为sigmoid函数的数学公式:

$$ g(z) = \dfrac{1}{1 + e^{-z}} $$

sigmoid函数的取值范围在0和1之间,当z趋近于正无穷大时,$g(z)$趋近于1,表示样本属于正例的概率较大;当z趋近于负无穷大时,$g(z)$趋近于0,表示样本属于负例的概率较大。

逻辑回归的预测函数可以表示为:

$$ h_{\theta}(x) = g(\theta^{T}x) $$

其中,$\theta$是模型参数,$x$是样本特征向量。

为了确定模型参数,可以使用最大似然估计法。假设训练集中共有$m$个样本,其中正例有$m_{1}$个,负例有$m-m_{1}$个。设样本的特征向量为$x^{(i)}$,对应的类别标记为$y^{(i)}$,则:

$$ P(y=1|x; \theta) = h_{\theta}(x) $$ $$ P(y=0|x; \theta) = 1 - h_{\theta}(x) $$

将上述两个式子合并起来,可以得到:

$$ P(y|x; \theta) = (h_{\theta}(x))^{y}(1 - h_{\theta}(x))^{1-y} $$

假设所有样本之间是独立同分布的,则似然函数可以表示为:

$$ L(\theta) = \prod_{i=1}^{m} P(y^{(i)}|x^{(i)}; \theta) $$

取对数后求解最大值,可以得到:

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

这个式子就是逻辑回归的损失函数。可以使用梯度下降或其他优化算法,最小化损失函数并求解模型参数。

代码实现

以下是使用Python语言实现逻辑回归的示例代码:

import numpy as np

class LogisticRegression:
    def __init__(self, alpha=0.01, num_iters=1000):
        self.alpha = alpha
        self.num_iters = num_iters
        self.theta = None
        
    def sigmoid(self, z):
        return 1 / (1 + np.exp(-z))
    
    def fit(self, X, y):
        m, n = X.shape
        self.theta = np.zeros((n, 1))
        for i in range(self.num_iters):
            h = self.sigmoid(X @ self.theta)
            grad = X.T @ (h - y) / m
            self.theta -= self.alpha * grad
            
    def predict(self, X):
        return (self.sigmoid(X @ self.theta) >= 0.5).astype(int)

这段代码定义了一个名为LogisticRegression的类,其中主要实现了以下函数:

  • sigmoid(z):实现sigmoid函数。
  • fit(X, y):使用梯度下降算法训练模型,其中X是训练集特征矩阵,y是训练集标签向量。
  • predict(X):使用训练好的模型预测新样本的类别。
总结

逻辑回归是一种简单而强大的分类算法,尤其适用于二分类问题。它的原理相对简单,实现也较为容易。然而,逻辑回归的应用范围也有限,对于复杂的多类分类问题可能需要使用其他算法。