线性回归实例

news2024/11/18 11:30:46
1、线性回归(linear Regression)和逻辑回归(logistic Regression)的区别

线性回归主要是用来拟合数据,逻辑回归主要是用来区分数据,找到决策边界。

线性回归的代价函数常用平方误差函数,逻辑回归的代价函数常用交叉熵。

参数优化的方法都是常用梯度下降。

eg:

现有一组面积和房价的数据,现在有个朋友要卖房子,120平方米,大概能卖多少钱?

就可以通过这组数据建立一个线性模型,然后用这组数据去拟合模型,拟合完毕后,输入120,它就会告诉你朋友能卖多少钱。

补充:(这是一个监督学习,且是回归问题,回归问题指的是预测一个具体的数据输出,即房价)

补充2:(监督学习中还有一种分类问题,用来预测离散值输出,如观察肿瘤大小,来判断是良性合适恶性,输出只有两种:【0】良性,【1】恶性)

逻辑回归也被称为对数几率回归,实际上是用线性回归解决分类问题的分类模型(在线性回归的基础上,加了一层sigmoid函数,将线性函数变为非线性函数),sigmoid函数的形状呈‘S’形,它能将任意实数映射到0~1之间的某个概率值上;

线性回归一般用于数据预测,预测结果一般为实数;

逻辑回归一般用户分类预测,预测结果一般为某类可能的概率。

2、波士顿房价线性回归案例:
1)获取数据集:

在sklearn1.2版本之前,可用from sklearn.datasets import load_boston # 从读取房价数据存储在变量 boston 中。 boston = load_boston()

在sklearn1.2版本之后,因为某些原因移除了该数据集,

可用如下代码实现:

#导入波士顿房价,自版本1.2之后移除了该数据集,可以通过如下方法获取
from sklearn.datasets import fetch_openml
data_x,data_y=fetch_openml(name='boston',version=1,as_frame=True,return_X_y=True,parser='pandas')

如果出现证书报错:urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certi,可以加入如下代码:

#全局取消证书验证,使用fetch_opneml下载数据时候避免报错
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
2)划分训练集测试集:
#随机采样25%的数据构建测试样本,其余作为训练样本
from sklearn.model_selection import train_test_split
X_train,X_test,Y_train,Y_test=train_test_split(data_x,data_y,random_state=33,test_size=0.25)
#分析回归目标值的差异:
print(np.max(data_y),np.min(data_y),np.mean(data_y))
3)数据标准化:
#先导入数据标准化模块
from sklearn.preprocessing import StandardScaler
#分别初始化对特征和目标值的标准化器
ss_X=StandardScaler()
ss_Y=StandardScaler()
#分别对训练和测试数据的特征及目标值进行标准化处理
X_train=ss_X.fit_transform(X_train)
X_test=ss_X.transform(X_test)
Y_train=ss_Y.fit_transform(Y_train.values.reshape(-1,1))
Y_test=ss_Y.transform(Y_test.values.reshape(-1,1))
#reshape(-1,1)将所有行的数据化为1列
#reshape(1,-1)将所有列的数据化为1行
4)用线性回归模型和随机梯度下降分别对美国波士顿房价进行预测
from sklearn.linear_model import LinearRegression
#使用默认配置初始化线性回归器LinearRegression
lr=LinearRegression()
#使用训练数据进行参数估计
lr.fit(X_train,Y_train[:,0])
print('系数:',lr.coef_)
print('偏置:',lr.intercept_)
#对测试数据进行回归预测
lr_y_predict=lr.predict(X_test)
#导入初始线性回归器
from sklearn.linear_model import SGDRegressor
sgdr=SGDRegressor()
#使用训练数据进行参数估计
sgdr.fit(X_train,Y_train[:,0])
#对测试数据集进行回归预测
sgdr_y_predict=sgdr.predict(X_test)
系数&偏置:

系数: [-0.1147262   0.13081062  0.01168159  0.09047604 -0.17816355  0.3189522
 -0.01783831 -0.33316307  0.26809803 -0.21757932 -0.20355027  0.05513145
 -0.40687576]
偏置: 9.643684906345349e-16

5)性能评测
#使用LinearRegression模型自带的评估模块,并输出评估结果
print('The value of default measurement of LinearRegression is',lr.score(X_test,Y_test))
#从sklearn.metrics依次导入r2_score、mean_squared_error、mean_absolute_error用于回归性能评估
from sklearn.metrics import r2_score,mean_squared_error,mean_absolute_error
#使用r2_score模块,评估结果
print('The value of R-squared of LinearRegression is ',r2_score(Y_test,lr_y_predict))
#使用mean_squared_error模块,评估结果
print('The mean squared error of LinearRegression is ',mean_squared_error(ss_Y.inverse_transform(np.array(Y_test).reshape(-1,1)),ss_Y.inverse_transform(np.array(lr_y_predict).reshape(-1,1))))
#使用mean_absolute_error模块,评估结果
print('The mean absolute error of LinearRegression is ',mean_absolute_error(ss_Y.inverse_transform(np.array(Y_test).reshape(-1,1)),ss_Y.inverse_transform(np.array(lr_y_predict).reshape(-1,1))))

#使用SGDRegressor模型自带的评估模块,并输出评估结果
print('The value of default measurement of SGDRegressor is',lr.score(X_test,Y_test))
from sklearn.metrics import r2_score,mean_squared_error,mean_absolute_error
#使用r2_score模块,评估结果
print('The value of R-squared of SGDRegressor is ',r2_score(Y_test,sgdr_y_predict))
#使用mean_squared_error模块,评估结果
print('The mean squared error of SGDRegressor is ',mean_squared_error(ss_Y.inverse_transform(np.array(Y_test).reshape(-1,1)),ss_Y.inverse_transform(np.array(sgdr_y_predict).reshape(-1,1))))
#使用mean_absolute_error模块,评估结果
print('The mean absolute error of SGDRegressor is ',mean_absolute_error(ss_Y.inverse_transform(np.array(Y_test).reshape(-1,1)),ss_Y.inverse_transform(np.array(sgdr_y_predict).reshape(-1,1))))

评测结果:

The value of default measurement of LinearRegression is 0.6757955014529482
The value of R-squared of LinearRegression is  0.6757955014529482
The mean squared error of LinearRegression is  25.13923652035345
The mean absolute error of LinearRegression is  3.5325325437053974
The value of default measurement of SGDRegressor is 0.6757955014529482
The value of R-squared of SGDRegressor is  0.6670953292509274
The mean squared error of SGDRegressor is  25.813859135815584
The mean absolute error of SGDRegressor is  3.5114251714191758

3、完整代码:
import pandas as pd
import numpy as np


#全局取消证书验证,使用fetch_opneml下载数据时候避免报错
import ssl
ssl._create_default_https_context = ssl._create_unverified_context


#导入波士顿房价,自版本1.2之后移除了该数据集,可以通过如下方法获取
from sklearn.datasets import fetch_openml
data_x,data_y=fetch_openml(name='boston',version=1,as_frame=True,return_X_y=True,parser='pandas')
#随机采样25%的数据构建测试样本,其余作为训练样本
from sklearn.model_selection import train_test_split
X_train,X_test,Y_train,Y_test=train_test_split(data_x,data_y,random_state=33,test_size=0.25)
#分析回归目标值的差异:
print(np.max(data_y),np.min(data_y),np.mean(data_y))

#数据标准化
#先导入数据标准化模块
from sklearn.preprocessing import StandardScaler
#分别初始化对特征和目标值的标准化器
ss_X=StandardScaler()
ss_Y=StandardScaler()
#分别对训练和测试数据的特征及目标值进行标准化处理
X_train=ss_X.fit_transform(X_train)
X_test=ss_X.transform(X_test)
Y_train=ss_Y.fit_transform(np.array(Y_train).reshape(-1,1))
Y_test=ss_Y.transform(np.array(Y_test).reshape(-1,1))
#reshape(-1,1)将所有行的数据化为1列
#reshape(1,-1)将所有列的数据化为1行



