python3 线性回归验证方法


Posted in Python onJuly 09, 2019

如下所示:

#-*- coding: utf-8 -*-
import pandas as pd
import numpy as np
from patsy.highlevel import dmatrices
#2.7里面是from patsy import dmatrices
from statsmodels.stats.outliers_influence import variance_inflation_factor
import statsmodels.api as sm
import scipy.stats as stats
from sklearn.metrics import mean_squared_error
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import matplotlib
 
#数据获取
ccpp = pd.read_excel('CCPP.xlsx')
ccpp.describe()
#绘制各变量之间的散点图
sns.pairplot(ccpp)
plt.show()
#发电量(PE)与自变量之间的相关系数
a = ccpp.corrwith(ccpp.PE)
print(a)
#将因变量PE,自变量AT,V,AP和截距项(值为1的1维数值)以数据框的形式组合起来
y,x = dmatrices('PE~AT+V+AP',data = ccpp,return_type = 'dataframe')
#构造空的数据框
vif = pd.DataFrame()
vif[""VIF Factor""] = [variance_inflation_factor(x.values,i) for i in range(x.shape[1])]
vif[""features""] = x.columns
print (vif)
 
#构建PE与AT,V和AP之间的线性模型
fit = sm.formula.ols('PE~AT+V+AP',data=ccpp).fit()
b = fit.summary()
# print(b)
#计算模型的RMSE值
pred = fit.predict()
c = np.sqrt(mean_squared_error(ccpp.PE,pred))
print(c)
#离群点检验
outliers = fit.get_influence()
#高杠杆值点(帽子矩阵)
leverage = outliers.hat_matrix_diag
#dffits值
dffits = outliers.dffits[0]
#学生化残差
resid_stu = outliers.resid_studentized_external
#cook距离
cook = outliers.cooks_distance[0]
#covratio值
covratio = outliers.cov_ratio
#将上面的几种异常值检验统计量与原始数据集合并
contat1 = pd.concat([pd.Series(leverage,name = 'leverage'),pd.Series(dffits,name ='dffits'),
pd.Series(resid_stu,name = 'resid_stu'),pd.Series(cook,name = 'cook'),
pd.Series(covratio,name ='covratio'),],axis = 1)
ccpp_outliers = pd.concat([ccpp,contat1],axis = 1)
d = ccpp_outliers.head()
print(d)
 
#计算异常值数量的比例
outliers_ratio = sum(np.where((np.abs(ccpp_outliers.resid_stu)>2),1,0))/ccpp_outliers.shape[0]
e = outliers_ratio
print(e)
#删除异常值
ccpp_outliers = ccpp_outliers.loc[np.abs(ccpp_outliers.resid_stu)<=2,]
#重新建模
fit2 = sm.formula.ols('PE~AT+V+AP',data = ccpp_outliers).fit()
f = fit2.summary()
# print(f)
pred2 = fit2.predict()
g = np.sqrt(mean_squared_error(ccpp_outliers.PE,pred2))
print(g)
#
#残差的正态性检验(直方图法)
resid = fit2.resid
#中文和负号的正常显示
# plt.rcParams['font.sans=serif'] = ['Microsoft YaHei']
plt.rcParams['font.sans-serif'] = ['SimHei']
# plt.rcParams['font.sans=serif'] = 'sans-serif'
plt.rcParams['axes.unicode_minus'] = False
plt.hist(resid,bins = 100,normed = True,color = 'steelblue',edgecolor = 'k')
#设置坐标轴标签和标题
plt.title('残差直方图')
plt.ylabel('密度值')
#生成正态曲线的数据
x1 = np.linspace(resid.min(),resid.max(),1000)
normal = mlab.normpdf(x1,resid.mean(),resid.std())
#绘制正态分布曲线
plt.plot(x1,normal,'r-',linewidth = 2,label = '正态分布曲线')
#生成核密度曲线的数据
kde = mlab.GaussianKDE(resid)
x2 = np.linspace(resid.min(),resid.max(),1000)
#绘制核密度曲线
plt.plot(x2,kde(x2),'k-',linewidth = 2,label = '核密度曲线')
#去除图形顶部边界和右边界的刻度
plt.tick_params(top = 'off',right = 'off')
#显示图例
plt.legend(loc='best')
#显示图形
plt.show()
#生成的正态曲线的数据
pp_qq_plot = sm.ProbPlot(resid)
pp_qq_plot.ppplot(line = '45')
plt.title('P-P图')
pp_qq_plot.qqplot(line = 'q')
plt.title('Q-Q图')
plt.show()
#残差的正态性检验(非参数法)
standard_resid = (resid-np.mean(resid))/np.std(resid)
g = stats.kstest(standard_resid,'norm')
print(g)
# 总结:由于shapiro正态性检验对样本量的需求是5000以内,而本次数据集样本量有9000多,故选择k-s来完成正态性检验。
# 从k-s检验的p值来看,拒绝了残差服从正态分布的假设,即认为残差并不满足正态性假设这个前提。
# 如果残差不服从正态分布的话,建议对Y变量进行box-cox变换处理。
# 由于fit2模型的残差并没有特别明显的偏态(偏度为0.058,接近于0),故这里就不对Y进行变换。
 
