python机器学习——回归模型评估方法 回归算法(线性回归、L2岭回归)

news2024/12/26 14:18:15

目录

  • 回归模型评价方法
  • 【回归】线性回归模型
    • 1.线性模型
    • 2.线性回归
    • 3.损失函数(误差大小)
    • 4.解决方法
      • 1) 最小二乘法之正规方程
      • 2) 最小二乘法之梯度下降
    • 5.代码实现
    • 5+.模型保存与加载
    • 6.特点
  • 实例:波士顿房价
  • 【回归】带有L2正则化的岭回归


回归模型评价方法

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

from sklearn.metrics import explained_variance_score,\
mean_absolute_error,\
mean_squared_error,\
median_absolute_error,r2_score
print('Boston数据线性回归模型的平均绝对误差为:',
     mean_absolute_error(y_test,y_pred))
print('Boston数据线性回归模型的均方误差为:',
     mean_squared_error(y_test,y_pred))
print('Boston数据线性回归模型的中值绝对误差为:',
     median_absolute_error(y_test,y_pred))
print('Boston数据线性回归模型的可解释方差值为:',
     explained_variance_score(y_test,y_pred))
print('Boston数据线性回归模型的R方值为:',
     r2_score(y_test,y_pred))

在这里插入图片描述

【回归】线性回归模型

1.线性模型

在这里插入图片描述

2.线性回归

定义:线性回归通过一个或者多个自变量与因变量之间之间进行建模的回归分析。其中特点为一个或多个称为回归系数的模型参数的线性组合
在这里插入图片描述

3.损失函数(误差大小)

在这里插入图片描述

4.解决方法

1) 最小二乘法之正规方程

在这里插入图片描述

2) 最小二乘法之梯度下降

在这里插入图片描述
在这里插入图片描述

5.代码实现

正规方程:

sklearn.linear_model.LinearRegression()

梯度下降:

sklearn.linear_model.SGDRegressor()

在这里插入图片描述

5+.模型保存与加载

from sklearn.externals import joblib
# 保存训练好的模型
joblib.dump(lr, "./test.pkl")
# # 预测房价结果
model = joblib.load("./test.pkl")
y_predict = std_y.inverse_transform(model.predict(x_test))
print("保存的模型预测的结果:", y_predict)

6.特点

特点:线性回归器是最为简单、易用的回归模型。

  • 从某种程度上限制了使用,尽管如此,在不知道特征之间关系的前提下,我们仍然使用线性回归器作为大多数系统的首要选择。

  • 小规模数据:LinearRegression(不能解决拟合问题)以及其它大规模数据:SGDRegressor

实例:波士顿房价

在这里插入图片描述
在这里插入图片描述
模型训练:

from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression,SGDClassifier
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error, classification_report
import numpy as np
def myliner():
    '''
    线性回归直接预测房子价格
    :return:None
    '''
    #分隔数据集
    lb=load_boston()
    x_train, x_test, y_train, y_test = train_test_split(lb.data, lb.target, test_size=0.25)
    # print(x_train,x_test)
    #标准化处理
    # 特征工程(标准化)
    std = StandardScaler()
    # 对测试集和训练集的特征值进行标准化
    # 目标值也需要标准化处理!!!!实例化两个标准化API
    std_x = StandardScaler()
    x_train = std_x.fit_transform(x_train)
    x_test = std_x.transform(x_test)
    #目标值
    std_y = StandardScaler()
    y_train = std_y.fit_transform(y_train.reshape(-1,1))#要求数据是二维数据
    y_test = std_y.transform(y_test.reshape(-1,1))
    ###########################################
    # 正规方程
    lr = LinearRegression()
    lr.fit(x_train, y_train)
    print("正规方程的回归系数",lr.coef_)#得到的回归系数
    # 保存训练好的模型
    from sklearn.externals import joblib
    joblib.dump(lr, "./test.pkl")
    # 预测测试集的房子价格#逆操作,逆标准化
    y_lr_predict = std_y.inverse_transform(lr.predict(x_test))    # print("正规方程测试集里面每个房子的预测价格:", y_lr_predict)
    print("正规方程的均方误差:", mean_squared_error(std_y.inverse_transform(y_test), y_lr_predict))
    ###############################
    # # #梯度下降
    std_x1 = StandardScaler()
    x_train1 = std_x1.fit_transform(x_train)
    x_test1 = std_x1.transform(x_test)
    # 目标值
    std_y1 = StandardScaler()
    y_train1 = std_y1.fit_transform(y_train.reshape(-1, 1))  # 要求数据是二维数据
    y_test1 = std_y1.transform(y_test.reshape(-1, 1))
    y_train = y_train1.astype("int")
    x_train = x_train1.astype("int")
    sgd = SGDClassifier()
    sgd.fit(x_train, y_train)
    print("梯度下降得到的回归系数",sgd.coef_)  # 得到的回归系数
    # 保存训练好的模型
    from sklearn.externals import joblib
    joblib.dump(sgd, "./test.pkl")
    # 预测测试集的房子价格
    # y_sgd_predict = std_y.inverse_transform(sgd.predict(x_test))  # 逆操作,逆标准化
    # print("梯度下降测试集里面每个房子的预测价格:", y_sgd_predict)
    # print("梯度下降的均方误差:", mean_squared_error(std_y.inverse_transform(y_test), y_sgd_predict))
