人工智能机器学习:Python使用20行代码实现通用的线性回归算法,搞定一切线性回归问题(numpy、梯度下降、矩阵和向量)

4、python简单线性回归代码案例(完整) 第一、回归分析的步骤 01 根据预测目标,确定自变量和因变量 02 绘制散点图,确定回归模型类型 03 估计模型参数,建立回归模型 04 对回归模型进行检验 回归方程的精度就是用来表示实际观测点和回归方程的拟合程度的指标,使用判定系数来度量。 判定系数=相关系数R平方=ESS/TSS=1-RSS/TSS 其中:具体公式见图 TSS   总离差平方和 ESS   回归平方和 RSS ... 阅读详情

1、核心算法代码

说明:算法是使用的梯度下降算法,成本函数是使用的最小二乘法:求残差的平方和的极小值

import numpy as np

# 定义假设函数:X是一个矩阵  W是一个列向量
def hyFunction(X, W):
    return X.dot(W)  # 一次计算所有的样本结果
    pass

# 梯度函数:X是样本矩阵,W是系数,y是实际结果
def gradientFunction(X, W, y):
    return (X.dot(W) - y).dot(X)/X.shape[0] # 一次计算所有的W的梯度值
    pass

# 成本函数:X是矩阵,W是向量,y也是向量
def costFunction(X, W, y):
    return 0.5*np.sum((X.dot(W) - y)**2)/X.shape[0] # 基于最小二乘法构造的成本函数:残差的平方和
    pass

# 定义梯度下降算法:X是样本,w是初始系数,costFunc成本函数,gFunc梯度函数,lamb步进系数,tolance收敛条件,times最大计算次数
def gradientDescent(X, w, y, costFunc, gFunc, lamb = 0.001 , tolance = 1.0e-12, times = 2000000):
    t = 0
    # 上一次结算结果
    result = costFunc(X, w, y)
    # 上一次的梯度
    g = gFunc(X, w, y)
    # 根据梯度和步进系数计算的新的点
    newW = w - lamb*g
    # 代入判别函数计算新的结果值
    newResult = costFunc(X, newW, y)

    # 如果两次的结算结果的差值没有达到收敛条件,继续迭代
    while np.abs(result - newResult) > tolance:
        # 把点移动到新的点
        w = newW
        result = newResult
        g = gFunc(X, w, y)
        newW = w - lamb * g
        newResult = costFunc(X, newW, y)
        t += 1
        # 避免无法收敛的情况
        if t > times:
            break
            pass
        pass
    return w
    pass

数据验证测试:

# 构造测试数据:验证算的有效性

'''
'''
'''

# f(x1, x2) = w0 + w1*x1 + w2*x2  # w1 = 2  w2 = 1  w0=3

# 样本:
'''
X = np.array([[3, 0],[4, 1], [5,2], [7,3]])
y = np.array([9, 12,15, 20])
row = X.shape[0]
one = np.ones(row)
one = one[:,np.newaxis]
X = np.hstack((X, one))

w = gradientDescent(X, np.array([2, 1, 4]), y, costFunction, gradientFunction)
print(w)


# 扩围降阶:对高阶函数拟合,下列x和y是使用函数:y=0.5*x*x*x+1.2*x*x-2.3*x+10 大致计算出来的
x = np.array([-3, -2.3, -1.6, -1, -0.3, 0.3, 1, 1.6, 2.3, 3])
y = np.array([14.2, 15.5, 14.8, 13., 10.8, 9.4, 9.4, 11.8, 17.5, 27.4])

def make_x_ext(X):
    x_ext = np.c_[X[:,np.newaxis], np.ones(len(X))]         # 追加全1列
    x_ext = np.insert(x_ext, 0, np.power(X, 2), axis=1)     # 插入x*x数据列
    x_ext = np.insert(x_ext, 0, np.power(X, 3), axis=1)     # 插入x*x*x数据列
    return x_ext

w_init = np.array([2.5, 3.0, 1.2, 0.7]) # 猜测这就是最优的系数
x_ext = make_x_ext(x)
w = gradientDescent(x_ext, w_init, y, costFunction, gradientFunction)
print(w)

低阶和高阶拟合效果:

第一组数据拟合的系数,符合:

[1.99858201 1.00181951 3.00403465]

第二组数据拟合的系数,符合:

[ 0.49012808  1.20100303 -2.19801389 10.07079948]

 

数学方法的推导过程:

