人工智能与机器学习:Python从零实现性回归模型

人工智能与机器学习:Python从零实现性回归模型

🧠 向所有学习者致敬!

“学习不是装满一桶水,而是点燃一把火。” —— 叶芝

我的博客主页:https://lizheng.blog.ZEEKLOG.net

🌐 欢迎点击加入AI人工智能社区

🚀 让我们一起努力,共创AI未来! 🚀


前言

在 AI 的热潮中,很容易忽视那些让它得以实现的基础数学和技术。作为一名专业人士,通过不使用机器学习库(比如 sklearn、TensorFlow、PyTorch 等)来编写模型,可以显著提升你对这些基础技术的理解。因为有时候,用现成的工具就像吃别人嚼过的糖,没劲!自己动手,那才叫真本事,不仅能搞懂背后的原理,还能在朋友面前炫耀一番:“看我这代码,多牛!”所以,咱们这就开始,一起踏上这个充满挑战和乐趣的旅程吧!🚀

本系列我们会深入探讨各种机器学习模型,并从零搭建它们。在每篇文章结束时,我希望读者能够对这些我们每天作为数据专业人士使用的模型有极其深入和基础的理解。咱们就从多元线性回归开始吧!

多元线性回归

多元线性回归可以用来模拟两个或多个自变量与一个数值型因变量之间的关系。日常用例包括根据房屋的卧室数量、浴室数量、面积等信息预测房价。咱们先来聊聊多元线性回归的一些关键假设。

  • 自变量与因变量的线性关系:具体来说,任何一个自变量(或特征)变化 1 个单位时,因变量应该以恒定的速率变化。
  • 没有多重共线性:这意味着特征之间需要相互独立。以房价为例,如果卧室数量和浴室数量之间存在某种相关性,这可能会影响模型的性能。确保没有或最小化多重共线性,也能让你更高效地利用给定的数据。
  • 同方差性:这意味着在任何自变量水平下,误差都是恒定的。如果咱们的房价预测模型显示,随着预测价格的上升,误差也在增加,那咱们就不能说这个模型满足同方差性了。可能需要对特征数据进行一些变换,以满足这个假设。

数学原理

还记得 (y = mx + b) 吗?大多数人在公立学校的时候都学过这个公式。而多元线性回归则可以用下面的公式表示:

y = B 0 + B 1 x 1 + B 2 x 2 + ⋯ + B n x n + E y = B_0 + B_1x_1 + B_2x_2 + \dots + B_nx_n + E y=B0​+B1​x1​+B2​x2​+⋯+Bn​xn​+E

  • y y y:因变量或目标变量,也就是咱们要预测的东西。
  • B 0 , B 1 , … , B n B_0, B_1, \dots, B_n B0​,B1​,…,Bn​:“Beta” 或自变量的系数。 B 0 B_0 B0​ 是截距,类似于 y = m x + b y = mx + b y=mx+b 中的 b b b。剩下的系数分别代表剩下的自变量或特征的系数。
  • x 1 , x 2 , … , x n x_1, x_2, \dots, x_n x1​,x2​,…,xn​:自变量或特征。
  • E E E:“Epsilon”,更实际地说是误差项,也就是咱们的预测值与实际 y y y 之间的差距。

你也可以用矩阵表示法来表示多元线性回归方程。我个人更喜欢这种方法,因为它让我不得不从向量和矩阵的角度去思考,而这些正是几乎所有机器学习模型背后的数学核心。

Y = X B + E \mathbf{Y} = \mathbf{X} \mathbf{B} + \mathbf{E} Y=XB+E

咱们来更直观地看看这些变量里都有啥。先从 X \mathbf{X} X 开始,它代表了咱们所有的特征数据,是一个矩阵。注意,这个矩阵的第一列全是 1。为啥呢?这代表了截距项 B 0 B_0 B0​ 的占位符。

从数据角度来看,咱们有啥呢?咱们有所有的特征数据、目标变量 Y Y Y,误差项理论上是未知的,但它只是预测值 y y y 与实际值 y y y 之间的差距。换句话说,它只是用来补全方程的。所以,咱们需要求解的是 B \mathbf{B} B,也就是权重。

None

### 最小化代价函数

要找到 B \mathbf{B} B,请注意,咱们并不是直接求解它。相反,咱们想找到向量 B \mathbf{B} B 中的值,使得预测值与实际值之间的误差最小化。这是通过最小化关于 B \mathbf{B} B 的代价函数来实现的,这个代价函数也被称为均方误差