#使用线性回归模型和随机梯度下降分别对美国波士顿房价进行预测
from sklearn.linear_model import LinearRegression
#使用默认配置初始化线性回归器LinearRegression
lr=LinearRegression()
#使用训练数据进行参数估计
lr.fit(X_train,Y_train[:,0])
print('系数:',lr.coef_)
print('偏置:',lr.intercept_)
#对测试数据进行回归预测
lr_y_predict=lr.predict(X_test)
#导入初始线性回归器
from sklearn.linear_model import SGDRegressor
sgdr=SGDRegressor()
#使用训练数据进行参数估计
sgdr.fit(X_train,Y_train[:,0])
#对测试数据集进行回归预测
sgdr_y_predict=sgdr.predict(X_test)


#性能评测
#使用LinearRegression模型自带的评估模块,并输出评估结果
print('The value of default measurement of LinearRegression is',lr.score(X_test,Y_test))
#从sklearn.metrics依次导入r2_score、mean_squared_error、mean_absolute_error用于回归性能评估
from sklearn.metrics import r2_score,mean_squared_error,mean_absolute_error
#使用r2_score模块,评估结果
print('The value of R-squared of LinearRegression is ',r2_score(Y_test,lr_y_predict))
#使用mean_squared_error模块,评估结果
print('The mean squared error of LinearRegression is ',mean_squared_error(ss_Y.inverse_transform(np.array(Y_test).reshape(-1,1)),ss_Y.inverse_transform(np.array(lr_y_predict).reshape(-1,1))))
#使用mean_absolute_error模块,评估结果
print('The mean absolute error of LinearRegression is ',mean_absolute_error(ss_Y.inverse_transform(np.array(Y_test).reshape(-1,1)),ss_Y.inverse_transform(np.array(lr_y_predict).reshape(-1,1))))

#使用SGDRegressor模型自带的评估模块,并输出评估结果
print('The value of default measurement of SGDRegressor is',lr.score(X_test,Y_test))
from sklearn.metrics import r2_score,mean_squared_error,mean_absolute_error
#使用r2_score模块,评估结果
print('The value of R-squared of SGDRegressor is ',r2_score(Y_test,sgdr_y_predict))
#使用mean_squared_error模块,评估结果
print('The mean squared error of SGDRegressor is ',mean_squared_error(ss_Y.inverse_transform(np.array(Y_test).reshape(-1,1)),ss_Y.inverse_transform(np.array(sgdr_y_predict).reshape(-1,1))))
#使用mean_absolute_error模块,评估结果
print('The mean absolute error of SGDRegressor is ',mean_absolute_error(ss_Y.inverse_transform(np.array(Y_test).reshape(-1,1)),ss_Y.inverse_transform(np.array(sgdr_y_predict).reshape(-1,1))))











4、运行结果:

5、分析补充

从指标上,线性回归效果要略好一些,因为前者是解析法,后者是估计,如果数据规模超过10万,那么用梯度下降比较好,节省时间。

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

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

相关文章

java每日一题——打印100以内个位和十位相同,尾数为1,3,5,7的数字

前言&#xff1a; 打好基础&#xff0c;daydayup! 题目&#xff1a;打印100以内个位和十位相同&#xff0c;尾数为1,3,5,7的数字 思路&#xff1a;1&#xff0c;个位通过对10求余数可求出1&#xff0c;3&#xff0c;5&#xff0c;7&#xff1b; 2&#xff0c;十位可通过先除10…

【Unity】【Pico】【VR开发】为何PICO打包后真机运行闪退