if __name__ == '__main__':
    myliner()

进行预测

from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
## 加载boston数据
boston = load_boston()
X = boston['data']
y = boston['target']
names = boston['feature_names']
## 将数据划分为训练集测试集
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2,random_state=125)
## 建立线性回归模型
clf = LinearRegression().fit(X_train,y_train)
print('建立的LinearRegression模型为:','\n',clf)
## 预测训练集结果
y_pred = clf.predict(X_test)
print('预测前20个结果为:','\n',y_pred[:20])
# 代码 6-25
import matplotlib.pyplot as plt
from matplotlib import rcParams
rcParams['font.sans-serif'] = 'SimHei'
fig = plt.figure(figsize=(10,6)) ##设定空白画布,并制定大小
##用不同的颜色表示不同数据
plt.plot(range(y_test.shape[0]),y_test,color="blue", linewidth=1.5, linestyle="-")
plt.plot(range(y_test.shape[0]),y_pred,color="red", linewidth=1.5, linestyle="-.")
plt.legend(['真实值','预测值'])
#plt.savefig('../tmp/聚类结果.png')
plt.show() ##显示图片

【回归】带有L2正则化的岭回归

在这里插入图片描述
在这里插入图片描述在这里插入图片描述正则化系数越大,权重趋近于0,模型越来越简单。

线性回归 LinearRegression与Ridge对比

在这里插入图片描述

from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression, SGDRegressor,  Ridge, LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error, classification_report
from sklearn.externals import joblib
import pandas as pd
import numpy as np
def rd():
    """
    线性回归直接预测房子价格
    :return: None
    """
    # 获取数据
    lb = load_boston()
    # 分割数据集到训练集和测试集
    x_train, x_test, y_train, y_test = train_test_split(lb.data, lb.target, test_size=0.25)
    print(y_train, y_test)
    # 进行标准化处理(?) 目标值处理?
    # 特征值和目标值是都必须进行标准化处理, 实例化两个标准化API
    std_x = StandardScaler()
    x_train = std_x.fit_transform(x_train)
    x_test = std_x.transform(x_test)
    # 目标值
    std_y = StandardScaler()
    y_train = std_y.fit_transform(y_train.reshape(-1, 1))
    y_test = std_y.transform(y_test.reshape(-1, 1))
    # # 预测房价结果
    # model = joblib.load("./tmp/test.pkl")
    # y_predict = std_y.inverse_transform(model.predict(x_test))
    # print("保存的模型预测的结果:", y_predict)
    # # estimator预测
    # 正规方程求解方式预测结果
    lr = LinearRegression()
    lr.fit(x_train, y_train)
    print(lr.coef_)
    # 保存训练好的模型
    # joblib.dump(lr, "./tmp/test.pkl")
    # 预测测试集的房子价格
    y_lr_predict = std_y.inverse_transform(lr.predict(x_test))
    print("正规方程测试集里面每个房子的预测价格:", y_lr_predict)
    print("正规方程的均方误差:", mean_squared_error(std_y.inverse_transform(y_test), y_lr_predict))
    # 梯度下降去进行房价预测
    sgd = SGDRegressor()
    sgd.fit(x_train, y_train)
    print(sgd.coef_)
    # 预测测试集的房子价格
    y_sgd_predict = std_y.inverse_transform(sgd.predict(x_test))
    print("梯度下降测试集里面每个房子的预测价格:", y_sgd_predict)
    print("梯度下降的均方误差:", mean_squared_error(std_y.inverse_transform(y_test), y_sgd_predict))
    # 岭回归去进行房价预测
    rd = Ridge(alpha=1.0)
    rd.fit(x_train, y_train)
    print(rd.coef_)
    # 预测测试集的房子价格
    y_rd_predict = std_y.inverse_transform(rd.predict(x_test))
    print("岭回归测试集里面每个房子的预测价格:", y_rd_predict)
    print("岭回归的均方误差:", mean_squared_error(std_y.inverse_transform(y_test), y_rd_predict))
    return None
