建立完回归模型后,还需要验证咱们建立的模型是否合适,换句话说,就是咱们建立的模型是否真的能代表现有的因变量与自变量关系,这个验证标准一般就选用拟合优度。

拟合优度是指回归方程对观测值的拟合程度。度量拟合优度的统计量是判定系数R^2。R^2的取值范围是[0,1]。R^2的值越接近1,说明回归方程对观测值的拟合程度越好;反之,R^2的值越接近0,说明回归方程对观测值的拟合程度越差。

拟合优度问题目前还没有找到统一的标准说大于多少就代表模型准确,一般默认大于0.8即可

拟合优度的公式:R^2 = 1 - RSS/TSS

注: RSS 离差平方和 ; TSS 总体平方和

理解拟合优度的公式前,需要先了解清楚几个概念:总体平方和、离差平方和、回归平方和。

一、总体平方和、离差平方和、回归平方和

回归平方和 ESS,残差平方和 RSS,总体平方和 TSS

TSS(Total Sum of Squares)表示实际值与期望值的离差平方和,代表变量的总变动程度

ESS(Explained Sum of Squares)表示预测值与期望值的离差平方和,代表预测模型拥有的变量变动程度

RSS(Residual Sum of Squares)表示实际值与预测值的离差平方和,代表变量的未知变动程度

各个平方和的计算公式如下:

二、拟合优度

接上一节内容可知,我们拿实际值与期望值的离差平方和作为整体变量的总变动程度,这个变动程度就是我们建模型的目的,我们建立模型就是为了模拟这个变动程度。

建立模型后,整体变量的总变动程度(TSS)可以划分为两部分:模型模拟的变动程度(ESS)和未知的变动程度(RSS)

通常来说,预测模型拥有的变量变动程度在总变动程度中的占比越高,代表模型越准确,当RSS=0时,表示模型能完全模拟变量的总变动。

回到文章开头的拟合优度公式:R^2 = 1 - RSS/TSS 。是不是很好理解了!

假设R^2 = 0.8,意味着咱们建立的模型拥有的变动程度能模拟80%的总变动程度,剩下20%为未知变动。

三、例子

对于学生而言,现在要探索一下学生的学习成绩与单一的学习时间是否有关系,给出两组数据如下:

'学习时间':[0.50,0.75,1.00,1.25,1.50,1.75,1.75, 2.00,2.25,2.50,2.75,3.00,3.25,3.50,4.00,4.25,4.50,4.75,5.00,5.50],

'分数':[10,22,13,43,20,22,33,50,62,48,55,75,62,73,81,76,64,82,90,93]

常识理解,学习时间越长,分数一般都会越高,两者是正比关系,因为就一个自变量,直接用sklearn,算出截距和斜率即可

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

from pandas import DataFrame,Series

from sklearn.cross_validation import train_test_split

from sklearn.linear_model import LinearRegression

#创建数据集

examDict = {'学习时间':[0.50,0.75,1.00,1.25,1.50,1.75,1.75,

2.00,2.25,2.50,2.75,3.00,3.25,3.50,4.00,4.25,4.50,4.75,5.00,5.50],

'分数':[10,22,13,43,20,22,33,50,62,

48,55,75,62,73,81,76,64,82,90,93]}

#转换为DataFrame的数据格式

examDf = DataFrame(examDict)

#examDf

#绘制散点图

plt.scatter(examDf.分数,examDf.学习时间,color = 'b',label = "Exam Data")

#添加图的标签(x轴,y轴)

plt.xlabel("Hours")

plt.ylabel("Score")

#显示图像

plt.show()

#将原数据集拆分训练集和测试集

exam_X = examDf.学习时间

exam_Y = examDf.分数

X_train,X_test,Y_train,Y_test = train_test_split(exam_X,exam_Y,train_size=0.8)

#X_train为训练数据标签,X_test为测试数据标签,exam_X为样本特征,exam_y为样本标签,train_size 训练数据占比

