线性回归实例

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万,那么用梯度下降比较好,节省时间。

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

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

相关文章

函数指针和回调函数

文章目录 一.函数指针1.什么是函数指针2.函数指针的形式3.函数指针的用途。1.调用函数2.作为参数进行传递 二.函数指针数组三.回调函数 一.函数指针 1.什么是函数指针 函数指针是指向函数的指针。在C语言和C中&#xff0c;函数指针可以用来存储函数的地址&#xff0c;并且可以…

Kotlin程序设计(二)面向对象

Kotlin程序设计中级篇 我们在前面已经学习了Kotlin程序设计的基础篇&#xff0c;本章我们将继续介绍更多Kotlin特性&#xff0c;以及面向对象编程。 函数 其实函数我们在一开始就在使用了&#xff1a; fun main() {println("Hello World") }我们程序的入口点就是…

恒创科技:解决Windows服务器磁盘空间不足的问题

​  服务器硬盘的大小是决定空间是否充足的主要因素。但在日常使用中&#xff0c;服务器和网站备份会消耗大量存储空间&#xff0c;如果维护不当&#xff0c;最终将耗尽您的容量。同样&#xff0c;日志文件、临时文件和数据库可以在硬盘驱动器上或回收站中无休止地建立。当您…

windows10使用Shift+Win+S快捷键来截图

有时候电脑上没有打开微信QQ等软件&#xff0c;但是想使用一下截图&#xff0c;就很麻烦&#xff0c;还好windows10开始已经支持快捷键截图了&#xff1a; 打开截图工具并获取屏幕截图 - Microsoft 支持 快捷键&#xff1a;ShiftWinS 使用教程&#xff1a; 顺带说下系统这个自…

Mingw32编译opencv库

文章目录 1. 准备工作2. 编译cmake构建程序mingw32-make编译 3. 安装4. 安装完的结果 注意&#xff1a; mingw32-make编译的库和MSVC编译的库不兼容&#xff0c;MSVC和mingw-make生成的动态库使用的是不同的ABI&#xff08;Application Binary Interface&#xff09;&#xff0…

货拉拉智能监控实践:如何解决多云架构下的故障应急问题?

一分钟精华速览 在月活超千万的大规模业务背景下&#xff0c;货拉拉遭遇了多云环境下的监控碎片化、规划无序等问题。为了应对这些挑战&#xff0c;货拉拉开发了一站式监控平台——Monitor。该平台的部署有效地实现了对核心应用的监控和报警全覆盖&#xff0c;显著提高了应急响…

【算法Hot100系列】组合总和

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

【算法】七夕祭

题目 七夕节因牛郎织女的传说而被扣上了「情人节」的帽子。 于是 TYVJ 今年举办了一次线下七夕祭。 Vani 同学今年成功邀请到了 cl 同学陪他来共度七夕&#xff0c;于是他们决定去 TYVJ 七夕祭游玩。 TYVJ 七夕祭和 11 区的夏祭的形式很像。 矩形的祭典会场由 N 排 M 列共…

作业--day45

定时播放 #include "mywidget.h" #include "ui_mywidget.h"MyWidget::MyWidget(QWidget *parent) :QWidget(parent),ui(new Ui::MyWidget) {ui->setupUi(this);ui->bg_lab->setPixmap(QPixmap(":/pictrue/shanChuan.jpg"));ui->bg_…

装饰器模式

装饰器模式 什么是装饰器模式: 是一种结构型设计模型&#xff0c;允许在不改变对象结构的情况下&#xff0c;动态的将新的功能添加到对象上&#xff0c; 核心思想&#xff1a; 通过组合而非继承的方式来实现功能的扩展。他可以在运行时动态的添加活移除对象的功能&#xff…

刷题第十六天-扰乱字符串

