【机器学习】回归算法-线性回归分析、回归实例和回归性能评估

回归算法-线性回归分析、回归实例和回归性能评估

  • 线性回归
  • 损失函数(误差大小)
  • sklearn线性回归正规方程、梯度下降API
  • 线性回归实例

  • 回归:目标值连续;分类:目标值离散
    预测回归和分类是不一样的。回归问题可以用于预测销售额,比如公司的收入、广告可以影响会对销售额进行预测。
  • 举个例子:
    期末成绩:0.7×考试成绩+0.3×平时成绩
    西瓜好坏:0.2×色泽+0.5×根蒂+0.3×敲声
import matplotlib.pyplot as plt
plt.figure(figsize=(10,10))
plt.scatter([60,72,75,80,83],[126,151.2,157.5,168,174.3])
plt.show()

在这里插入图片描述
横坐标为面积;纵坐标为价格 分布关系为直线,预测按其趋势预测就ok。
线性回归就是寻找一种能预测的趋势。
在这里插入图片描述
以上就是一种线性关系。二维:直线。三维:特征与目标值在一个平面上。

在这里插入图片描述

线性回归

  • 定义:线性回归通过一个或者多个自变量与因变量之间之间进行建模的回归分析。其中特点为一个或多个称为回归系数的模型参数的线性组合
    一元线性回归:涉及到的变量只有一个
    多元线性回归:涉及到的变量两个或两个以上
    w为权重,b为偏置
  • 通用公式:
    在这里插入图片描述
    回归和神经网络都是迭代的算法。

损失函数(误差大小)

算法:线性函数
策略:损失函数(误差的平方和,最小二乘法)
优化:优化权重的过程
在这里插入图片描述
总损失定义:
在这里插入图片描述
又称最小二乘法

如何去求模型当中的W,使得损失最小?(目的是找到最小损失对应的W值)

  • 第一种方式:最小二乘法之正规方程

在这里插入图片描述
缺点:当特征过于复杂,求解速度太慢,对于复杂的算法,不能使用正规方程求解(逻辑回归等)

  • 损失函数直观图(单变量举例):直接求解到最小值

在这里插入图片描述

  • 第二种方式:最小二乘法之梯度下降(理解过程)

我们以单变量中的w0,w1为例子:
在这里插入图片描述
在这里插入图片描述
表示方向:在这里插入图片描述

理解:沿着这个函数下降的方向找,最后就能找到山谷的最低点,然后更新W值
使用:面对训练数据规模十分庞大的任务
在这里插入图片描述
学习率:下降的快慢。

sklearn线性回归正规方程、梯度下降API

sklearn.linear_model.LinearRegression
正规方程
sklearn.linear_model.SGDRegressor
梯度下降

LinearRegression、SGDRegressor

sklearn.linear_model.LinearRegression()
普通最小二乘线性回归
coef_:回归系数sklearn.linear_model.SGDRegressor( )
通过使用SGD最小化线性模型
coef_:回归系数

w就是回归系数
这里提下,
sklearn优点:封装好,建立模型简单,预测简单
缺点是:算法过程,有些参数都在算法API内部优化看不到 学习率不用指定
tensorflow:封装低,自己实现线性回归,学习率可以自己手动指定

线性回归实例

  • 1、sklearn线性回归正规方程、梯度下降API
  • 2、波士顿房价数据集分析流程

波士顿房价数据案例分析流程

  • 1、波士顿地区房价数据获取

  • 2、波士顿地区房价数据分割

  • 3、训练与测试数据标准化处理

  • 4、使用最简单的线性回归模型LinearRegression和梯度下降估计SGDRegressor对房价进行预测

回归性能评估
(均方误差(Mean Squared Error)MSE) 评价机制:
在这里插入图片描述
在这里插入图片描述
sklearn回归评估API

sklearn.metrics.mean_squared_error
mean_squared_error(y_true, y_pred)
均方误差回归损失
y_true:真实值
y_pred:预测值
return:浮点数结果