【背景】 设置步骤&#xff0c;项目配置都没问题&#xff0c;Build也成功&#xff0c;Unity版本是符合要求的2022LTS版本&#xff0c;但是一在真机上运行就闪退。 【分析】 由于并没有开版权验证&#xff0c;而且闪退后也并没有弹框说版权问题&#xff0c;所以还是怀疑环境有…

软件测试|Python成员运算符:使用方法与元素检查

简介 Python是一种功能强大的编程语言&#xff0c;提供了许多方便的工具来处理数据和集合。其中之一就是成员运算符&#xff0c;它允许我们在集合中检查特定元素的存在。在本文中&#xff0c;我们将深入探讨Python中的成员运算符&#xff0c;以及如何使用它来进行元素检查。 …

pyside6 捕捉主窗口关闭后,进行释放相关的资源

import sys from PySide6 import QtGui from PySide6.QtWidgets import QWidget,QApplication,QMessageBoxclass Message(QWidget):def __init__(self):# 如果希望窗口内嵌于其他部件&#xff0c;可添加parent参数super(Message, self).__init__()# 调用初始化方法self.initUI(…

使用Sqoop将数据导入Hadoop的详细教程

在大数据处理中&#xff0c;Sqoop是一个强大的工具&#xff0c;它可以将关系型数据库中的数据导入到Hadoop生态系统中&#xff0c;以便进行进一步的分析和处理。本文将提供一个详细的教程&#xff0c;以帮助大家了解如何使用Sqoop将数据导入Hadoop。 准备工作 在开始之前&…

【uniapp】新课uniapp零基础入门到项目打包(微信小程序/H5/vue/安卓apk)全掌握

一、uniapp和HBuilderX介绍 uni-app官方网站&#xff1a;https://uniapp.dcloud.net.cn/ 为什么要学习uniapp&#xff1f; 1、一套代码可以打包到不同的应用平台&#xff1b;一套代码编到十几个平台&#xff0c;这不是梦想。眼见为实&#xff0c;扫描以下二维码&#xff0c;…

uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -用户投票实现

锋哥原创的uniapp微信小程序投票系统实战&#xff1a; uniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )_哔哩哔哩_bilibiliuniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )共计21条视频…

爬虫利器一览

前言 爬虫&#xff08;英文&#xff1a;spider&#xff09;&#xff0c;可以理解为简单的机器人&#xff0c;如此一个“不为名利而活&#xff0c;只为数据而生&#xff0c;目标单纯&#xff0c;能量充沛&#xff0c;不怕日晒雨淋&#xff0c;不惧寒冬酷暑”的家伙&#xff0c;…

[嵌入式软件][入门篇] 搭建在线仿真平台(STM32)

文章目录 一、注册平台二、创建首个项目三、硬件介绍 一、注册平台 进入官方&#xff0c;进行注册&#xff1a; 在线仿真地址 二、创建首个项目 ① 新建项目 ② 搭建一个电路 ③ 用STM32F103搭建一个简单电路 ④ 进入编码界面 三、硬件介绍 红框是必看文档&#xff…

【RT-DETR有效改进】带你分析如何确定改进的基础模型,解决模型无法收敛精度很差的问题(ResNet官方一比一复现)

一、本文介绍 Hello&#xff0c;各位读者&#xff0c;距离第一天发RT-DETR的博客已经过去了接近两个月&#xff0c;这段时间里我深入的研究了一下RT-DETR在ultralytics仓库的使用&#xff0c;旨在为大家解决为什么用v8的仓库训练的时候模型不收敛&#xff0c;精度差的离谱的问…

Maven 依赖管理项目构建工具 教程

Maven依赖管理项目构建工具 此文档为 尚硅谷 B站maven视频学习文档&#xff0c;由官方文档搬运而来&#xff0c;仅用来当作学习笔记用途&#xff0c;侵删。 另&#xff1a;原maven教程短而精&#xff0c;值得推荐&#xff0c;下附教程链接。 atguigu 23年Maven教程 目录 文章目…

