告别调包依赖:从零实现线性回归与逻辑回归模型
你是否还在依赖机器学习库(Machine Learning Library, MLL)的黑盒模型?是否想真正理解线性模型的数学原理与代码实现?本文将带你从零开始,用不到200行代码实现线性回归(Linear Regression)和逻辑回归(Logistic Regression),让你彻底掌握这两个基础但强大的算法。读完本文,你将能够:
- 理解线性模型的核心数学原理
- 掌握梯度下降(Gradient Descent)优化算法
- 实现带正则化的线性回归与逻辑回归
- 解决实际的回归与分类问题
线性模型:从数学公式到代码实现
线性模型是机器学习中最基础也最常用的模型之一,它通过对输入特征进行线性组合来预测输出结果。MLAlgorithms项目中的mla/linear_models.py文件提供了清晰简洁的实现,我们将以此为基础进行讲解。
核心架构:BasicRegression基类
项目采用面向对象的设计思想,将线性回归和逻辑回归的共同功能抽象到BasicRegression基类中。这个基类实现了梯度下降优化、正则化等核心功能,让代码更加简洁和可维护。
class BasicRegression(BaseEstimator):
def __init__(self, lr=0.001, penalty="None", C=0.01, tolerance=0.0001, max_iters=1000):
self.C = C # 正则化系数
self.penalty = penalty # 正则化类型:'l1'、'l2'或None
self.tolerance = tolerance # 收敛容忍度
self.lr = lr # 学习率
self.max_iters = max_iters # 最大迭代次数
self.errors = [] # 记录训练过程中的误差
self.theta = [] # 模型参数
# ... 其他初始化代码
线性回归:预测连续值
线性回归用于预测连续型输出变量,它的核心是最小化均方误差(Mean Squared Error, MSE)。在MLAlgorithms中,LinearRegression类继承自BasicRegression,并实现了相应的损失函数:
class LinearRegression(BasicRegression):
"""Linear regression with gradient descent optimizer."""
def _loss(self, w):
loss = self.cost_func(self.y, np.dot(self.X, w))
return self._add_penalty(loss, w)
def init_cost(self):
self.cost_func = mean_squared_error # 使用均方误差作为损失函数
逻辑回归:处理分类问题
逻辑回归虽然名字中带有"回归",但实际上是一种分类算法。它通过sigmoid函数将线性输出转换为概率值,适用于二分类问题:
class LogisticRegression(BasicRegression):
"""Binary logistic regression with gradient descent optimizer."""
def init_cost(self):
self.cost_func = binary_crossentropy # 使用交叉熵作为损失函数
def _loss(self, w):
loss = self.cost_func(self.y, self.sigmoid(np.dot(self.X, w)))
return self._add_penalty(loss, w)
@staticmethod
def sigmoid(x):
return 0.5 * (np.tanh(0.5 * x) + 1) # 数值稳定的sigmoid实现
实战指南:使用线性模型解决实际问题
了解了线性模型的实现原理后,让我们看看如何使用MLAlgorithms中的线性模型解决实际问题。项目的examples/linear_models.py文件提供了完整的使用示例。
线性回归:预测房价
下面是使用线性回归解决回归问题的示例代码:
def regression():
# 生成随机回归问题数据
X, y = make_regression(
n_samples=10000, n_features=100, n_informative=75,
noise=0.05, random_state=1111, bias=0.5
)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.25, random_state=1111
)
# 创建并训练模型
model = LinearRegression(lr=0.01, max_iters=2000, penalty="l2", C=0.03)
model.fit(X_train, y_train)
# 预测并评估
predictions = model.predict(X_test)
print("回归问题MSE:", mean_squared_error(y_test, predictions))
逻辑回归:客户流失预测
下面是使用逻辑回归解决分类问题的示例代码:
def classification():
# 生成随机分类问题数据
X, y = make_classification(
n_samples=1000, n_features=100, n_informative=75,
random_state=1111, n_classes=2, class_sep=2.5
)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.1, random_state=1111
)
# 创建并训练模型
model = LogisticRegression(lr=0.01, max_iters=500, penalty="l1", C=0.01)
model.fit(X_train, y_train)
# 预测并评估
predictions = model.predict(X_test)
print("分类问题准确率:", accuracy(y_test, predictions))
正则化:解决过拟合问题
在实际应用中,我们经常会遇到过拟合问题。MLAlgorithms提供了L1和L2两种正则化方法来解决这个问题:
def _add_penalty(self, loss, w):
"""Apply regularization to the loss."""
if self.penalty == "l1": # L1正则化(Lasso)
loss += self.C * np.abs(w[1:]).sum()
elif self.penalty == "l2": # L2正则化(Ridge)
loss += (0.5 * self.C) * (w[1:] ** 2).sum()
return loss
- L1正则化(Lasso):会产生稀疏权重,可用于特征选择
- L2正则化(Ridge):会使权重值普遍较小,提高模型泛化能力
梯度下降:优化模型参数
梯度下降是训练线性模型的核心算法,MLAlgorithms实现了标准的梯度下降过程:
def _gradient_descent(self):
theta = self.theta
errors = [self._cost(self.X, self.y, theta)]
cost_d = grad(self._loss) # 使用autograd计算梯度
for i in range(1, self.max_iters + 1):
delta = cost_d(theta) # 计算梯度
theta -= self.lr * delta # 更新参数
errors.append(self._cost(self.X, self.y, theta))
logging.info("Iteration %s, error %s" % (i, errors[i]))
# 检查收敛条件
error_diff = np.linalg.norm(errors[i - 1] - errors[i])
if error_diff < self.tolerance:
logging.info("Convergence has reached.")
break
return theta, errors
如何开始使用MLAlgorithms
要开始使用MLAlgorithms中的线性模型,只需按照以下步骤操作:
- 克隆项目仓库:
git clone https://gitcode.com/gh_mirrors/ml/MLAlgorithms
cd MLAlgorithms
- 安装依赖:
pip install -r requirements.txt
- 运行线性模型示例:
python examples/linear_models.py
总结与展望
线性模型虽然简单,但却是机器学习的基础。通过本文的讲解,你应该已经掌握了线性回归和逻辑回归的原理与实现。MLAlgorithms项目提供的实现不仅简洁易懂,而且包含了正则化、梯度下降等关键技术,能够解决实际问题。
未来,你可以尝试:
- 实现更多类型的线性模型(如弹性网络)
- 优化梯度下降算法(如使用动量法、自适应学习率)
- 将线性模型应用到自己的数据集上
希望本文能帮助你更好地理解线性模型,并启发你深入探索机器学习的更多领域!如果你觉得这篇文章有帮助,请点赞、收藏并关注,我们将持续推出更多机器学习算法的详解。
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00
请把这个活动推给顶尖程序员😎本次活动专为懂行的顶尖程序员量身打造,聚焦AtomGit首发开源模型的实际应用与深度测评,拒绝大众化浅层体验,邀请具备扎实技术功底、开源经验或模型测评能力的顶尖开发者,深度参与模型体验、性能测评,通过发布技术帖子、提交测评报告、上传实践项目成果等形式,挖掘模型核心价值,共建AtomGit开源模型生态,彰显顶尖程序员的技术洞察力与实践能力。00
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
MiniMax-M2.5MiniMax-M2.5开源模型,经数十万复杂环境强化训练,在代码生成、工具调用、办公自动化等经济价值任务中表现卓越。SWE-Bench Verified得分80.2%,Multi-SWE-Bench达51.3%,BrowseComp获76.3%。推理速度比M2.1快37%,与Claude Opus 4.6相当,每小时仅需0.3-1美元,成本仅为同类模型1/10-1/20,为智能应用开发提供高效经济选择。【此简介由AI生成】Python00
Qwen3.5Qwen3.5 昇腾 vLLM 部署教程。Qwen3.5 是 Qwen 系列最新的旗舰多模态模型,采用 MoE(混合专家)架构,在保持强大模型能力的同时显著降低了推理成本。00- RRing-2.5-1TRing-2.5-1T:全球首个基于混合线性注意力架构的开源万亿参数思考模型。Python00