注:真实值,预测值为标准化之前的值
在这里插入图片描述

  • LinearRegression与SGDRegressor评估
  • 特点:线性回归器是最为简单、易用的回归模型。从某种程度上限制了使用,尽管如此,在不知道特征之
    间关系的前提下,我们仍然使用线性回归器作为大多数系统的首要选择。
    小规模数据:LinearRegression(不能解决拟合问题)以及其它
    大规模数据:SGDRegressor
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 npdef mylinear():"""线性回归直接预测房子价格: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)# 进行标准化处理(?) 目标值处理?# 特征值和目标值是都必须进行标准化处理, 实例化两个标准化APIstd_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)y_test = std_y.transform(y_test)# 预测房价结果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__":mylinear()

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

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

相关文章

scrapy使用代理报错keyerror: proxy_爬虫Scrapy框架-Crawlspider链接提取器与规则解析器...

Crawlspider一:Crawlspider简介CrawlSpider其实是Spider的一个子类,除了继承到Spider的特性和功能外,还派生除了其自己独有的更加强大的特性和功能。其中最显著的功能就是”LinkExtractors链接提取器“。Spider是所有爬虫的基类,其…

传智书城首页设计代码_(自适应手机版)响应式创意餐饮酒店装饰设计类网站织梦模板 html5蓝色餐饮酒店设计网站源码下载...

模板名称:(自适应手机版)响应式创意餐饮酒店装饰设计类网站织梦模板 html5蓝色餐饮酒店设计网站源码下载本套织梦模板采用织梦最新内核开发的模板,这款模板使用范围广,不仅仅局限于一类型的企业,创意设计、装饰设计、餐饮酒店设计…

【机器学习】逻辑回归—良/恶性乳腺癌肿瘤预测

逻辑回归—良/恶性乳腺癌肿瘤预测 逻辑回归的损失函数、优化 与线性回归原理相同,但由于是分类问题,损失函数不一样,只能通过梯度下降求解 sklearn逻辑回归API sklearn.linear_model.LogisticRegressionLogisticRegression sklearn.linear…

opencv mat初始化_【OpenCV入门之十二】看起来一样的图像竟然存在这么大的差别!...

小白导读学习计算机视觉最重要的能力应该就是编程了,为了帮助小伙伴尽快入门计算机视觉,小白准备了【OpenCV入门】系列。新的一年文章的内容进行了很大的完善,主要是借鉴了更多大神的文章,希望让小伙伴更加容易理解。如果小伙伴觉…

LeetCode 1854. 人口最多的年份(差分)

文章目录1. 题目2. 解题1. 题目 给你一个二维整数数组 logs ,其中每个 logs[i] [birthi, deathi] 表示第 i 个人的出生和死亡年份。 年份 x 的 人口 定义为这一年期间活着的人的数目。 第 i 个人被计入年份 x 的人口需要满足:x 在闭区间 [birthi, dea…

服务端_说说Netty服务端启动流程

点击上方☝SpringForAll社区 轻松关注!及时获取有趣有料的技术文章本文来源:http://yeming.me/2016/03/12/netty1/netty服务端代码分析服务端启动配置对于 ServerBootstrap:ServerBootstrap继承于 AbstractBootstrap,它从父类继承…

ztree在刷新时第一个父节点消失_第一个关于中式菜谱的智能问答机器人小程序正式上线啦...

为了满足大家对菜品烹饪的各类问题能直接得到答案的需求,我开发了目前第一个真正关于菜谱的智能问答系统,并在微信小程序发布上线。这套系统支持对于8600多种菜品的问答功能,并能实现快速问答响应,整套系统后端依托于搭建的中式菜…

LeetCode 1855. 下标对中的最大距离(双指针)

文章目录1. 题目2. 解题1. 题目 给你两个 非递增 的整数数组 nums1​​​​​​ 和 nums2​​​​​​ &#xff0c;数组下标均 从 0 开始 计数。 下标对 (i, j) 中 0 < i < nums1.length 且 0 < j < nums2.length 。如果该下标对同时满足 i < j 且 nums1[i] …

【Python基础知识-pycharm版】第一节-基础

python第一节特点Python 解释器python开发环境交互模式IDLE开发环境使用入门程序基本格式图形化程序设计python程序的构成python程序的对象python的引用python的标识符标识符命名规则变量和简单赋值语句删除变量和垃圾回收机制Python 是一种解释型、面向对象的语言。 官网&…

c++对象回收string类型成员时coredump_本体技术视点 | 虚拟机中引用性动态语言对象模型思考...

1引言Ontology 的 NeoVM 虚拟机新增加了 DCALL、HAS_KEY、KEYS 以及 VALUES 等几条新的指令。因此&#xff0c;基于 NeoVM 的引用性动态语言对象的设计理论上可行&#xff0c;这可使得当前语言的支持能更接近原生语义。对象模型设计的必要性Ontology NeoVM 对用户暴露的对象语义…

LeetCode 1856. 子数组最小乘积的最大值(前缀和 + 单调栈)

文章目录1. 题目2. 解题1. 题目 一个数组的 最小乘积 定义为这个数组中 最小值 乘以 数组的 和 。 比方说&#xff0c;数组 [3,2,5] &#xff08;最小值是 2&#xff09;的最小乘积为 2 * (325) 2 * 10 20 。 给你一个正整数数组 nums &#xff0c;请你返回 nums 任意 非空…

【Python基础知识-pycharm版】第二节-赋值/数据类型/时间点/运算符/字符串

python第二节链式赋值_系列解包赋值内置数据类型时间表示unix时间点多点坐标绘出折线图运算符字符串部分来源&#xff1a;1.https://blog.csdn.net/wys103158/article/details/964882382.https://www.cnblogs.com/jack-zh/p/10810569.html3.http://c.biancheng.net/view/4258.h…

LeetCode 1859. 将句子排序

文章目录1. 题目2. 解题1. 题目 一个 句子 指的是一个序列的单词用单个空格连接起来&#xff0c;且开头和结尾没有任何空格。每个单词都只包含小写或大写英文字母。 我们可以给一个句子添加 从 1 开始的单词位置索引 &#xff0c;并且将句子中所有单词 打乱顺序 。 比方说&a…

java 拦截器_Spring的春天来啦——百战Java课程更新(2019.09.06)

百战程序员运营400天&#xff0c;课程突破10000节&#xff0c;周周有新课更新&#xff0c;保持行业领先&#xff0c;九大专业运营。注册人数突破70万人&#xff0c;超级VIP用户累计8358人。百战程序员&#xff0c;由50专家、精英讲师组成课程研究院&#xff0c;根据市场发展和企…

LeetCode 1860. 增长的内存泄露(等差数列)

文章目录1. 题目2. 解题1. 题目 给你两个整数 memory1 和 memory2 分别表示两个内存条剩余可用内存的位数。 现在有一个程序每秒递增的速度消耗着内存。 在第 i 秒&#xff08;秒数从 1 开始&#xff09;&#xff0c;有 i 位内存被分配到 剩余内存较多 的内存条&#xff08;如…

argumentoutofrangeexception:长度不能小于0_数组长度属性背后的魔力有哪些?

开发人员每天都会处理数组。作为集合&#xff0c;要查询的重要属性是项目数&#xff1a;Array.prototype.length。在JavaScript中&#xff0c;length它并不总是指示现有元素的数量&#xff08;对于稀疏数组&#xff09;&#xff0c;并且修改此属性可能会删除元素。让我们揭开这…

【Python基础知识-pycharm版】第四节-元组

元组元组的创建元组的元素访问和计数生成器推导式创建元组列表属于可变序列&#xff0c;可以任意修改列表中的元素&#xff0c;元组属于不可变序列&#xff0c;不能修改元组中的元素。因此&#xff0c;元组没有增加元素、修改元素、删除元素相关的方法。 因此&#xff0c;我们只…

人员离职it检查_?「市安委会第十七检查组」值班人员擅离职守,变压器房随意出入...

近日&#xff0c;市安委会第十七检查组深入浮山县隆顺矿业有限公司&#xff0c;细心查摆&#xff0c;全面梳理企业存在的安全隐患。日前&#xff0c;我们召开了安全生产工作会议&#xff0c;传达了市县相关要求和有关领导的指示批示&#xff0c;要求全体干部职工进一步提高安全…

LeetCode 1861. 旋转盒子(前缀和)

文章目录1. 题目2. 解题1. 题目 给你一个 m x n 的字符矩阵 box &#xff0c;它表示一个箱子的侧视图。箱子的每一个格子可能为&#xff1a; # 表示石头* 表示固定的障碍物. 表示空位置 这个箱子被 顺时针旋转 90 度 &#xff0c;由于重力原因&#xff0c;部分石头的位置会发…