📅  最后修改于: 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)
:使用训练好的模型预测新样本的类别。逻辑回归是一种简单而强大的分类算法,尤其适用于二分类问题。它的原理相对简单,实现也较为容易。然而,逻辑回归的应用范围也有限,对于复杂的多类分类问题可能需要使用其他算法。