回归模型的拟合优度检验,线性回归模型显著性检验,python 线性回归分析模型检验标准--拟合优度详解

回归模型的拟合优度检验,线性回归模型显著性检验,python 线性回归分析模型检验标准--拟合优度详解

今天边肖给大家分享一个python线性回归分析模型测试标准——拟合优度详解,有很好的参考价值。希望对你有帮助。来和边肖一起看看吧。

建立回归模型后,需要验证我们建立的模型是否合适,换句话说,我们建立的模型是否能真正代表因变量和自变量之间存在的关系。这个验证标准一般选择拟合优度。

拟合优度是指回归方程对观测值的拟合程度。衡量拟合优度的统计量是决定系数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(总平方和)代表实际值与期望值偏差的平方和,代表变量的总变异程度。

ESS(解释平方和)表示预测值与期望值偏差的平方和,表示预测模型所拥有的变量的变化程度。

RSS(残差平方和)代表实际值与预测值的偏差平方和,代表变量的未知变化程度。

计算平方和的公式如下:

二、拟合优度

从上一节可以看出,我们把实际值和期望值的偏差平方和作为整个变量的总变异度。这种变化程度是我们的模型的目的,我们建立模型来模拟这种变化程度。

模型建立后,整个变量的总变异度(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。

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

常识,学习时间越长,分数一般会越高。两者是成比例的,因为只是一个自变量,可以直接用sklearn计算截距和斜率。

进口熊猫作为pd

将numpy作为np导入

将matplotlib.pyplot作为plt导入

从熊猫进口数据框,系列

从sklearn.cross_validation导入train_test_split

从sklearn.linear_model导入线性回归

#创建数据集

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]}

#转换为数据帧的数据格式

examDf=DataFrame(examDict)

#考试d

#绘制散点图

Plt.scatter(examDf。分数,考试d。学习时间,color='b ',label='考试数据')

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

plt.xlabel('小时')

plt.ylabel('分数')

#显示图像

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)

打印('原始数据标签:',exam_Y.shape,

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

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

模型=线性回归()

#对于模型错误,我们需要重塑我们的训练集,以满足函数的要求。

# model.fit(X_train,Y_train)

#reshape如果行数=-1,我们的数组改变的列数可以根据数组的大小自动组成一个新的数组。

#因为模型需要一个二维数组来拟合,但是这里只有一个特征,需要重新整形转换成二维数组。

X _ train=X _ train . values . shape(-1,1)

X _ test=X _ test . values . shape(-1,1)

model.fit(X_train,Y_train)

A=模型. intercept_# intercept

B=模型系数_#回归系数

打印('最佳拟合线:截距',a ',回归系数:',b)

接下来,计算拟合优度。拟合优度为0.83,符合要求。

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

def get_lr_stats(x,y,model):

0='一元线性回归方程为:' ' \ ty ' '=' str(model . intercept _)' ' str(model . coef _[0])' * x '

从scipy导入统计

n=len(x)

y_prd=model.predict(x)

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

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

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

r _ square=1-残差/总相关系数r 2

Message1=('相关系数(R2):' str(r _ square)';'\n ' '总平方和(TSS):' str(Total)';' \n ')

Message2=('回归平方和(RSS):' str(回归)';'\ n残差平方和(ESS):“str(residual)”;' \n ')

返回打印(消息0 '\n '消息1消息2)

get_lr_stats(X_train,Y_train,model)

必要的话可以画出所有的点和回归线,直观感受。

#训练数据的预测值

y _ train _ pred=model . predict(X _ train)

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

X_train _ pred=[最小(X _ train),最大(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(位置=2)

plt.xlabel('小时')

plt.ylabel('分数')

#显示图像

plt.savefig('lines.jpg ')

plt.show()

#计算拟合优度

score=model.score(X_test,Y_test)

打印(分数)

以上python线性回归分析模型测试标准——拟合优度详解是边肖分享的全部内容。希望给大家一个参考,支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: