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获取从命令行输入数字的方法
Apr 29 Python
在Python中操作时间之mktime()方法的使用教程
May 22 Python
小白如何入门Python? 制作一个网站为例
Mar 06 Python
浅谈python在提示符下使用open打开文件失败的原因及解决方法
Nov 30 Python
Django 过滤器汇总及自定义过滤器使用详解
Jul 19 Python
Python lxml模块的基本使用方法分析
Dec 21 Python
Python基于requests库爬取网站信息
Mar 02 Python
python+adb+monkey实现Rom稳定性测试详解
Apr 23 Python
python模块如何查看
Jun 16 Python
python如何编写类似nmap的扫描工具
Nov 06 Python
python list的index()和find()的实现
Nov 16 Python
python读取excel数据并且画图的实现示例
Feb 08 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
PHP中$_FILES的使用方法及注意事项说明
2014/02/14 PHP
php+html5使用FormData对象提交表单及上传图片的方法
2015/02/11 PHP
PHP目录操作实例总结
2016/09/27 PHP
PHP中类的自动加载的方法
2017/03/17 PHP
PHP让数组中有相同值的组成新的数组实例
2017/12/31 PHP
Laravel 5.5 实现禁用用户注册示例
2019/10/24 PHP
iframe的onload在Chrome/Opera中执行两次Bug的解决方法
2011/03/17 Javascript
javascript模拟select,jselect的方法实现
2012/11/08 Javascript
js实现动态添加、删除行、onkeyup表格求和示例
2013/08/18 Javascript
可自己添加html的伪弹出框实现代码
2013/09/08 Javascript
node.js中的fs.renameSync方法使用说明
2014/12/16 Javascript
基于Angularjs实现分页功能
2016/05/30 Javascript
jQuery实现搜索页面关键字的功能
2017/02/16 Javascript
React+react-dropzone+node.js实现图片上传的示例代码
2017/08/23 Javascript
VueJs 将接口用webpack代理到本地的方法
2017/11/27 Javascript
vue-router中的hash和history两种模式的区别
2018/07/17 Javascript
Node.js npm命令运行node.js脚本的方法
2018/10/10 Javascript
利用React Router4实现的服务端直出渲染(SSR)
2019/01/07 Javascript
vue+element创建动态的form表单及动态生成表格的行和列
2019/05/20 Javascript
[04:41]2014DOTA2国际邀请赛 Liquid顺利突围晋级正赛
2014/07/09 DOTA
Python使用ftplib实现简易FTP客户端的方法
2015/06/03 Python
python 遍历字符串(含汉字)实例详解
2017/04/04 Python
Python爬虫设置代理IP(图文)
2018/12/23 Python
python opencv 读取图片 返回图片某像素点的b,g,r值的实现方法
2019/07/03 Python
Django Rest framework权限的详细用法
2019/07/25 Python
Python FFT合成波形的实例
2019/12/04 Python
pandas中read_csv的缺失值处理方式
2019/12/19 Python
解决pytorch多GPU训练保存的模型,在单GPU环境下加载出错问题
2020/06/23 Python
如何解决pycharm调试报错的问题
2020/08/06 Python
python常量折叠基础知识点讲解
2021/02/28 Python
中国领先的汽车保养服务平台:途虎养车
2019/10/18 全球购物
同居协议书范本
2014/04/23 职场文书
白岩松演讲
2014/05/21 职场文书
2015毕业生自我评价范文
2015/03/02 职场文书
Python利器openpyxl之操作excel表格
2021/04/17 Python
html5调用摄像头截图功能
2022/01/18 Javascript