扰乱字符串 题目要求 解题思路 初步分析 给定两个字符串T和S&#xff0c;假设T是由S变换而来的 如果T和S长度不一样&#xff0c;必定不能变来如果长度一样&#xff0c;顶层字符串S能够划分 S 1 S_1 S1​和 S 2 S_2 S2​&#xff0c;同样字符串T也能够划分为 T 1 T_1 T1​和…

[问题记录] vue-router中导航守卫默认跳转login失败

问题 做博客后台的时候发现一个问题&#xff0c;在没启动服务的情况下&#xff0c;后台在 router 中并未读取到配置的情况下&#xff0c;应该默认跳转 login 页面。但是页面始终不跳转&#xff0c;并且伴随多个执行错误弹窗。 router.beforeEach(async (to, from, next) >…

常见类型的yaml文件如何编写?--kind: Job|CronJob

本次介绍两个关联度很高的类型&#xff0c;Job和CronJob。 Job基本说明 在 Kubernetes 中&#xff0c;Job 是一种用于运行一次性任务的资源对象。它用于确保在集群内部执行某个任务&#xff0c;即使任务运行失败或其中一个 Pod 发生故障时&#xff0c;也会进行重试。Job 可以…

软件测试|使用Pytest、Allure Step和Allure Attach创建详细测试报告

引言 在软件开发过程中&#xff0c;测试是不可或缺的一部分。为了更好地展示测试结果并定位问题&#xff0c;结合Pytest测试框架和Allure测试报告工具可以创建清晰、详细的测试报告。本文将介绍如何使用Pytest、Allure的allure.step()和allure.attach()功能来创建具有丰富信息…

AI嵌入式K210项目(2)-开发环境搭建

文章目录 前言windows开发环境&#xff08;vscode&#xff09;VSCode下载安装CMake下载安装交叉编译器Toolchain下载安装SDK下载安装Kflash下载安装镜像烧录 总结 前言 该教程先介绍使用C语言进行裸机开发&#xff0c;完成这一部分的学习之后在介绍如何使用MicroPython进行开发…

Django 框架添加管理员,完成对普通用户信息管理

前情回顾&#xff1a;Django框架 完成用户登录注册 文章目录 1.创建管理员2.完善管理员功能2.1增加管理员登录功能2.2完善展示用户信息功能2.3完善修改用户信息功能2.4完善删除用户信息功能 1.创建管理员 一般管理员都是直接指定&#xff0c;不开放页面注册&#xff0c;可以直…

工程机械比例阀电流采集方案——IPEhub2与IPEmotion APP

自从国家实施一带一路和新基建计划以来&#xff0c;工程机械的需求量呈现出快速增长的趋势。而关于工程机械&#xff0c;其比例阀的控制问题不容忽视。比例阀是一种新型的液压控制装置——在普通压力阀、流量阀和方向阀上&#xff0c;用比例电磁铁替代原有的控制部分&#xff0…

大创项目推荐 深度学习机器视觉车道线识别与检测 -自动驾驶

文章目录 1 前言2 先上成果3 车道线4 问题抽象(建立模型)5 帧掩码(Frame Mask)6 车道检测的图像预处理7 图像阈值化8 霍夫线变换9 实现车道检测9.1 帧掩码创建9.2 图像预处理9.2.1 图像阈值化9.2.2 霍夫线变换 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分…

C++ λ表达式

λ表达式提供了函数对象的另一种编程机制。 在 C 11 和更高版本中&#xff0c;Lambda 表达式&#xff08;通常称为 Lambda&#xff09;是一种在被调用的位置或作为参数传递给函数的位置定义匿名函数对象&#xff08;闭包&#xff09;的简便方法。 Lambda 通常用于封装传递给算法…

LLVM的安装步骤实战

目录 1. 准备环境 1.1 安装必备软件包 1.2 配置Git 2. 用CMake构建 2.1 克隆代码库 2.2 创建构建目录 2.3 生成构建系统文件 3. 自定义构建 3.1 CMake定义的变量 3.2 LLVM定义的变量 4. 总结 1. 准备环境 首先操作系统可以是Linux、FreeBSD、macOS或Windows。 同…