if __name__ == '__main__':
    rd()

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

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

相关文章

C++初阶之类和对象(上)

类和对象(上) 1、面向过程和面向对象初步认识2、类的引入3、类的定义4、类的访问限定符及封装4.1 访问限定符4.2 封装 5、类的作用域6、类的实例化7、类对象模型7.1 如何计算类对象的大小 8.this指针8.1 this指针的引出8.2 this指针的特性8.3. C语言和C实…

Python开发工具PyCharm 2023.1发布,这些新功能都值得期待!

PyCharm 2023.1 现已正式发布!今年的第一个主要版本带来了对远程Jupyter Notebook的支持、对新UI的增强、改进的泛型类型推断等。 JetBrains PyCharm是一种Python IDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。此外&#xff0…

SpringBoot 使用 Testcontainers 进行容器化集成测试

SpringBoot 使用 Testcontainers 进行容器化集成测试 容器化集成测试是测试应用程序与其依赖项之间的集成,其中依赖项以容器的形式运行。SpringBoot提供了Testcontainers来测试应用程序与依赖项之间的集成,本文将介绍如何使用Testcontainers进行容器化集…

详细解说一次性低代码和持续化低代码的关键区别在哪里

为什么很多开发团队吐槽低代码开发平台,其中大致归结了几个方面的原因: 1、使用过后会降低对技术的依赖度,工具人的倾向更加严重 2、目前大部分的低代码都是一次性的低代码,仅仅是在第一次构建模型的时候,可以生成一…

CDC介绍

CDC介绍 1 CDC Change Data Capture:定义了一种场景,即识别并捕获数据库表中数据的变更,并交付给下游进一步处理。CDC是对针对行级数据记录的。其中数据的变更信息,即 CDC 的数据结构,包括变更是什么样的操作&#x…

《JDK8特性深入讲解》学习笔记

Lambda表达式 如果不适用lambda表达式的话,可以使用匿名内部类,但是代码会显得有点多 lambda表达式其实就是匿名内部类 Lambda表达式简化了匿名内部类的使用,语法更加简单。 语法规则 (参数类型 参数名称) -> {代码体; } Lambda表达…

Unreal 5 实现Data Table 数据表格的使用

数据是一个游戏重要的组成部分,按分工,数据会交由策划去配置,所以,你的数据不可能直接写到蓝图里面,而是有一个专门的数据表格去配置。 大家通用的方式是策划在Excel内编辑完成,然后通过工具生成游戏需要使…

RabbitMQ安装以及SpringBoot整合RabbitMQ

SpringBootMQ整合Rabbit RabbitMQ安装以及SpringBoot整合 1、Docker安装RabbitMQ #拉取rabbitmq镜像 docker pull rabbitmq#启动RabbitMQ docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq#安装图形化插件 #进入容器 docker exec -i…

ubantu16.04搭建Qt环境

