多元非线性回归python,多元线性回归分析步骤python

  多元非线性回归python,多元线性回归分析步骤python

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

  拟合优度是指回归方程对观测值的拟合程度。衡量拟合优度的统计量是决定系数R 2。r 2的取值范围是[0,1]。r 2的值越接近1,回归方程对观测值的拟合程度越好。相反,r 2的值越接近0,回归方程对观测值的拟合程度越差。

  目前,拟合优度问题还没有统一的标准。如果默认情况下大于0.8,则表示模型是准确的。

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

  注:RSS偏差平方和;TSS的总平方和

  在了解拟合优度公式之前,我们需要知道几个概念:总平方和、离差平方和、回归平方和。

  1.总平方和、偏差平方和、回归平方和ESS、残差平方和RSS、总平方和TSS

  TSS(总平方和)代表实际值与期望值偏差的平方和,代表变量的总变动程度

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

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

  计算平方和的公式如下:

  2.拟合优度从上一节我们取实际值和期望值的偏差平方和作为整体变量的总变异程度。这种变化程度是我们的模型的目的,我们建立模型来模拟这种变化程度。

  模型建立后,整个变量的总变异度(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计算截距和斜率。

  将熊猫作为警察局导入数组作为公证人导入matplotlib.pyplot作为血小板计数从熊猫导入数据帧,系列自从sklearn.cross_validation导入训练_测试_分离自从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]}#转换为数据帧的数据格式考试df=数据帧(考试字典)#考试df #绘制散点图plt.scatter(示例d .分数,考试d .学习时间,color=b ,label=考试数据)#添加图的标签(十轴,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 _测试为测试数据标签,考试_X为样本特征,考试_y为样本标签,火车_大小训练数据占比打印(原始数据特征:,exam_X.shape,,训练数据特征:,X_train.shape,,测试数据特征:,X_test.shape)打印(原始数据标签:,exam_Y.shape,,训练数据标签:,Y_train.shape,,测试数据标签:,Y _ test。形状)模型=线性回归()#对于模型错误我们需要把我们的训练集进行使再成形操作来达到函数所需要的要求# model.fit(X_train,Y _ train)#形状如果行数=-1的话可以使我们的数组所改的列数自动按照数组的大小形成新的数组#因为模型需要二维的数组来进行拟合但是这里只有一个特征所以需要使再成形来转换为二维数组X火车=X火车。价值观。shape(-1,1)X _ test=X _ test。价值观。shape(-1,1) model.fit(X_train,Y_train)a=model.intercept_#截距b=model.coef_#回归系数打印(最佳拟合线:截距,一,,回归系数:,b)

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

  # 用训练集进行拟合优度,验证回归方程是否合理def get_lr_stats(x,y,model): message0=一元线性回归方程为: \ ty = str(型号。intercept _)“”字符串(模型。coef _[0]) * x from scipy import stats n=len(x)y _ prd=model。预测(x)回归=sum((y _ prd-NP。均值(y))* * 2)#回归平方和残差=总和((y - y_prd)**2) #残差平方和总计=总和((y-np.mean(y))**2) #总体平方和r _ square=1-剩余/总计#相关性系数R^2消息1=(相关系数(r^2): 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=模型。预测(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=红色,标签=测试数据)plt.scatter(X_train,Y_train,color=蓝色,标签=训练数据)#添加图标标签PLT。图例(位置=2)PLT。xlabel(小时)工厂。ylabel( Score )#显示图像plt.savefig(lines.jpg )计算拟合优度分数=model.score(X_test,Y_test)打印(分数)

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

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