机器学习理论推导——梯度下降和逻辑回归

本文介绍了机器学习中的梯度下降法,用于求解线性模型的参数。通过迭代最小化代价函数,找到最优解。接着讲解了逻辑回归的概念,使用sigmoid函数将连续值转换为0-1概率,适用于分类问题。最后,通过最大似然估计和梯度下降法求解逻辑回归模型的参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 下面介绍梯度下降法:

假设一个线性模型:


为了便于描述,定义:


我们需要选择合适的参数θ0和θ1,使得h(x)和样本中的y尽可能接近。

统计学中,利用最小二乘法可以得到两个参数的解析解:


但是我们将使用计算机科学的常用思想:迭代来求出这两个值,因为在这里模型的简单使得我们非常容易地计算出解析解。实际中我们的模型可能非常复杂,无法求出解析解,因此使用迭代思想是一种通用的解法。

我们的目标和最小二乘法一致,求出代价函数(cost function):


的最小值,即:


迭代的具体操作是梯度下降法,就是循环调用

### 关于机器学习公式推导及其Python代码实现 #### TensorFlow中的线性回归模型 在TensorFlow中,可以通过定义损失函数并利用梯度下降优化算法来实现简单的线性回归模型。对于给定的数据集$(X, Y)$,其中$X$代表输入特征向量而$Y$为目标标签值,则最小化均方误差(MSE)作为目标函数: $$MSE = \frac{1}{n}\sum_{i=1}^{n}(y_i-\hat y)^2=\frac{1}{n}\|Y-W^TX-b\|^2_2$$ 这里$n$表示样本数量;$\hat y=W^Tx+b$是预测输出;$W,b$分别是权重矩阵偏置项。 为了找到最优参数组合使得上述表达式达到极小值点,采用随机梯度下降法(SGD)[^1]更新规则如下所示: ```python import tensorflow as tf # 定义占位符用于接收训练数据 x_placeholder = tf.placeholder(tf.float32, shape=[None]) y_placeholder = tf.placeholder(tf.float32, shape=[None]) # 初始化变量w(权值), b(截距) weight_variable = tf.Variable([0.], dtype=tf.float32) bias_variable = tf.Variable([0.], dtype=tf.float32) # 构建预测模型 prediction_operation = weight_variable * x_placeholder + bias_variable # 计算平方差损失 loss_function = tf.reduce_mean((prediction_operation - y_placeholder)**2) # 使用AdamOptimizer执行反向传播调整参数 optimizer_operator = tf.train.AdamOptimizer().minimize(loss_function) with tf.Session() as session: # 执行初始化操作 init_op = tf.global_variables_initializer() session.run(init_op) for epoch_index in range(training_epochs): _, current_loss_value = session.run( [optimizer_operator, loss_function], feed_dict={x_placeholder: training_data_x, y_placeholder: training_data_y}) ``` 此段程序展示了如何基于TensorFlow框架搭建一个基础版的线性拟合器,并通过迭代方式不断逼近真实解的过程。 #### PyTorch下的逻辑斯蒂回归案例研究 另一方面,在PyTorch环境下也可以轻松完成类似的任务——比如构建二分类问题解决方案之一即Logistic Regression Model。其核心思想在于引入Sigmoid激活函数将实数值映射至概率空间内: $$P(y|x)=\sigma(\beta ^ Tx+\alpha)=\frac {e^{\beta ^ T x}}{1+ e^ {\beta ^ T x }} $$ 此处$x,\beta $分别对应着实例属性描述子与待估系数列向量;$\alpha$则为阈值常数项。 下面给出一段完整的源码片段用来说明具体做法: ```python import torch.nn.functional as F from torch import nn class LogisticRegressionModel(nn.Module): def __init__(self, input_dim): super().__init__() self.linear_layer = nn.Linear(input_dim, 1) def forward(self, batch_features): logits_output = self.linear_layer(batch_features).squeeze(-1) probabilities_predictions = F.sigmoid(logits_output) return probabilities_predictions if __name__ == '__main__': model_instance = LogisticRegressionModel(feature_dimensions) criterion_objective = nn.BCELoss() optimizer_handler = optim.SGD(model.parameters(), lr=learning_rate) for iteration_counter in range(num_iterations): predicted_probs = model(train_inputs) error_measure = criterion_objective(predicted_probs, target_labels) optimizer.zero_grad() error_measure.backward() optimizer.step() ``` 这段脚本实现了从零创建LR类直至调用内置交叉熵代价衡量标准以及SGD求解策略为止的一系列流程[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值