f(W,X) = [[w11, w12]  dot [[x11,x12,x13],
          [w12, W22]]     [x21,x22,x23],
          
          
cost function : 成本函数/目标函数
Σ(i(1,n))(h(x(i)) - y(i))^2 

最小二乘法是:线性回归问题的计算方法

有监督学习模型:
计算值 
实际值

残差:计算值 - 实际值

 

假设函数:自定义的方程式
h(x) = w0+ w1*x

成本函数是w0和w1系数的函数:
f(w0 , w1) =Σ(i(1,n))(h(x(i)) - y(i))^2 
           =Σ(i(1,n))(w0+w1*x(i) - y(i))^2
           = (w0 + w1*x1 - y1)^2 + (w0 + w1*x2 - y2)^2 + ... + (w0 + w1*xn - yn)^2
           
求极值f(w0 , w1),导数值,梯度下降:
f'(w0) = 2*(w0 + w1*x1 - y1) + 2*(w0 + w1*x2 - y2) + ... + 2*(w0 + w1*xn - yn) = 0
f'(w1) = 2*x1*(w0 + w1*x1 - y1) + 2*x2*(w0 + w1*x2 - y2) + ... + 2*xn*(w0 + w1*xn - yn) = 0

2*(w0 + w1*x1 - y1) + 2*(w0 + w1*x2 - y2) + ... + 2*(w0 + w1*xn - yn) = 0

n*w0 + (w1*x1 + w1*x2 + ... w1*xn) - (y1+y2+...+yn) = 0
n*w0 = (y1+y2+...+yn) - w1*(x1+x2+...+xn)
w0 = ((y1+y2+...+yn) - w1*(x1+x2+...+xn))/n
w0 = mean(y) - w1*mean(x)

2*x1*(w0 + w1*x1 - y1) + 2*x2*(w0 + w1*x2 - y2) + ... + 2*xn*(w0 + w1*xn - yn) = 0

w0*(x1+x2+...xn) + w1 * (x1^2+x2^2+...+xn^2) - (x1*y1 + x2*y2+ ... + xn*yn) = 0

残熵:
熵增 熵减

# pizza
x1:大小   3  4  5  7
x2: 距离   0  1  2  3 
.
.
.
xm

h(x1, x2) = w1*x1 + w2*x2 + w0 # w1 = 2  w2 = 1  w0=3

样本:
X = [[3, 0],[4, 1], [5,2], [7,3]]  

y = [9, 12,15, 20]

残差的平方和:
cost = Σ (h(x(i)1, x(i)2) - y(i))^2

 

h(x1, x2..., xm) = w0 + w1*x1 + w2*x2 + ... + wm*xm

扩展到m个维度:
cost = Σ (h(xi1,xi2...,xim) - y(i))^2


高阶:
f(x1, x2) = x1^2 + x2 + 2x2^2 + x1 + w0

扩围降阶:
x3 = x1^2
x4 = x2^2
f(x1, x2) = x1^2 + x2 + 2x2^2 + x1 + 10 
f(x1, x2) = x3 + x2 + 2x4 + x1 + 10

X = [[2,3],[4,6],[7,8]] 
y =  [10,20,40]

XE = [[2,3, 4, 9, 1],[4,6, 16, 36, 1],[7,8, 49,64, 1]] 

n个维度的线性回归问题,梯度下降算法的一般解法:
假设函数:
f(x1,x2,...,xn) = w0 + w1*x1 + ... wn*xn

X = [[x11,x12,...,x1n]
    [x21,x22,...,x2n]
    .
    .
    .
    [xm1,xm2,...,xmn]
]

y = [y1,y2,...,ym]

 

2、将线性回归函数扩展到任意个维度,构造的成本函数(基于最小二乘法,就是残差的平法和):


F(w0,w1,...,wn) = Σ(1,m)(f(x(i)1,x(i)2,...,x(i)n) - y(i))^2

F(w0,w1,...,wn) = Σ(1,m)(w0 + w1*x(i)1 + ... wn*x(i)n - y(i))^2

求解成本函数的极小值(梯度下降算法):

F'(w1) = 2 * Σ(1,m)((w0 + w1*x(i)1 + ... wn*x(i)n - y(i))*xi1)
F'(w2) = 2 * Σ(1,m)((w0 + w1*x(i)1 + ... wn*x(i)n - y(i))*xi2)
.
.
.
F'(wn) = 2 * Σ(1,m)((w0 + w1*x(i)1 + ... wn*x(i)n - y(i))*xin)

F'(w0) = 2 * Σ(1,m)(w0 + w1*x(i)1 + ... wn*x(i)n - y(i))*1


X.T.dot(X.dot(W)) #

X.dot(W).T.dot(X)

展开式:

F'(w1) = 2 * Σ(1,m)((w0 + w1*x(i)1 + ... wn*x(i)n - y(i))*xi1)
       = 2* (( (w0 + w1*x11 + ... wn*x1n - y1)*x11 + (w0 + w1*x21 + ... +wn*x2n - y2) * x21+... +(w0 + w1*xm1 + ... +wn*xmn - ym) * xm1 ))
       = 2* X.dot(w).T.dot(X[0])
   
F'(w2) = 2 * Σ(1,m)((w0 + w1*x(i)1 + ... wn*x(i)n - y(i))*xi2)
       = 2* X.dot(w).T.dot(X[1])
.
.
.
F'(wn) = 2 * Σ(1,m)((w0 + w1*x(i)1 + ... wn*x(i)n - y(i))*xin)
        = 2* X.dot(w).T.dot(X[n-1])

F'(w0) = 2 * Σ(1,m)(w0 + w1*x(i)1 + ... wn*x(i)n - y(i))*1
       = 2* X.dot(w).T.dot(X[n])
       
F'(w) = 2* (X.dot(w) - y.T).T.dot(X)       
       

使用Python和Numpy进行波士顿房价预测任务(二)【深度学习入门_学习笔记】 使用Python和Numpy进行波士顿房价预测任务–详解 阅读详情

相关推荐

python_AI库 numpy的介绍

在Python中,基本的数据结构包括列表、元组、字典等,它们能够处理一维的数据。numpy的数组(ndarray)概念正是对Python基本数据结构的扩展,它提供了多维数组对象、各种派生对象(如掩码数组和矩阵)以及用于快速操作数组的大量函数,数组形似列表但与列表又完全不同,是numpy为python扩展出来的一种全新的数据结构。numpy,全称Numerical Python,是Python语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。轴代表了数组的某个维度。

noah__zhao的博客 2005

数学建模:线性回归模型的Python实现

Python,线性回归,模型检验

weixin_56529327的博客 1万+

机器学习算法实战系列:从原理到代码实现全面解析

恭喜你!学完本文,你已经掌握了机器学习中最重要的两个算法,这是你成为数据科学家路上的重要里程碑!线性回归和逻辑回归看似简单,但它们是理解更复杂模型的基础。动手实现本文所有代码尝试在不同数据集上应用参加Kaggle相关比赛实践在下一篇文章中,我们将深入探讨决策树和随机森林算法,它们是如何在Kaggle竞赛中屡获佳绩的!敬请期待!延伸阅读机器学习算法原理和代码实现系列文章汇总机器学习训练秘籍——吴恩达机器学习初学者必须知道的十大算法。

资深全栈架构师,乐于在 优快云 分享技术见解,与大家携手共进,共攀技术巅峰! 1222

python代码实现线性回归

python代码实现线性回归

weixin_40623018的博客 2090

【Zotero】《纯操作讲解,GPT配置,Zotero标注可视化》- 知识点目录

Temperature分布在。之间,越低输出越稳定;

墨门 3396

Abaqus子程序开发避坑指南:从UMESHMOTION到齿轮磨损分析实战

本文深入探讨Abaqus子程序开发中的关键技术与避坑指南,重点解析UMESHMOTION在齿轮磨损分析中的实战应用。从开发环境搭建、调试框架构建到性能优化和大规模计算,提供系统化的解决方案。通过真实案例展示如何避免内存泄漏、网格畸变等常见问题,并介绍数据驱动的磨损预测等前沿技术,帮助工程师提升仿真精度与效率。

weixin_30892037的博客 88

python pytorch 超详细线性回归原理解析加代码实现-小白入门级

答应老师做的一个系列教程,里面虽然有很多公式但是都是非常基础的公式,也是头一次花这吗大经历去写一篇基础的文档,里面虽然有不少的公式,但只要能顺着看下来会发现都是非常基础的公式都是特别简单的。模型(函数): f(x)=wx+bf(x)=wx+bf(x)=wx+b数据集:任务:寻找合适的www和bbb使得f(x)=wx+bf(x)=wx+bf(x)=wx+b可以拟合上表中的数据在www,bbb已知的情况下,模型(函数)可表示为 f(x)=wx+b f(x)=wx+b f(x)=wx+b 定义一个训练样本损失的计

一个学长的博客 2543

AFSim仿真系统中的图像处理器:从静态图像到视频流的目标识别技术解析

本文深入解析了AFSim仿真系统中WSF_IMAGE_PROCESSOR图像处理器的核心功能与技术实现。它详细阐述了该处理器如何从静态图像与视频流中完成目标检测、跟踪与识别,将原始像素数据转化为可供指挥系统使用的轨迹情报,并重点介绍了其基于约翰逊准则的目标识别进阶逻辑、关键参数配置以及脚本扩展能力,为构建高逼真度仿真应用提供了实践指导。

cola5的博客 214

人工智能——线性回归(Python实现)

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~给大家准备的学习资料包括但不限于:Python 环境、pycharm编辑器/永久激活/翻译插件python 零基础视频教程Python 界面开发实战教程Python 爬虫实战教程Python 数据分析实战教程python 游戏开发实战教程Python 电子书100本。

2401_84139610的博客 3464

大漠插件找图找字避坑手册:从ziku0.txt字库制作到易语言精准识别(附综合工具实操)

本文深入解析大漠插件在图像识别中的核心难点,提供从ziku0.txt字库精准制作到易语言高效调用的完整避坑指南。重点讲解如何利用大漠综合工具科学设置偏色与二值化参数,生成高质量色彩描述字符串,并分享识别失败的系统排查方法与进阶优化策略,旨在实现99%的稳定识别率。

weixin_29264201的博客 1208

海思Hi3061M MCU:为高速吹风筒市场注入智能动力

此外,海思还提供了丰富的软件开发工具和生态环境组件,帮助开发者快速实现复杂功能。高速吹风筒因其高效的风力和快速的干燥效果,近年来在市场上越来越受欢迎。然而,传统的高速吹风筒在性能、噪音和使用寿命等方面仍有改进的空间。凭借其高性能、低功耗、低噪声和易用的开发工具,为高速吹风筒市场带来了全新的解决方案。这不仅提高了用户的使用体验,还延长了电机的使用寿命。这不仅减少了电机的电磁噪声,还提高了电机的运行效率。还支持风机顺逆风启动适配多种电阻范围的电机,进一步提高了吹风筒的适用性和灵活性。

2401_83448585的博客 2016

Python实现线性回归算法,只使用python中的pandas和numpy库

这一篇来介绍以下最简单的模型就是线性回归,这是很多机器学习的起步算法,虽然简单,但是通过Python最基础的数据结构去实现,只是用基础的库包去实现,有利于提高我们的编程能力,接下来让我们一起来编写代码。当然,你想要读懂以下内容,你需要学习过Python基础,并有认识机器学习的一些基础概念,如目标函数、标准化、过拟合、梯度下降、评价指标等。也许你也可以在阅读过程中一步一步去认识它们。线性回归就是用一条线来解释自变量与因变量之间的关系。目标函数最小二乘法和梯度下降法。

weixin_54044641的博客 2295

从RRT到平滑轨迹:机械臂避障规划仿真全流程解析

本文详细解析了机械臂避障规划从RRT算法到平滑轨迹优化的全流程,包括MATLAB实现、碰撞检测工程实践及轨迹平滑优化技巧。通过RRT算法在关节空间的路径搜索与Minimum Jerk/Snap优化,实现机械臂在复杂环境中的高效安全运动,适用于工业自动化与机器人控制领域。

weixin_29051811的博客 294

编程作业(python)| 吴恩达机器学习(1)线性回归

Coursera 吴恩达机器学习 课后作业题 1/8

fun1024 1万+

MiniMax H3本地部署与ComfyUI集成实战:从环境配置到提示词优化

文本到视频生成是AI内容创作领域的关键技术,它基于扩散模型等深度学习原理,将自然语言描述转化为连贯的动态视觉序列。这项技术的核心价值在于大幅降低了视频制作的门槛,为短视频创作、概念可视化、教育内容生成等场景提供了高效工具。在实际工程实践中,成功部署和运行此类模型,如近期备受关注的MiniMax H3,需要精准处理环境配置、显存优化和提示词工程等环节。其中,解决“CUDA error: no kernel image is available”等版本兼容性问题,以及针对“8G显存”等有限资源进行参数调优,是确

weixin_33674976的博客 479

Kubernetes(K8s)从入门到精通系列之一:一篇文章了解K8s全部核心知识点

Kubernetes(K8s)从入门到精通系列之一:一篇文章了解K8s全部核心知识点

zhengzaifeidelushang的博客 849

初学者指南:使用 Numpy、Keras 和 PyTorch 实现最简单的机器学习模型线性回归

机器学习是人工智能的一门子科学,其中计算机和机器通常学会在没有人工干预或显式编程的情况下自行执行特定任务(当然,首先要对他们进行训练)。 不同类型的机器学习技术可以划分到不同类别,如图 1 所示。方法的选择取决于问题的类型(分类、回归、聚类)、数据的类型(图像、图形、时间系列、音频等等)以及方法本身的配置(调优)。 在本文中,我们将使用 Python 中最著名的三个模块来实现一个简单的线性回归模型。 使用 Python 的原因是它易于学习和应用。 我们将使用的三个模块是: 1- Numpy:可以用于数组、

deephub 4785

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

ML-From-Scratch:用 NumPy 手写 36 个机器学习算法的透明实现

当你在 sklearn 里调用 `fit()` 之后看不到梯度下降到底怎么走、反向传播里每个偏导数怎么推,可以翻 ML-From-Scratch——一个用纯 NumPy 手写的机器学习算法库,从线性回归到 GAN 的 36 个实现全部可读,每一行矩阵运算都能被断点跟踪。 ## 📊 依赖 NumPy 的 36 个算法,作者声明不追求性能 作者在 README 里开宗明义:"The purpos

gitblog_00422的博客 911

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【人工智能基础】线性回归实验分析

人工智能基础-线性回归-实验分析

qq_56460466的博客 2530

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

python实现逻辑回归算法

前言:在实现线性回归的基础上,继续推出逻辑回归的算法实现;本节将对比线性回归,说明逻辑回归的原理。 1、原理 注:逻辑回归,属于二分类问题,是分类算法,预测的是离散值;不是回归算法 2、实现 数据准备:https://blog.csdn.net/Carl_changxin/article/details/100857456 代码: # 逻辑回归python...

Carl_changxin的博客 5368

机器学习-线性回归模型

机器学习-线性回归学习,全文调用sklearn,简单解释下常用的数学原理

m0_61159638的博客 1208

【机器学习基础】数学推导+纯Python实现机器学习算法1:线性回归

很多同学在学习机器学习的时候,理论粗略看一遍之后就直接上手编程了,非常值得表扬。但是他不是真正的上手写算法,而是去直接调用 sklearn 这样的 package,这就不大妥当了...

fengdu78的博客 995

【机器学习】2.线性回归之Python代码实现

线性回归是机器学习中最基础的回归模型,而最小二乘法和梯度下降是求解线性回归参数的两种核心方法。两者目标一致(最小化损失函数),但原理、适用场景和性能存在显著差异。本文使用numpy进行代码实现,并从多个维度对二者进行对比分析。

m0_74817670的博客 1128

吴恩达机器学习课程作业(一)基于python实现 详细解析(上篇)

@单变量线性回归 前言 斯坦福大学吴恩达老师的机器学习课程几乎是每位热爱人工智能领域同学的必修课。网上虽然有许多基于python实现的代码,但大多使用python交互模式解释器ipython实例讲解。本人基于自己的理解采用pycharm提供源代码及个人理解,部分代码可能参考他人代码部分,如有侵权请私信我 一、问题探讨 单变量线性回归算法需要根据城市人口数量,预测开小吃店的利润 数据可以从Coursera中获得,第一列是城市人口数量,第二列是该城市小吃店利润。 二、代码解析 1.引入库 代码如下(示例): i

cc512613的博客 6486

【机器学习】机器学习之多变量线性回归-Multiple_Variable_Soln

开发线性回归的例程,支持多个变量利用NumPy的np.dot来向量化实现

ya的博客 1202

《HCIA-AI》实验1 回归算法的实现

SVR(),

lzhlzhlzh_lzh的博客 1355
上一篇: 人工智能算法数学基础之求导过程推导(单变量函数求导、多变量函数求导、向量求导、矩阵求导)
下一篇: 警醒:django框架MySql limit分页查询机制和多表查询时遇到的坑(使用limit实现真分页和左连接查询)
猿说猿道
博客等级 码龄8年 120粉丝 55原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值