print("原始数据特征:",exam_X.shape,

",训练数据特征:",X_train.shape,

",测试数据特征:",X_test.shape)

print("原始数据标签:",exam_Y.shape,

",训练数据标签:",Y_train.shape,

",测试数据标签:",Y_test.shape)

model = LinearRegression()

#对于模型错误我们需要把我们的训练集进行reshape操作来达到函数所需要的要求

# model.fit(X_train,Y_train)

#reshape如果行数=-1的话可以使我们的数组所改的列数自动按照数组的大小形成新的数组

#因为model需要二维的数组来进行拟合但是这里只有一个特征所以需要reshape来转换为二维数组

X_train = X_train.values.reshape(-1,1)

X_test = X_test.values.reshape(-1,1)

model.fit(X_train,Y_train)

a = model.intercept_#截距

b = model.coef_#回归系数

print("最佳拟合线:截距",a,",回归系数:",b)

接下来算出拟合优度看看 ,拟合优度0.83,符合要求

# 用训练集进行拟合优度,验证回归方程是否合理

def get_lr_stats(x, y, model):

message0 = '一元线性回归方程为: '+'\ty' + '=' + str(model.intercept_)+' + ' +str(model.coef_[0]) + '*x'

from scipy import stats

n = len(x)

y_prd = model.predict(x)

Regression = sum((y_prd - np.mean(y))**2) # 回归平方和

Residual = sum((y - y_prd)**2) # 残差平方和

total = sum((y-np.mean(y))**2) #总体平方和

R_square = 1-Residual / total # 相关性系数R^2

message1 = ('相关系数(R^2): ' + str(R_square) + ';' + '\n'+ '总体平方和(TSS): ' + str(total) + ';' + '\n')

message2 = ('回归平方和(RSS): ' + str(Regression) + ';' + '\n残差平方和(ESS): ' + str(Residual) + ';' + '\n')

return print(message0 +'\n' +message1 + message2 )

get_lr_stats(X_train,Y_train,model)

如果需要,可以把所有点和回归直线画出来,直观感受一下

#训练数据的预测值

y_train_pred = model.predict(X_train)

#绘制最佳拟合线:标签用的是训练数据集中的极值预测值

X_train_pred = [min(X_train),max(X_train)]

y_train_pred = [a+b*min(X_train),a+b*max(X_train)]

plt.plot(X_train_pred, y_train_pred, color='green', linewidth=3, label="best line")

#测试数据散点图

plt.scatter(X_test, Y_test, color='red', label="test data")

plt.scatter(X_train, Y_train, color="blue", label="train data")

#添加图标标签

plt.legend(loc=2)

plt.xlabel("Hours")

plt.ylabel("Score")

#显示图像

plt.savefig("lines.jpg")

plt.show()

#计算拟合优度

score = model.score(X_test,Y_test)

print(score)

以上这篇python 线性回归分析模型检验标准--拟合优度详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

本文标题: python 线性回归分析模型检验标准--拟合优度详解

本文地址: http://www.cppcns.com/jiaoben/python/301350.html

