Regression算法

文章目录

  • 用线性回归找到最佳拟合直线
    • 标准回归函数
    • 局部加权线性回归函数

用线性回归找到最佳拟合直线

from google.colab import drive
drive.mount("/content/drive")
Mounted at /content/drive
from numpy import *
def loadDataSet(fileName):
  numFeat = len(open(fileName).readline().split('\t')) - 1
  dataMat = []
  labelMat = []
  fr = open(fileName)
  for line in fr.readlines():
    lineArr = []
    curLine = line.strip().split('\t')
    for i in range(numFeat):
      lineArr.append(float(curLine[i]))
    dataMat.append(lineArr)
    labelMat.append(float(curLine[-1]))
  return dataMat, labelMat

这段代码定义了一个名为loadDataSet的函数,用于加载数据集并将其分为特征矩阵和标签向量。以下是对该函数的代码分析:

def loadDataSet(fileName):
    numFeat = len(open(fileName).readline().split('\t')) - 1
    dataMat = []
    labelMat = []
    fr = open(fileName)
    for line in fr.readlines():
        lineArr = []
        curLine = line.strip().split('\t')
        for i in range(numFeat):
            lineArr.append(float(curLine[i]))
        dataMat.append(lineArr)
        labelMat.append(float(curLine[-1]))
    return dataMat, labelMat
  1. numFeat = len(open(fileName).readline().split('\t')) - 1

    • 通过打开文件并读取第一行,计算特征的数量。这里假设数据集是用 tab 分隔的文本文件,每一行的最后一个元素是标签。
  2. dataMat = []labelMat = []

    • 创建空列表,用于存储特征矩阵和标签向量。
  3. fr = open(fileName)

    • 打开文件以供读取。
  4. for line in fr.readlines():

    • 遍历文件的每一行。
  5. lineArr = []

    • 创建一个空列表,用于存储每行的特征数据。
  6. curLine = line.strip().split('\t')

    • 去除行首尾的空白符,然后按制表符分割字符串,得到当前行的特征和标签。
  7. for i in range(numFeat):

    • 遍历特征的数量。
  8. lineArr.append(float(curLine[i]))

    • 将当前行的特征值转换为浮点数并添加到 lineArr 中。
  9. dataMat.append(lineArr)labelMat.append(float(curLine[-1]))

    • 将特征数据添加到 dataMat 列表中,将标签值添加到 labelMat 列表中。
  10. return dataMat, labelMat

    • 返回特征矩阵和标签向量作为元组。

该函数的作用是从文件中读取数据集,并将其分为特征矩阵和标签向量。

标准回归函数

def standRegres(xArr, yArr):
  xMat = mat(xArr)
  yMat = mat(yArr).T
  xTx = xMat.T * xMat
  if linalg.det(xTx) == 0:
    print("This matrix is singular, cannot do inverse")
    return
  ws = xTx.I * (xMat.T * yMat)
  return ws

这段代码是用于实现普通最小二乘线性回归(OLS)的 Python 函数。下面是对函数的代码分析:

  1. def standRegres(xArr, yArr):

    • 函数的定义,它接受两个参数:xArr是一个列表或数组,包含输入特征的数据集;yArr是一个列表或数组,包含对应的目标变量值。
  2. xMat = mat(xArr)

    • 将输入特征数据集转换为一个 NumPy 矩阵。
  3. yMat = mat(yArr).T

    • 将目标变量数据集转换为一个 NumPy 矩阵,并且将其转置,以确保其为列向量。
  4. xTx = xMat.T * xMat

    • 计算特征数据矩阵的转置与其自身的乘积。这是用来计算线性回归系数的一个步骤。
  5. if linalg.det(xTx) == 0:

    • 使用线性代数库(linalg)中的det()函数计算矩阵xTx的行列式(Determinant)。如果行列式为0,则说明矩阵不可逆(singular),这种情况下无法求解线性回归,因此打印错误消息并返回。
  6. ws = xTx.I * (xMat.T * yMat)

    • 如果矩阵可逆,那么使用矩阵的逆(I)乘以特征矩阵转置与目标变量矩阵的乘积来计算回归系数(weights)。
  7. return ws

    • 返回计算得到的回归系数。

该函数实现了基本的线性回归,通过计算输入特征与目标变量之间的关系,得出一个线性模型,用于预测目标变量的值。

xArr, yArr = loadDataSet('/content/drive/MyDrive/Colab Notebooks/MachineLearning/《机器学习实战》/06丨预测数值型数据:回归/用线性回归找到最佳拟合直线/ex0.txt')
xArr[:2]
[[1.0, 0.067732], [1.0, 0.42781]]
ws = standRegres(xArr, yArr)
ws
matrix([[3.00774324],
        [1.69532264]])
xMat = mat(xArr)
yMat = mat(yArr)
yHat = xMat * ws
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(xMat[:,1].flatten().A[0], yMat.T[:,0].flatten().A[0])
xCopy = xMat.copy()
xCopy.sort(0)
yHat = xCopy*ws
ax.plot(xCopy[:,1], yHat)
plt.show()

1

yHat = xMat*ws
yHat.shape
(200, 1)
yMat.shape
(1, 200)
corrcoef(yHat.T, yMat)
array([[1.        , 0.98647356],
       [0.98647356, 1.        ]])

局部加权线性回归函数

def lwlr(testPoint, xArr, yArr, k=1.0):
  xMat = mat(xArr)
  yMat = mat(yArr).T
  m = shape(xMat)[0]
  weights = mat(eye(m))
  for j in range(m):
    diffMat = testPoint - xMat[j, :]
    weights[j, j] = exp(diffMat*diffMat.T/(-2.0*k**2))
  xTx = xMat.T * (weights * xMat)
  if linalg.det(xTx) == 0.0:
    print("This matrix is singular, cannot do inverse")
    return
  ws = xTx.I * (xMat.T * (weights * yMat))
  return testPoint * ws

这段代码实现了局部加权线性回归(Locally Weighted Linear Regression,LWLR)的函数。以下是对该函数的代码分析:

  1. def lwlr(testPoint, xArr, yArr, k=1.0):

    • 函数的定义,它接受四个参数:testPoint是待预测的数据点;xArr是一个列表或数组,包含输入特征的数据集;yArr是一个列表或数组,包含对应的目标变量值;k是一个可选参数,控制权重的带宽,默认为1.0。
  2. xMat = mat(xArr)

    • 将输入特征数据集转换为一个 NumPy 矩阵。
  3. yMat = mat(yArr).T

    • 将目标变量数据集转换为一个 NumPy 矩阵,并且将其转置,以确保其为列向量。
  4. m = shape(xMat)[0]

    • 获取输入特征矩阵的行数,即数据集中样本的数量。
  5. weights = mat(eye(m))

    • 创建一个单位矩阵作为权重矩阵,其大小为 m × m m \times m m×m,其中 m m m为数据集中样本的数量。
  6. for j in range(m):

    • 遍历数据集中的每个样本。
  7. diffMat = testPoint - xMat[j, :]

    • 计算测试点与当前样本之间的差值。
  8. weights[j, j] = exp(diffMat*diffMat.T/(-2.0*k**2))

    • 计算当前样本的权重,利用高斯核函数,其中 e x p exp exp 是指数函数, k k k 是带宽参数。
  9. xTx = xMat.T * (weights * xMat)

    • 计算加权的特征矩阵的转置与自身的乘积。
  10. if linalg.det(xTx) == 0.0:

    • 检查加权特征矩阵的行列式是否为0,如果是则无法求逆,打印错误消息并返回。
  11. ws = xTx.I * (xMat.T * (weights * yMat))

    • 如果加权特征矩阵可逆,那么使用矩阵的逆(I)乘以加权特征矩阵转置与目标变量矩阵的乘积来计算回归系数。
  12. return testPoint * ws

    • 返回测试点与计算得到的回归系数的乘积,即用局部加权线性回归模型对测试点进行预测。

该函数实现了局部加权线性回归,它对于每个测试点都会根据其附近的数据点赋予不同的权重,以更好地拟合局部数据。

def lwlrTest(testArr, xArr, yArr, k=1.0):
  m = shape(testArr)[0]
  yHat = zeros(m)
  for i in range(m):
    yHat[i] = lwlr(testArr[i], xArr, yArr, k)
  return yHat
