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 相关文章推荐
tornado捕获和处理404错误的方法
Feb 26 Python
python实现进程间通信简单实例
Jul 23 Python
Python安装使用命令行交互模块pexpect的基础教程
May 12 Python
举例讲解Python中字典的合并值相加与异或对比
Jun 04 Python
Python爬虫实现全国失信被执行人名单查询功能示例
May 03 Python
python 筛选数据集中列中value长度大于20的数据集方法
Jun 14 Python
python使用webdriver爬取微信公众号
Aug 31 Python
详解python实现交叉验证法与留出法
Jul 11 Python
pycharm部署、配置anaconda环境的教程
Mar 24 Python
解决keras,val_categorical_accuracy:,0.0000e+00问题
Jul 02 Python
Python Pillow(PIL)库的用法详解
Sep 19 Python
python 字符串格式化的示例
Sep 21 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 内存缓存加速功能memcached安装与用法
2009/09/03 PHP
ThinkPHP视图查询详解
2014/06/30 PHP
php 把数字转换成汉字的代码
2015/07/21 PHP
微信公众号开发之文本消息自动回复php代码
2016/08/08 PHP
[原创]网络复制内容时常用的正则+editplus
2006/11/30 Javascript
一个简单的jQuery插件制作 学习过程及实例
2010/04/25 Javascript
in.js 一个轻量级的JavaScript颗粒化模块加载和依赖关系管理解决方案
2011/07/26 Javascript
13 个JavaScript 性能提升技巧分享
2012/07/26 Javascript
浅析Node.js查找字符串功能
2014/09/03 Javascript
JS实现图文并茂的tab选项卡效果示例【附demo源码下载】
2016/09/21 Javascript
Three.js入门之hello world以及如何绘制线
2017/09/25 Javascript
通过js控制时间,一秒一秒自己动的实例
2017/10/25 Javascript
vue组件生命周期详解
2017/11/07 Javascript
使用puppeteer破解极验的滑动验证码
2018/02/24 Javascript
angularjs结合html5实现拖拽功能
2018/06/25 Javascript
浅谈JavaScript 代码简洁之道
2019/01/09 Javascript
浅析Python中signal包的使用
2015/11/13 Python
Python OpenCV获取视频的方法
2018/02/28 Python
一行代码让 Python 的运行速度提高100倍
2018/10/08 Python
Python中类的创建和实例化操作示例
2019/02/27 Python
selenium+python环境配置教程详解
2019/05/28 Python
Python Numpy库datetime类型的处理详解
2019/07/13 Python
pytorch获取模型某一层参数名及参数值方式
2019/12/30 Python
Python通过VGG16模型实现图像风格转换操作详解
2020/01/16 Python
keras实现多GPU或指定GPU的使用介绍
2020/06/17 Python
pytorch 计算Parameter和FLOP的操作
2021/03/04 Python
白酒市场营销方案
2014/02/25 职场文书
奥巴马获胜演讲稿
2014/05/15 职场文书
食品安全承诺书
2014/05/22 职场文书
群众路线教育实践活动对照检查材料
2014/09/22 职场文书
支行行长竞聘报告
2014/11/06 职场文书
2014年圣诞节寄语
2014/12/08 职场文书
财务负责人岗位职责
2015/02/03 职场文书
pytorch 如何使用amp进行混合精度训练
2021/05/24 Python
python基础之//、/与%的区别详解
2022/06/10 Python
table设置超出部分隐藏,鼠标移上去显示全部内容的方法
2022/12/24 HTML / CSS