python绘制拟合回归散点图_python 线性回归分析模型检验标准--拟合优度详解相关推荐

  1. python绘制拟合回归散点图_Python之简单线性回归

    线性回归一是能够定量的解释因变量与解释变量间的相互关系,二是用来预测因变量. 本文通过Python拟合一元线性回归模型,实现对一元线性回归的学习,过程较简单. 主要知识点: 1.散点图绘制,查看变量间 ...

  2. python绘制拟合回归散点图_python – 将曲线拟合到散点图的边界

    我发现问题真的很有趣,所以我决定尝试一下.我不知道pythonic或natural,但我认为我已经找到了一种更准确的方法,可以在使用每个点的信息时将边缘拟合到像您这样的数据集. 首先,让我们生成一个看 ...

  3. python 线性回归分析模型检验标准--拟合优度详解

    转载自 : 脚本之家 建立完回归模型后,还需要验证咱们建立的模型是否合适,换句话说,就是咱们建立的模型是否真的能代表现有的因变量与自变量关系,这个验证标准一般就选用拟合优度. 拟合优度是指回归方程对观 ...

  4. python绘制拟合回归散点图_matplotlib中散点图的回归线和拟合曲线

    我有一个很大的数据集,我正在循环使用以生成绘图.我已经成功地计算出了散点图,但是我在如何生成回归线和拟合曲线时遇到了一些问题.在 这是我的代码:# import modules import pand ...

  5. python绘制三维图散点图_python matplotlib模块——绘制三维图形、三维数据散点图...

    分类: 计算机视觉 python matplotlib模块,是扩展的MATLAB的一个绘图工具库.他可以绘制各种图形,可是最近最的一个小程序,得到一些三维的数据点图,就学习了下python中的matp ...

  6. python绘制三维图散点图_python 绘制三维图形、三维数据散点图

    1. 绘制3D曲面图 from matplotlib import pyplot as plt import numpy as np from mpl_toolkits.mplot3d import ...

  7. python如何强制转换数据类型_python数据类型强制转换实例详解

    如果是字符串进行强制转换, 仅仅就是在原数据类型的两边套上引号 2.list : 强制转换成列表""" 如果是字符串,会把每一个字符都单独作为一个元素放到新的列表中 如果 ...

  8. python中split啥意思_python中split的用法详解_后端开发

    如何用python正则表达式匹配字符串?_后端开发 用python正则表达式匹配字符串的方法:1.当匹配单个位置的字符串时,可以使用[(.+?)]正则表达式来提取:2.当连续多个位置的字符串匹配时,可 ...

  9. python中importlib模块安装_Python中标准模块importlib详解

    Python中标准模块importlib详解 模块简介 Python提供了importlib包作为标准库的一部分.目的就是提供Python中import语句的实现(以及__import__函数).另外 ...

  10. python读yaml的库_Python读取YAML文件过程详解

    这篇文章主要介绍了Python读取YAML文件过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Python读取方法: import yaml ...

最新文章

  1. 【node】Sequelize常用操作、基本增删改查
  2. PHP中array_merge和array相加的区别分析
  3. 新一代HTML5开发工具Wijmo子控件详解
  4. 坡道行驶电动小车_基于动力性指标的纯电动汽车电机参数设计
  5. vue前端 html,Vue.js v-html
  6. 5怎么关闭作弊模式_相机5种主要的拍摄模式该怎么用
  7. 微信接口开发之高级篇系列【网页授权详细说明【提供测试账号使用】】
  8. ssl提高组周六模拟赛【2019.3.2】
  9. CodeProject每日精选: Progress controls 进度条
  10. linux texmaker编译,在Ubuntu下安装和编译LaTex
  11. 爬取亚马逊评论_如何利用插件抓取亚马逊评论和关键词?
  12. HDU 1114 iggy-Bank(完全背包)
  13. Verilog测试:TestBench结构
  14. 十五届恩智浦智能车杀青
  15. (附源码)ssm牙科诊所预约网站 毕业设计 260952
  16. 感性电路电流计算_三相电的电功率的计算公式_200KW三相四线制线路,需要多少A电源空开?...
  17. c语言:输入三角形的边长求面积
  18. 从启动过程讲述普元Mobile 8.0基座
  19. c语言链表中next作用,C语言链表详解
  20. Html页面上展示Excel表格 --Handsontable

热门文章

  1. 【c语言】复习无止境,day4--堆内存宏函数篇
  2. Oracle数字转汉字过程,oracle中如何将字符和数字转成中文
  3. Eclipse没有Dynamic Web Project选项解决
  4. Mocking with (and without) Spring Boot
  5. 如何给PDF文件加密和解密?
  6. 响应式原理(Vue2.x)下篇
  7. 手机百度云如何打开doc
  8. 基本概念学习(7002)---网络流量控制
  9. JMeter之性能监控插件PerfMon Metrics Collector
  10. Softing为艾默生提供AMS设备管理系统的连接解决方案