Skywalking UI页面中操作的各种实用功能汇总

刚刚接触skywalking不久&#xff0c;在这里总结一下在UI页面中操作的各种实用功能&#xff0c;随着使用的不断深入&#xff0c;我也会对文章进行持续补充。 本文skywalking 的ui入口是官方demo &#xff0c;版本是10.0.0-SNAPSHOT-593bd05 http://demo.skywalking.apache.org…

【GO语言依赖】Go语言依赖管理简述

在运行环境中&#xff0c;遭遇报错&#xff0c;显示找不到函数 经过研究后发现需要进行依赖管理&#xff0c;进行如下操作后解决&#xff1a; 起源 最早的时候&#xff0c;Go所依赖的所有的第三方库都放在GOPATH这个目录下面。这就导致了同一个库只能保存一个版本的代码。如…

vite 搭建vue3 TS项目初始框架

目录 仓库地址&#xff1a; 一.搭建项目 1.安装 Vite&#xff1a; 2.创建 Vue 3 项目&#xff1a; 3.进入项目目录&#xff1a; 4.安装依赖&#xff1a; 5.运行项目&#xff1a; 6.流程实操 二.修改项目结构&#xff0c;显示自定义的页面 1.整理静态样式文件 1.1.在 sr…

安泰电子功率放大器在设计电路时应该注意什么

在设计功率放大器电路时&#xff0c;有几个重要的因素需要特别注意。这些因素包括功率放大器的线性度、效率、稳定性、保护功能和适当的散热设计。下面将详细介绍每个因素&#xff0c;并说明在设计功率放大器电路时应该注意的要点。 线性度&#xff1a; 功率放大器的线性度是指…

OpenHarmony4.0Release系统应用常见问题FAQ

前言 自OpenHarmony4.0Release发布之后&#xff0c;许多小伙伴使用了配套的系统应用源码以及IDE作为基线开发&#xff0c;也遇到了各种各样的问题&#xff0c;这篇文档主要收录了比较常见的一些问题解答。 FAQ 系统应用源码在哪 目前OpenHarmony系统应用分为3种模式&#x…

Realm Management Extension领域管理扩展之调试跟踪分析

现代 Arm 系统包含大量功能以支持调试和性能分析。我们必须确保这些功能不能被用于危害系统安全。Arm 架构中,搭载 RME,提供了控制来限制系统的哪些部分可以进行调试。 本节假定读者熟悉 Armv9-A 中的基本功能,并总结了 RME 引入的变化。 外部调试 外部调试是指通过位于处…

RPCMS跨站脚本漏洞(xss)

CNVD-ID: CNVD-2024-01190 漏洞描述: RPCMS是一个应用软件&#xff0c;一个网站CMS系统。 RPCMS v3.5.5版本存在跨站脚本漏洞&#xff0c;该漏洞源于组件/logs/dopost.html中对用户提供的数据缺乏有效过滤与转义&#xff0c;攻击者可利用该漏洞通过注入精心设计的有效载荷执行…

深信服态势感知一体机SIP-1000 Y2100 3.0.1Y升级3.0.3Y步骤

当前版本&#xff1a;3.0.1Y 升级后版本&#xff1a;3.0.3Y PS&#xff1a;3.0.1Y不能直升3.0.3Y&#xff0c;需要先通过升级工具升级到3.0.2Y&#xff0c;再安装前置补丁从3.0.2Y升级到3.0.3Y&#xff1b;每一次升级时间为20-30分钟&#xff0c;设备升级会重启&#xff0c;需提…

Black Hole Alliance发展蓝图:从数字化到生态建设

Black Hole Alliance 以WEB3.0生态产业为核心&#xff0c;以强大的技术及社区为依托&#xff0c;确立了 " 区块链 生态产业 AI与Web3融合​ " 的底层架构&#xff0c;将区块链技术与全球生态产业有机融合&#xff0c;以价值交换网络为切入点及立足点&#xff0c;链…