目录 ubantu16.04搭建Qt环境 下载opensource 安装qmake 安装g以及依赖库 配置环境 编译原码 安装make 查看qmake是否安装 配置环境变量 qmake编译c/c代码 安装qtcreator Linux编译Qt代码 ubantu16.04搭建Qt环境 下载opensource 「下载 qt-everywhere-opensource-s…

用于配电室的内部环境监控系统设计与产品选型

摘要:配电室是配电系统的重要组成部分,影响着电力用户的用电需求,需要保障其安全、可靠运行。针对配电室内部环境进行了深入分析,设计了一种内部环境监控系统。通过该系统可以采集配电室内部的温度、湿度、液位、SF6气体和烟雾&am…

伪随机码详解

本专栏包含信息论与编码的核心知识,按知识点组织,可作为教学或学习的参考。markdown版本已归档至【Github仓库:https://github.com/timerring/information-theory 】或者公众号【AIShareLab】回复 信息论 获取。 文章目录 伪随机码伪随机序列…

期末复习【网络安全】

期末复习【网络安全】 前言推荐期末复习第1章 引言1.1 计算机安全概念1.2 OSI安全体系结构 61.3 安全攻击 71.3.1 被动攻击1.3.2 主动攻击 第2章 对称加密和消息机密性2.1 对称加密原理 232.1.3 Feistel密码结构 25 2.2 对称分组加密算法 272.2.1 数据加密标准2.2.2 三重DES2.2…

【C#】并行编程实战:任务并行性(下)

本章继续介绍任务并行性,因篇幅所限,本章为下篇。 6、处理任务异常 所有优秀的程序员都擅长高效地处理异常,这也是并行编程最重要的方面之一。任务并行库(TPL)提供了一种高效的设计来处理异常:任务中发生的…

山西电力市场日前价格预测【2023-06-26】

日前价格预测 预测明日(2023-06-26)山西电力市场全天平均日前电价为395.92元/MWh。其中,最高日前价格为477.34元/MWh,预计出现在19: 00。最低日前电价为309.90元/MWh,预计出现在13: 00。以上预测仅供学习参考&#xff…

Android中的EventBus变迁史

Android中的EventBus变迁史 什么是EventBus? EventBus是软件架构中使用的一种通信机制,用于促进系统内不同组件或服务之间的事件交换。它为组件提供了一种发布和订阅事件的方法,从而实现松散耦合和异步通信。 EventBus充当中央集线器或消息…

SpringBoot 性能优化的主要组件及特点

SpringBoot 性能优化的主要组件及特点 简介 在开发应用程序时,性能是一个非常重要的因素。如果应用程序的性能不佳,那么它可能会影响用户的体验,甚至会导致系统崩溃。而在 SpringBoot 应用程序中,我们可以通过一些组件来优化应用…

PCB板为什么要做表面处理?你知道吗

PCB板为什么要做表面处理? 由于PCB上的铜层很容易被氧化,因此生成的铜氧化层会严重降低焊接质量,从而降低最终产品的可靠性和有效性,为了避免这种情况的发生,需要对PCB进行表面处理。 常见的表面处理方式包括OSP、喷…

Java虚拟机(JVM)面试题

JVM 说一下 JVM 的主要组成部分及其作用? 总体来说,方法区和堆是所有线程共享的内存区域;而虚拟机栈、本地方法栈和程序计数器的运行是线程私有的内存区域,运行时数据区域就是我们常说的JVM的内存 类加载子系统:根据…

SpringBoot 使用 MockMvc 进行 Web 集成测试

SpringBoot 使用 MockMvc 进行 Web 集成测试 在 SpringBoot 应用程序中,我们可以使用 MockMvc 进行 Web 集成测试。MockMvc 是一个测试框架,可以模拟 HTTP 请求和响应,并且可以使用 Spring MVC 的控制器进行测试。MockMvc 可以让我们测试 Sp…

Apollo分布式配置中心(一)

目录 什么是配置? 什么是配置中心? 配置中心需要满足条件 什么是Apollo? Apollo特性 Apollo执行流程 Apollo安装 Git地址: 用户手册: 环境准备: 使用idea 的git clone 拉取源码 修改Apollo\scripts…