xArr, yArr = loadDataSet('/content/drive/MyDrive/Colab Notebooks/MachineLearning/《机器学习实战》/06丨预测数值型数据:回归/用线性回归找到最佳拟合直线/ex0.txt')
yArr[0]
3.176513
lwlr(xArr[0], xArr, yArr, 1.0)
<ipython-input-27-f0eaaa458f3a>:8: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.)
  weights[j, j] = exp(diffMat*diffMat.T/(-2.0*k**2))

matrix([[3.12204471]])
lwlr(xArr[0], xArr, yArr, 0.001)
<ipython-input-27-f0eaaa458f3a>:8: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.)
  weights[j, j] = exp(diffMat*diffMat.T/(-2.0*k**2))

matrix([[3.20175729]])
yHat = lwlrTest(xArr, xArr, yArr, 0.01)
<ipython-input-27-f0eaaa458f3a>:8: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.)
  weights[j, j] = exp(diffMat*diffMat.T/(-2.0*k**2))
<ipython-input-28-3481d8d2a021>:5: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.)
  yHat[i] = lwlr(testArr[i], xArr, yArr, k)
xMat = mat(xArr)
srtInd = xMat[:,1].argsort(0)
xSort = xMat[srtInd][:,0,:]
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(xSort[:,1], yHat[srtInd])
ax.scatter(xMat[:,1].flatten().A[0], mat(yArr).T.flatten().A[0], s=2, c='red')
plt.show()

2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/514896.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ideaSSM 校园兼职招聘平台bootstrap开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 idea 开发 SSM 校园兼职招聘平台是一套完善的信息管理系统&#xff0c;结合SSM框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff…

图的应用解析

01&#xff0e;任何一个无向连通图的最小生成树(B )。 A.有一棵或多棵 B.只有一棵 C.一定有多棵 D.可能不存在 02.用Prim算法和Kruskal算法构造图的最小生成树&#xff0c…

windows@软件显示模糊@屏幕显示器分辨率和精细度

文章目录 refsDPIPPIPPI (Pixels Per Inch)DPI (Dots Per Inch) 屏幕尺寸数windows中DPI设置对单个应用设置DPI兼容性设置使用系统全局设置 获取屏幕(监视器)信息&#x1f47a;获取监视器的型号pnp 监视器windows 获取屏幕分辨率 高分辨率屏幕高分辨率和高精细度屏幕&#x1f4…

基于Python的微博旅游情感分析、微博舆论可视化系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

基于深度学习的吸烟检测系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)

摘要&#xff1a;本文深入研究了基于YOLOv8/v7/v6/v5等深度学习模型的吸烟行为检测系统&#xff0c;核心采用YOLOv8并整合了YOLOv7、YOLOv6、YOLOv5算法&#xff0c;进行性能指标对比&#xff1b;详述了国内外研究现状、数据集处理、算法原理、模型构建与训练代码&#xff0c;及…

Android配置抓包证书的原理

一、数字证书的常见格式 数字证书有多种格式&#xff0c;其中一些常见的格式包括&#xff1a; X.509证书&#xff1a; X.509是最常见的数字证书标准&#xff0c;它定义了公钥证书的格式和相关的验证流程。X.509证书通常使用DER编码或PEM编码。 DER (Distinguished Encoding …

Linux进程概念(一):冯诺依曼体系结构和操作系统的基本概念

目录 冯诺依曼体系结构 操作系统 理解操作系统的“管理” 操作系统的六层结构 冯诺依曼体系结构 输入设备&#xff1a;键盘、鼠标、摄像头、话筒、磁盘、网卡输出设备&#xff1a;显示器、声卡、磁盘、网卡、显示器等......CPU&#xff1a;运算器、控制器存储器&#xff1a…

js表达式

js 数据&#xff1a; 字面量 1 123 变量 a 表达式 12 2*2 a&&b 表达式都会有一个返回结果。表达式仍然是数据&#xff0c;所有可以写字面量&#xff0c;变量的地方都可以写表达式 在JavaScript中&#xff0c;表达式中的运算符具有不同的优先级&#xff0c;这决定…

C++语言学习(二)——⭐缺省参数、函数重载、引用

1.⭐缺省参数 &#xff08;1&#xff09;缺省参数概念 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时&#xff0c;如果没有指定实参则采用该形参的缺省值&#xff0c;否则使用指定的实参。 void Func(int a 0) {cout<<a<<endl; } int…

