记1(监督学习+一元线性回归

news2025/1/10 18:54:11

目录

  • 1、基础概念
  • 2、一元线性回归

1、基础概念

  • 机器学习(Machine Learning):通过学习算法从数据中学习模型的过程

例如从“房价y~面积x”的关系中学习:
建立模型:y=wx+b
学习模型:确定w,b(利用学习算法,找到统计规律
预测房价:使用模型计算房价

  • 数据集(data set)/样本集(sample set):用来学习的数据的集合,例如鸢尾花数据集

样品:数据集中每一条记录称为“样本(sample)”:由属性(attribute)又叫(特征(feature))和标记/标签(label)组成(如房价,鸢尾花品种,相当于是要区分品种的特征)

  • 监督学习(Supervised Learning):对有标记的数据集进行的学习,总结出数据之间的映射关系

监督学习可以分类为:
回归(regression):预测连续值,如:房价(就是“房价y~面积x”线性关系)
分类(classification):预测离散值, 如将鸢尾花分类,识别手写数字

在这里插入图片描述

  • 模型【又叫:假设(hypothesis)/学习器(learner)】:估计函数
    学习出来的模型应该尽可能逼近真实的存在的规律(叫:真相/真实(ground true))
  • 无监督学习(Unsupervised Learning):样品数据没有标记时,挖掘数据内部蕴含的关系

聚类:把相似度高的样品聚合在一起,物以类聚,人以群分
距离:描述特征值之间的相似度

在这里插入图片描述

  • 半监督学习(Semi-Supervised Learning):综合使用大量的没有标记数据和少量有标记的数据共同进行学习

  • 人工智能:早期符号学习---->后来的机器学习 ,反映了从“理论研究、模型研究”到“应用研究(解决实际现实中的问题)”
    因为很多模型都没法用符号来精确定义

  • 一元线性回归:y=wx+b
    回归:给定数据点拟合出最优的曲线
    曲线为直线
    模型变量:只有一个
    模型参数:w权重,b偏置值
    估计值、你和误差/残差:
    在这里插入图片描述

  • 损失函数/代价函数(Loss/cost function):模型的预测值与真实值的不一致程度

  • 残差和最小:Loss=∑(yi-(w*xi+b))(i=1,2,3,…,n)(容易出现正负残差抵消的问题)
  • 残差绝对值和最小:Loss=∑|yi-(w*xi+b)| (i=1,2,3,…,n)(不利于采用求导求Loss最小值)
  • 残差平方和:Loss=0.5∑(yi-(wxi+b))² (i=1,2,3,…,n)(前面的0.5是为了方便求导运算)
    又叫平方损失函数(Square Loss),与欧式距离一致
  • 均方误差(Mean Square Error):Loss=1/(2n)∑(yi-(wxi+b))² (i=1,2,3,…,n)
    基于此公式的方法叫最小二乘法(Least Square Method)
  • 对残差平方和公式(平方损失函数)的w和b求偏导,即可求出w和b的取值,这种通过严格数学推导出来的解称为解析解(Analytical solution),也叫“封闭解/闭式解(Closed-form solution):
    在这里插入图片描述
    采用右式比较方便:在这里插入图片描述

2、一元线性回归

实例

x=[137.97,104.50,100.00,124.32,79.20,99.00,124.00,114.00,
   106.69,138.05,53.75,46.91,68.00,63.02,81.26,86.21]
y=[145.00,110.00,93.00,116.00,65.32,104.00,118.00,91.00,
   62.00,133.00,51.00,45.00,78.50,69.65,75.69,95.30]
meanX=sum(x)/len(x)  #x均值
meanY=sum(y)/len(y)  #y均值
sumXY=0.
sumX=0.
for i in range(len(x)):
    sumXY+=(x[i]-meanX)*(y[i]-meanY)  #w的分子部分
    sumX +=(x[i]-meanX)*(x[i]-meanX)  #w的分母部分

w=sumXY/sumX    #求斜率w
b=meanY-w*meanX #求截距b
print("w={},b={},\ntype=({},{})".format(w,b,type(w),type(b)))
#输出
w=0.8945605120044221,b=5.410840339418002,
type=(<class 'float'>,<class 'float'>)
  • 预测房价
In [87]: 
    x_test=[128.15,45.00,141.43,106.27,99.00,53.84,85.36,70.00]
    print("面积\t估计房价")
    for i in range(len(x_test)):
        print(x_test[i],"\t",round(w*x_test[i]+b,2)) #四舍五入,保留2位小数
#输出:
面积    估计房价
128.15  120.05
45.0    45.67
141.43  131.93
106.27 100.48
99.0   93.97
53.84  53.57
85.36  81.77
70.0   68.03

NumPy实现

import numpy as np
x=[137.97,104.50,100.00,124.32,79.20,99.00,124.00,114.00,
   106.69,138.05,53.75,46.91,68.00,63.02,81.26,86.21]
y=[145.00,110.00,93.00,116.00,65.32,104.00,118.00,91.00,
   62.00,133.00,51.00,45.00,78.50,69.65,75.69,95.30]
meanX=np.mean(x)  #x均值
meanY=np.mean(y)  #y均值
sumXY=np.sum((x-meanX)*(y-meanY))  #利用广播机制求:w的分子部分
sumX =np.sum((x-meanX)*(x-meanX))  #利用广播机制求:w的分母部分

w=sumXY/sumX    #求斜率w
b=meanY-w*meanX #求截距b
print("w={},b={},\ntype=({},{})".format(w,b,type(w),type(b)))
  • 预测房价
x_test=np.array([128.15,45.00,141.43,106.27,99.00,53.84,85.36,70.00])
y_pred=w*x_test+b      #广播机制
print("面积\t估计房价")
for i in range(len(x_test)):
    print(x_test[i],"\t",np.round(y_pred[i],2)) #np.round()四舍五入,保留2位小数
#输出:
面积	估计房价
128.15 	 120.05
45.0 	 45.67
141.43 	 131.93
106.27 	 100.48
99.0 	 93.97
53.84 	 53.57
85.36 	 81.77
70.0 	 68.03

TensorFlow实现

import tensorflow as tf
x=tf.constant([137.97,104.50,100.00,124.32,79.20,99.00,124.00,114.00,
   106.69,138.05,53.75,46.91,68.00,63.02,81.26,86.21])
y=tf.constant([145.00,110.00,93.00,116.00,65.32,104.00,118.00,91.00,
   62.00,133.00,51.00,45.00,78.50,69.65,75.69,95.30])
meanX=tf.reduce_mean(x)  #x均值
meanY=tf.reduce_mean(y)  #y均值
sumXY=tf.reduce_sum((x-meanX)*(y-meanY))  #利用广播机制求:w的分子部分
sumX =tf.reduce_sum((x-meanX)*(x-meanX))  #利用广播机制求:w的分母部分

w=sumXY/sumX    #求斜率w,TensorFlow默认是32位浮点数,所以小数部分短一些
b=meanY-w*meanX #求截距b
print("权值w=",w.numpy(),"\n偏置值b=",b.numpy(),"\n线性模型:y=",w.numpy(),"*x+",b.numpy())
#print("权值w={0}\n偏置值b={1}\n线性模型:y={0}*x+{1}".format(w.numpy(),b.numpy()))
#输出:
权值w= 0.8945604 
偏置值b= 5.4108505 
线性模型:y= 0.8945604 *x+ 5.4108505
#若用下面那个已经注释掉的print,输出的小数位数会奇怪地变长:
权值w=0.8945603966712952
偏置值b=5.410850524902344
线性模型:y=0.8945603966712952*x+5.410850524902344

预测

In[10]:
    x_test=tf.constant([128.15,45.00,141.43,106.27,99.00,53.84,85.36,70.00])
    y_pred=w*x_test+b      #广播机制
    y_pred
Out[10]: 
    <tf.Tensor: shape=(8,), dtype=float32, numpy=
    array([120.04876 ,  45.66607 , 131.92853 , 100.475784,  93.97233 ,
            53.573982,  81.77052 ,  68.030075], dtype=float32)>
  • 画图
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
plt.rcParams["font.family"] = "SimHei"
x=tf.constant([137.97,104.50,100.00,124.32,79.20,99.00,124.00,114.00,
               106.69,138.05,53.75,46.91,68.00,63.02,81.26,86.21])
y=tf.constant([145.00,110.00,93.00,116.00,65.32,104.00,118.00,91.00,
               62.00,133.00,51.00,45.00,78.50,69.65,75.69,95.30])
#计算模型
meanX=tf.reduce_mean(x)  #x均值
meanY=tf.reduce_mean(y)  #y均值
sumXY=tf.reduce_sum((x-meanX)*(y-meanY))  #利用广播机制求:w的分子部分
sumX =tf.reduce_sum((x-meanX)*(x-meanX))  #利用广播机制求:w的分母部分

w=sumXY/sumX    #求斜率w,TensorFlow默认是32位浮点数,所以小数部分短一些
b=meanY-w*meanX #求截距b
print("权值w=",w.numpy(),"\n偏置值b=",b.numpy(),"\n线性模型:y=",w.numpy(),"*x+",b.numpy())
#print("权值w={0}\n偏置值b={1}\n线性模型:y={0}*x+{1}".format(w.numpy(),b.numpy()))#这样子输出的小数位数有古怪
#估计房价
x_test=np.array([128.15,45.00,141.43,106.27,99.00,53.84,85.36,70.00])
y_pred=(w*x_test+b).numpy()     #广播机制
print("面积\t估计房价")
for i in range(len(x_test)):
    print(x_test[i],"\t",round(y_pred[i],2))
#可视化
plt.figure()
plt.scatter(x, y, color="red",label="销售记录")
plt.scatter(x_test, y_pred, color="blue",label="预测房价")
plt.plot(x_test,y_pred,color="green",label="拟合曲线",linewidth=2)

plt.xlabel("面积(平方米)",fontsize=14)
plt.ylabel("价格(万元)",fontsize=14)
plt.suptitle("商品房销售价格评估",fontsize=20)

plt.legend(loc="upper left")
plt.show()

输出

权值w= 0.8945604 
偏置值b= 5.4108505 
线性模型:y= 0.8945604 *x+ 5.4108505
面积	估计房价
128.15 	 120.05
45.0 	 45.67
141.43 	 131.93
106.27 	 100.48
99.0 	 93.97
53.84 	 53.57
85.36 	 81.77
70.0 	 68.03

在这里插入图片描述

  • 采用sklearn库的linear_model:
import numpy as np
from sklearn.linear_model import LinearRegression  #线性回归
x=np.array([137.97,104.50,100.00,124.32,79.20,99.00,124.00,114.00,
               106.69,138.05,53.75,46.91,68.00,63.02,81.26,86.21])
y=np.array([145.00,110.00,93.00,116.00,65.32,104.00,118.00,91.00,
               62.00,133.00,51.00,45.00,78.50,69.65,75.69,95.30])

lr=LinearRegression()   #创建一个线性回归模型
x_new=x.reshape(-1,1)
y_new=y.reshape(-1,1)
lr.fit(x_new,y_new)     #训练出线性模型,需要x、y是二维数据
w=lr.coef_          #系数
b=lr.intercept_     #截距
print('w=',w,'\nb=',b)
#输出:
w= [[0.89456051]] 
b= [5.41084034]

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

服务器双网卡NCCL通过交换机通信

1、NCCL变量设置 export CUDA_DEVICE_MAX_CONNECTIONS1 export NCCL_SOCKET_IFNAMEeno2 export NCCL_IB_DISABLE0 #export NCCL_NETIB export NCCL_IB_HCAmlx5_0,mlx5_1 export NCCL_IB_GID_INDEX3 export NCCL_DEBUGINFOGPUS_PER_NODE4MASTER_ADDR192.168.1.2 MASTER_PORT600…

PySide6 Qt for Python Qt Quick参考网址

Qt QML BOOK&#xff1a; 《Qt for Python》 -Building an Application https://www.qt.io/product/qt6/qml-book/ch19-python-build-app#signals-and-slots Qt for Python&#xff1a;与C版本的差异即BUG处理&#xff08;常见的DLL文件确实的问题等&#xff09; Qt for Pyt…

NineData云原生智能数据管理平台新功能发布|2024年12月版

本月发布 7 项更新&#xff0c;其中重点发布 2 项、功能优化 5 项。 重点发布 数据库 Devops - Oracle 非表对象支持可视化创建与管理 Oracle 非表对象&#xff0c;包括视图&#xff08;View&#xff09;、包&#xff08;Package&#xff09;、存储过程&#xff08;Procedur…

【Elasticsearch7.11】postman批量导入少量数据

JSON 文件内的数据格式&#xff0c;json文件数据条数不要过多&#xff0c;会请求参数过大&#xff0c;最好控制再10000以内。 {"index":{"_id":"baec07466732902d22a24ba01ff09751"}} {"uuid":"baec07466732902d22a24ba01ff0975…

用Kimi做研究:准实验设计的智能解决方案

目录 1.研究策略设计 2.过程框架设计 3.背景变量 4.细节设计 准实验设计是一种介于实验与观察研究之间的研究方法&#xff0c;准实验设计是在无法完全控制实验条件的情况下进行因果关系的探索。与传统实验设计相比&#xff0c;准实验设计不具备随机分配实验对象到各处理组的…

零基础入门Erlang

1.Erlang介绍 Index - Erlang/OTP Erlang是一种通用的面向并发的编程语言 Erlang是一个结构化&#xff0c;动态类型编程语言&#xff0c;内建并行计算支持 使用Erlang来编写分布式应用要简单的多&#xff0c;因为它的分布式机制是透明的 1.1 为什么选择Erlang 需要处理大量…

JavaWeb开发(九)JSP技术

1. JavaWeb JSP技术 1.1. JSP简介 1.1.1. 什么是JSP JSP全名为Java Server Page 是为了简化servlet的工作而出现的替代品。在JSP中java代码与HTML共同存在&#xff0c;其中HTML代码用于展示静态的内容&#xff0c;java代码用来展示动态的内容。 1.1.2. 为什么出现JSP技术 19…

鸿蒙UI开发——Toast即时提示框的使用

1、概 述 Toast提示又称即时反馈&#xff0c;是一种临时性的消息提示框&#xff0c;用于向用户显示简短的操作反馈或状态信息。它通常在屏幕的底部或顶部短暂弹出&#xff0c;随后在一段时间后自动消失。即时反馈的主要目的是提供简洁、不打扰的信息反馈&#xff0c;避免干扰用…

基于Spring Boot的海滨体育馆管理系统的设计与实现

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的海滨体育馆管理系统的设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 宠物医院…

【UE5 C++课程系列笔记】24——多线程基础——Async

目录 概念 Async函数应用案例 概念 Async 函数的原型如下 template<typename TFunction> auto Async(EAsyncExecution::Type ExecutionType, TFunction&& Function) -> decltype(Function); Async 函数是一个模板函数&#xff0c;接受两个主要参数&#x…

【环境搭建】Metersphere v2.x 容器部署教程踩坑总结

前言 Metersphere部署过程中遇到的问题有点多&#xff0c;原因是其容器的架构蛮复杂的&#xff0c;比较容易踩坑&#xff0c;所以记录一下。 介绍 MeterSphere 是开源持续测试平台&#xff0c;遵循 GPL v3 开源许可协议&#xff0c;涵盖测试管理、接口测试、UI 测试和性能测…

RabbitMQ-SpringAMQP使用介绍

RabbitMQ 1. Spring AMQP1.1 引入依赖1.2 消息发送1.3 消息接收1.4 WorkQueue模型1.4.1 实例代码1.4.2 能者多劳1.4.3 总结 1.5交换机1.6 Fanout交换机&#xff08;广播&#xff09;1.7 Direct交换机&#xff08;订阅&#xff09;1.8 Topic交换机&#xff08;通配符订阅&#x…

Can I Use 实战指南:优化你的前端开发流程

引言 浏览器兼容性问题一直是前端开发中最令人头疼的难题。无论是新技术的支持差异&#xff0c;还是老旧浏览器的兼容需求&#xff0c;开发者常常需要花费大量时间解决这些问题。而 Can I Use 正是为此而生的前端开发利器。它提供详尽的浏览器兼容性数据&#xff0c;帮助开发者…

会员制营销与门店业绩提升:以开源AI智能名片S2B2C商城小程序为例的深度剖析

摘要&#xff1a;在数字化时代&#xff0c;会员制营销已成为企业提升门店业绩、增强客户黏性的重要策略。然而&#xff0c;仅仅将会员制营销视为提升业绩的手段&#xff0c;显然过于笼统&#xff0c;缺乏精准性。本文基于“业绩客量客单回头次数”的公式&#xff0c;深入探讨了…

/src/utils/request.ts:axios 请求封装,适用于需要统一处理请求和响应的场景

文章目录 数据结构解释1. 核心功能2. 代码结构分析请求拦截器响应拦截器 3. 改进建议4. 总结 console.log(Intercepted Response:, JSON.stringify(response));{"data": {"code": 0,"msg": "成功","data": {"id":…

Ubuntu24.04安装AppImage报错AppImages require FUSE to run.

报错如下&#xff1a; 解决&#xff1a; sudo apt install libfuse2t64如果不行&#xff1a; sudo add-apt-repository universe sudo apt install libfuse2t64安装时又报错&#xff1a; [10354:0109/100149.571068:FATAL:setuid_sandbox_host.cc(158)] The SUID sandbox hel…

2025新春烟花代码(二)HTML5实现孔明灯和烟花效果

效果展示 源代码 <!DOCTYPE html> <html lang"en"> <script>var _hmt _hmt || [];(function () {var hm document.createElement("script");hm.src "https://hm.baidu.com/hm.js?45f95f1bfde85c7777c3d1157e8c2d34";var …

同步整流 MT6705 应用注意事项

MT6705 是用于反激式变换器的高性能45V 同步整流器。它兼容各种反激转换器类型。支持 DCM、CCM 和准谐振模式。MT6705集成了一个40V功率MOSFET&#xff0c;可以取代肖特基二极管&#xff0c;提高效率。MT6705 PCB 布局应遵循以下规则: 1、VCC 电容器: VCC 引脚必须放置电容,电容…

LLaMA-Factory web微调大模型并导出大模型

LLaMA-Factory 开源大模型如LLaMA&#xff0c;Qwen&#xff0c;Baichuan等主要都是使用通用数据进行训练而来&#xff0c;其对于不同下游的使用场景和垂直领域的效果有待进一步提升&#xff0c;衍生出了微调训练相关的需求&#xff0c;包含预训练&#xff08;pt&#xff09;&am…

Jenkins内修改allure报告名称

背景&#xff1a; 最近使用Jenkins搭建自动化测试环境时&#xff0c;使用Jenkins的allure插件生成的报告&#xff0c;一直显示默认ALLURE REPORT&#xff0c;想自定义成与项目关联的名称&#xff0c;如图所示&#xff0c;很明显自定义名称显得高大上些&#xff0c;之前…