logistic regression逻辑回归算法介绍
逻辑回归(Logistic Regression)是一种广泛使用的分类算法,特别适用于二分类问题。尽管它的名字中包含“回归”二字,但实际上它是一种分类算法,因为它预测的是概率,并将这些概率转换为二分类(通常是0和1)的类别。
基本概念
逻辑回归的核心在于使用逻辑函数(通常是sigmoid函数)将线性回归模型的输出(即一个连续的实数值)映射到(0,1)区间,这个区间可以被解释为属于某一类别的概率。
Sigmoid函数
Sigmoid函数的公式为:
σ
(
z
)
=
1
1
+
e
−
z
σ(z)=\frac{1}{{1+e}^{−z}}
σ(z)=1+e−z1
其中,𝑧是线性回归模型的输出(即
z
=
θ
T
x
z=θ^Tx
z=θTx,其中 𝜃 是模型的参数,𝑥 是输入特征)。Sigmoid函数的输出范围在0到1之间,因此可以解释为属于正类的概率。
逻辑回归的决策边界
逻辑回归的决策边界是由参数 𝜃 决定的。具体来说,当 σ ( θ T x ) = 0.5 σ(θ^Tx)=0.5 σ(θTx)=0.5 时,对应的 𝑥值的集合构成了决策边界。这是因为,在Sigmoid函数中,输出为0.5的点正好位于两类概率相等的点上,即决策边界。
损失函数
逻辑回归使用对数损失(log loss)作为损失函数,它衡量了模型预测的概率分布与真实标签之间的差异。对数损失函数的公式为:
L ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) l o g ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) ] L(θ)=−\frac{1}{m}\sum_{i=1}^{m}[y^{(i)}log(h_θ(x^{(i)}))+(1−y^{(i)})log(1−h_θ(x^{(i)}))] L(θ)=−m1i=1∑m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]
其中,𝑚 是样本数量, y ( i ) y^{(i)} y(i) 是第 𝑖个样本的真实标签, h θ ( x ( i ) ) h_θ(x^{(i)}) hθ(x(i)) 是模型预测的第 𝑖个样本属于正类的概率。
参数估计
逻辑回归使用梯度下降(或其他优化算法)来最小化损失函数,从而估计出模型的参数 𝜃。梯度下降通过迭代地更新参数来减小损失函数的值,直到满足停止条件为止。
应用场景
逻辑回归由于其简单性和高效性,被广泛应用于各种领域,如信用评分、垃圾邮件检测、疾病预测等。然而,当特征之间的关系非常复杂时,逻辑回归的性能可能会受到限制,这时可能需要考虑更复杂的模型,如神经网络或决策树。
logistic regression逻辑回归算法python实现样例
逻辑回归是一种用于二分类问题的机器学习算法,可用于预测一个样本属于两个类别中的哪一个。下面是用Python实现逻辑回归的代码:
import numpy as np
class LogisticRegression:
def __init__(self, learning_rate=0.01, num_iterations=1000):
self.learning_rate = learning_rate
self.num_iterations = num_iterations
self.weights = None
self.bias = None
def fit(self, X, y):
num_samples, num_features = X.shape
# 初始化权重和偏置
self.weights = np.zeros(num_features)
self.bias = 0
# 梯度下降算法
for _ in range(self.num_iterations):
linear_model = np.dot(X, self.weights) + self.bias
y_pred = self._sigmoid(linear_model)
# 更新权重和偏置
dw = (1 / num_samples) * np.dot(X.T, (y_pred - y))
db = (1 / num_samples) * np.sum(y_pred - y)
self.weights -= self.learning_rate * dw
self.bias -= self.learning_rate * db
def predict(self, X):
linear_model = np.dot(X, self.weights) + self.bias
y_pred = self._sigmoid(linear_model)
y_pred_class = [1 if i > 0.5 else 0 for i in y_pred]
return y_pred_class
def _sigmoid(self, x):
return 1 / (1 + np.exp(-x))
使用逻辑回归模型进行分类的步骤如下:
- 创建一个
LogisticRegression
对象,并设置学习率和迭代次数。 - 使用
fit
方法拟合模型,传入训练数据和标签。 - 使用
predict
方法对新的数据进行预测,返回预测结果。