MSE = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 \text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 MSE=n1​i=1∑n​(

Read more

基于C++构建DeepSeek大模型推理SDK:从架构设计到工程落地

基于C++构建DeepSeek大模型推理SDK:从架构设计到工程落地

这里写目录标题 * 前言 * 一、 云端环境配置与鉴权机制 * 二、 C++ SDK 核心数据结构设计 * 1. 消息与配置实体 * 2. 模型信息与会话管理 * 三、 抽象接口层设计:策略模式的应用 * 四、 DeepSeek 适配器实现 * 1. 初始化逻辑 * 2. 信息查询接口 * 五、 单元测试与质量保证 * 1. 测试环境构建 * 2. 日志系统 * 六、 CMake 构建系统配置 * 1. 依赖管理 * 2. 编译目标与链接 * 七、 编译与调试过程 前言 在高性能计算与大模型(LLM)应用开发的浪潮中,C++凭借其卓越的内存管理能力和运行时效率,成为了构建底层推理SDK的首选语言。本文将深入剖析如何从零开始,设计并实现一个能够调用DeepSeek模型的C++ SDK。全通过程涵盖了云端鉴权、面向对象架构设计、多态接口封装、

By Ne0inhk
如何解决 pip install 编译报错 g++: command not found(缺少 C++ 编译器)问题

如何解决 pip install 编译报错 g++: command not found(缺少 C++ 编译器)问题

摘要 本文聚焦pip install安装依赖C++扩展的Python包时出现的“g++: command not found”编译报错,该报错核心是系统缺失GNU C++编译器(g++),导致源码编译过程中无法编译C++扩展模块,最终中断安装流程。文章从报错本质、系统差异、依赖逻辑出发,拆解Linux(Debian/Ubuntu、CentOS/RHEL、Arch)、macOS、Windows三大系统下的报错根源(g++未安装、路径未配置、编译环境不完整、架构不匹配等),提供分系统的精准解决方案:Linux通过包管理器安装g++/C++编译工具链、macOS安装Xcode Command Line Tools补全clang++(等效g++)、Windows优先使用预编译包/通过MinGW/WSL适配g++;同时覆盖“安装g++后仍报错”的高频排障场景,搭配详细命令、操作步骤与验证方法,

By Ne0inhk

基于C++的高效TCP文件传输类设计与实现

本文还有配套的精品资源,点击获取 简介:在IT领域,网络编程是构建分布式系统和客户端-服务器架构的核心技术。TCP作为可靠的传输层协议,广泛应用于文件传输场景。本文介绍一个用C++实现的TCP文件传输类系统,涵盖套接字编程、面向对象设计、文件分块传输、多线程处理及事件驱动机制等关键技术。通过封装TcpServer、TcpSocket和FileSocket等类,结合FastDelegate实现回调机制,并运用设计模式提升代码可维护性,开发者可构建稳定高效的文件传输服务。项目还包含全局配置管理、内存安全控制与性能优化策略,适用于实际网络通信环境。 TCP套接字编程与现代C++网络框架设计 在智能家居设备日益复杂的今天,确保无线连接的稳定性已成为一大设计挑战。想象一下:你家的智能音箱正在播放音乐,突然卡顿、断连,甚至完全失声——这背后可能正是底层通信机制出了问题。而解决这类问题的关键,往往藏在一个看似不起眼的技术名词里: TCP套接字 。 别被这个术语吓到!它其实是构建所有稳定网络服务的基石。从网页加载到视频通话,从远程控制到实时游戏,只要数据不能丢、顺序不能乱,几乎都离不开TCP

By Ne0inhk
C++_STL之list篇

C++_STL之list篇

一、list的介绍   std::list是C++标准模板库(STL)中的一个双向链表容器。与vector和deque不同,list不支持随机访问,但它在任何位置插入和删除元素都非常高效。 1.基本特性 (1)双向链表结构:每个元素都包含指向前驱和后继的指针 (2)非连续存储:元素分散存储在内存中,通过指针连接 (3)时间复杂度:         任意位置插入/删除:O(1)         随机访问:O(n)         遍历:O(n) 二、list常用操作         我这里就通过调试来带大家看一下每个函数的效果。 1.创建和构造         列举了一些list构造时的基础用法. #include <iostream> #include <list> using namespace std; int main(

By Ne0inhk