建立完回归模型后,还需要验证咱们建立的模型是否合适,换句话说,就是咱们建立的模型是否真的能代表现有的因变量与自变量关系,这个验证标准一般就选用拟合优度。
拟合优度是指回归方程对观测值的拟合程度。度量拟合优度的统计量是判定系数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,4.75,5.00,5.50),
“分数”:[43 10日,22日,13日,20日,22日,33岁,50岁,62年,48岁,55岁,75,62,73,81,76,64,82,90,93]
引用>常识理解,学习时间越长,分数一般都会越高,两者是正比关系,因为就一个自变量,直接用sklearn,算出截距和斜率即可
熊猫作为pd导入 进口numpy np 进口matplotlib。pyplot作为plt 从熊猫进口DataFrame系列 从sklearn。cross_validation进口train_test_split 从sklearn。linear_model进口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), “分数”:[43 10日,22日,13日,20日,22日,33岁,50岁,62年, 48岁,55岁,75,62,73,81,76,64,82,90,93]} #转换为DataFrame的数据格式 examDf=DataFrame (examDict) # examDf #绘制散点图 examDf plt.scatter (examDf。分数。学习时间,颜色=b,标签=翱际允荨? #添加图的标签(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训练数据占比 打印(“原始数据特征:“,exam_X.shape, ”,训练数据特征:“,X_train.shape, ”,测试数据特征:“,X_test.shape) 打印(“原始数据标签:“,exam_Y.shape, ”,训练数据标签:“,Y_train.shape, ”,测试数据标签:“,Y_test.shape) 模型=LinearRegression () #对于模型错误我们需要把我们的训练集进行重塑操作来达到函数所需要的要求 # model.fit (X_train Y_train) #重塑如果行数=1的话可以使我们的数组所改的列数自动按照数组的大小形成新的数组 #因为模型需要二维的数组来进行拟合但是这里只有一个特征所以需要重塑来转换为二维数组 X_train=X_train.values.reshape (1,1) X_test=X_test.values.reshape (1,1) model.fit (X_train Y_train)=model.intercept_ #截距 b=model.coef_ #回归系数 打印(“最佳拟合线:截距“,,”,回归系数:”,b)python线性回归分析模型检验标准,拟合优度详解