什么是「第一性原理」?

生活中的诸多原则&#xff0c;宛如无形的锁链&#xff0c;束缚着我们的价值观、认知、信仰体系及学习推理的方式。 我们的观点&#xff0c;犹如被锁链牵引的风筝&#xff0c;随风飘摇&#xff0c;却始终无法挣脱这些原则的束缚。 我们的大脑&#xff0c;在思考的瞬间&#xf…

Redis 的主从复制、哨兵

目录 一. Redis 主从复制 1. 介绍 2. 作用 3. 流程 4. 搭建 Redis 主从复制 安装redis 修改 master 的Redis配置文件 修改 slave 的Redis配置文件 验证主从效果 二. Redis 哨兵模式 1. 介绍 2. 原理 3. 哨兵模式的作用 4. 工作流程 4.1 故障转移机制 4.2 主节…

创业成功三要素:定位、追求与舍得

一、引言 在这个充满挑战与机遇的商业世界里&#xff0c;每一位创业者都怀揣着梦想&#xff0c;期望能在商海中开辟一片属于自己的天地。然而&#xff0c;成功的创业并非易事&#xff0c;它需要我们深思熟虑&#xff0c;明确自己的方向&#xff0c;并做出明智的决策。马云&…

学习鸿蒙基础(12)

目录 一、网络json-server配置 &#xff08;1&#xff09;然后输入&#xff1a; &#xff08;2&#xff09;显示下载成功。但是输入json-server -v的时候。报错。 &#xff08;3&#xff09;此时卸载默认的json-server &#xff08;4&#xff09;安装和nodejs匹配版本的js…

加密无忧:SpringBoot中快速搭建安全的API接口

加密无忧&#xff1a;SpringBoot中快速搭建安全的API接口 项目介绍什么是RSA加密加密实战实战准备新建一个springboot项目引入maven依赖启动类Application中添加EnableSecurity注解在application.yml或者application.properties中添加RSA公钥及私钥对Controller 里面的API方法进…

Windows进程监视器Process Monitor

文章目录 Process Monitor操作逻辑 Process Monitor Process Monitor是 Windows 的高级监视工具&#xff0c;是Filemon Regmon的整合增强版本&#xff0c;实时显示文件系统&#xff0c;注册表&#xff0c;网络活动&#xff0c;进程或线程活动&#xff0c;资料收集事件&#x…

上位机图像处理和嵌入式模块部署(qmacvisual并发执行)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 类似于qmacvisual这样的软件&#xff0c;其实价格并不便宜。比如大家熟知的halcon、vision pro、vision master这样的软件&#xff0c;最便宜的版本…

【精品方案】智慧金融大数据分析平台总体架构方案

以下是部分PPT内容&#xff0c;请您参阅。如需下载完整PPTX文件&#xff0c;请前往星球获取&#xff1a; 1.实现数据共享 通过数据平台实现数据集中&#xff0c;确保金融集团各级部门均可在保证数据隐私和安全的前提下使用数据&#xff0c;充分发挥数据作为企业重要资产的业务价…

海外版 双语言爆点游戏 双语音指挥游戏 去中心化投注游戏 双声道音效游戏 附带安装教程

海外版双语言爆点游戏/纯vue源码版/去中心化投注游戏 系统为纯VUE源码&#xff0c;附带安装教程 前端只有一个爆点游戏能玩&#xff0c;去中心化无后台 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/88991298 更多资源下载&#xff1a;关注我。

chromium源码学习-调试日志 LOG

在学习 chromium 源码时&#xff0c;我们经常需要增加调试日志&#xff0c;常见的用法一般是 // TurboNet.mm133134 LOG(INFO) << "TurboNet Engine started.";日志输出效果如下&#xff1a; 其中 INFO 代表当前这条日志的级别&#xff0c;使用的时候就是输…

网易云歌曲评论抓取

网易云歌曲评论爬取 步骤1.找到一首歌曲2.按下F12键打开开发者模式,对其进行抓包3.查找获得评论数据的接口4.对获得评论数据接口进行分析5.构建加密函数方法一方法二运行结果全部代码使用Js文件只使用python新的代码小结与展望这次的任务是获取网易云音乐下面的评论,涉及的知…