# 
# import scipy.stats as stats
# #找到box-cox变换的Lambda系数
# lamd = stats.boxcox_normmax(vif.y,method = 'mle')
# #对y进行变换
# vif['trans_y'] = stats.boxcox(vif.y,lamd)
# #建模
# fit3 = sm.formula.ols('y~x1+x2...',data = vif).fit()
# fit3.summary()

以上这篇python3 线性回归验证方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现简单ftp客户端的方法
Jun 28 Python
Python基于回溯法子集树模板解决最佳作业调度问题示例
Sep 08 Python
Python 中Pickle库的使用详解
Feb 24 Python
Python基于递归算法求最小公倍数和最大公约数示例
Jul 27 Python
python使用rpc框架gRPC的方法
Aug 24 Python
Python中函数的基本定义与调用及内置函数详解
May 13 Python
Tensorflow实现在训练好的模型上进行测试
Jan 20 Python
python使用信号量动态更新配置文件的操作
Apr 01 Python
selenium切换标签页解决get超时问题的完整代码
Aug 30 Python
Python爬虫进阶之爬取某视频并下载的实现
Dec 08 Python
tensorflow中的梯度求解及梯度裁剪操作
May 26 Python
pytest实现多进程与多线程运行超好用的插件
Jul 15 Python
python time.sleep()是睡眠线程还是进程
Jul 09 #Python
python logging模块的使用总结
Jul 09 #Python
Django中如何使用sass的方法步骤
Jul 09 #Python
python执行scp命令拷贝文件及文件夹到远程主机的目录方法
Jul 08 #Python
使用python socket分发大文件的实现方法
Jul 08 #Python
python查看文件大小和文件夹内容的方法
Jul 08 #Python
python 搜索大文件的实例代码
Jul 08 #Python
You might like
《斗罗大陆》六翼天使武魂最强,为什么老千家不是上三宗?
2020/03/02 国漫
php导出csv格式数据并将数字转换成文本的思路以及代码分享
2014/06/05 PHP
Laravel5权限管理方法详解
2016/07/26 PHP
PHP数据对象PDO操作技巧小结
2016/09/27 PHP
任意位置显示html菜单
2007/02/01 Javascript
javascript入门·动态的时钟,显示完整的一些方法,新年倒计时
2007/10/01 Javascript
button没写type=button会导致点击时提交
2014/03/06 Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖动基本操作
2015/11/30 Javascript
JavaScipt中栈的实现方法
2016/02/17 Javascript
微信公众号支付H5调用支付解析
2016/11/04 Javascript
Javascript实现找不同色块的游戏
2017/07/17 Javascript
Express结合Webpack的全栈自动刷新
2019/05/23 Javascript
Javascript 对象(object)合并操作实例分析
2019/07/30 Javascript
vue+eslint+vscode配置教程
2019/08/09 Javascript
vue fetch中的.then()的正确使用方法
2020/04/17 Javascript
vue-cli3中配置alias和打包加hash值操作
2020/09/04 Javascript
vue 函数调用加括号与不加括号的区别
2020/10/29 Javascript
PHP 502bad gateway原因及解决方案
2020/11/13 Javascript
用python实现面向对像的ASP程序实例
2014/11/10 Python
Python类属性与实例属性用法分析
2015/05/09 Python
django认证系统实现自定义权限管理的方法
2018/07/16 Python
对Python3 goto 语句的使用方法详解
2019/02/16 Python
Python从函数参数类型引出元组实例分析
2019/05/28 Python
Python ORM框架Peewee用法详解
2020/04/29 Python
Python API 操作Hadoop hdfs详解
2020/06/06 Python
[原创]赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程
2021/01/12 Python
达拉斯牛仔官方商店:Dallas Cowboys Pro Shop
2018/02/10 全球购物
商场拾金不昧表扬信
2014/01/13 职场文书
新教师工作感言
2014/02/16 职场文书
计生工作先进事迹
2014/08/15 职场文书
四风个人对照检查材料思想汇报
2014/09/25 职场文书
学生穿着不得体检讨书
2014/10/12 职场文书
党员个人承诺书
2015/04/27 职场文书
《角的度量》教学反思
2016/02/18 职场文书
网络安全倡议书(3篇)
2019/09/18 职场文书
Android学习之BottomSheetDialog组件的使用
2022/06/21 Java/Android