本关任务:学习逻辑回归算法的原理并用代码实现逻辑回归算法。
时间: 2025-04-28 18:27:27 AIGC 浏览: 26
### 逻辑回归算法原理
逻辑回归是一种广泛应用于二元分类问题的统计方法。尽管名字中有“回归”,但实际上它主要用于预测事件发生的概率,即属于某一类别的可能性。对于给定的数据集 \(X\) 和标签 \(Y\),其中 \(Y \in {0,1}\),逻辑回归模型通过计算输入特征向量对应的输出值落在两个类别上的条件概率来进行分类。
#### Sigmoid 函数
为了将连续型数值转换成离散的结果(通常是两类),引入了Sigmoid函数作为激活函数:
\[ g(z)=\frac{1}{1+e^{-z}} \]
此函数会把任何实数映射至区间 (0, 1) 内,在实际应用中通常设定阈值为0.5来决定最终归属哪一类[^3]。
#### 损失函数与优化过程
在构建逻辑回归模型时,采用的是最大似然估计法来寻找最优参数θ。具体而言就是最小化负对数似然成本函数J(θ):
\[ J(\theta )=-\left[\sum _{{i=1}}^{m}y_{{(i)}}log(h_\theta(x_{(i)}))+(1-y_{{(i)}})\log(1-h_\theta(x_{(i)}))\right]\]
这里\(h_\theta(x)\)表示样本x被正确分类的概率;而整个表达式的目的是衡量当前假设下的平均误差程度。为了找到使上述目标达到极小化的权重系数w,常用的方法有批量梯度下降(Batch Gradient Descent),随机梯度下降(Stochastic Gradient Descent)以及变种形式如Adam optimizer等[^4]。
### Python 实现逻辑回归
下面给出一段简单的Python代码片段用于演示如何利用NumPy库手动编写逻辑回归训练流程:
```python
import numpy as np
def sigmoid(z):
return 1 / (1 + np.exp(-z))
class LogisticRegression:
def __init__(self, lr=0.01, num_iter=100000, fit_intercept=True, verbose=False):
self.lr = lr
self.num_iter = num_iter
self.fit_intercept = fit_intercept
def add_intercept(self, X):
intercept = np.ones((X.shape[0], 1))
return np.concatenate((intercept, X), axis=1)
def loss(self, h, y):
return (-y * np.log(h) - (1 - y) * np.log(1 - h)).mean()
def fit(self, X, y):
if self.fit_intercept:
X = self.add_intercept(X)
# weights initialization
self.theta = np.zeros(X.shape[1])
for i in range(self.num_iter):
z = np.dot(X, self.theta)
h = sigmoid(z)
gradient = np.dot(X.T, (h - y)) / y.size
self.theta -= self.lr * gradient
if(i % 10000 == 0 and self.verbose):
print(f'loss: {self.loss(h,y)} \t')
def predict_prob(self, X):
if self.fit_intercept:
X = self.add_intercept(X)
return sigmoid(np.dot(X, self.theta))
def predict(self, X, threshold=0.5):
return self.predict_prob(X) >= threshold
```
这段程序定义了一个名为`LogisticRegression` 的类,实现了基本的功能包括初始化、添加偏置项、计算损失值、拟合数据集以及做出预测。值得注意的是,这里的实现方式较为基础,并未涉及到更复杂的技巧比如正则化处理或者高效矩阵运算加速技术[^2]。
阅读全文
相关推荐



















