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通过装饰器检查函数参数数据类型的方法
Mar 13 Python
python使用多线程不断刷新网页的方法
Mar 31 Python
python解决汉字编码问题:Unicode Decode Error
Jan 19 Python
pandas将numpy数组写入到csv的实例
Jul 04 Python
对python3 一组数值的归一化处理方法详解
Jul 11 Python
使用pytorch进行图像的顺序读取方法
Jul 27 Python
python生成1行四列全2矩阵的方法
Aug 04 Python
python版大富翁源代码分享
Nov 19 Python
pycham查看程序执行的时间方法
Nov 29 Python
基于python if 判断选择结构的实例详解
May 06 Python
pytorch实现用Resnet提取特征并保存为txt文件的方法
Aug 20 Python
属性与 @property 方法让你的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中设置多级目录session的问题
2011/08/08 PHP
PHP实现的堆排序算法详解
2017/08/17 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
PHP使用PDO实现mysql防注入功能详解
2019/12/20 PHP
javaScript对象和属性的创建方法
2007/01/15 Javascript
javascript 单选框,多选框美化代码
2008/08/01 Javascript
jQuery插件 selectToSelect使用方法
2013/10/02 Javascript
js中split函数的使用方法说明
2013/12/26 Javascript
jquery实现textarea 高度自适应
2015/03/11 Javascript
JS实现仿google、百度搜索框输入信息智能提示的实现方法
2015/04/20 Javascript
详解JavaScript中的4种类型识别方法
2015/09/14 Javascript
Node.js 应用跑得更快 10 个技巧
2016/04/03 Javascript
jquery动态创建div与input的实例代码
2016/10/12 Javascript
纯js仿淘宝京东商品放大镜功能
2017/03/02 Javascript
详解vue-cli中的ESlint配置文件eslintrc.js
2017/09/25 Javascript
详谈commonjs模块与es6模块的区别
2017/10/18 Javascript
javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
2018/08/01 Javascript
解决基于 keep-alive 的后台多级路由缓存问题
2020/12/23 Javascript
[01:03]悬念揭晓 11月26日DOTA2完美盛典不见不散
2017/11/23 DOTA
python 设置文件编码格式的实现方法
2017/12/21 Python
Python爬虫实例_利用百度地图API批量获取城市所有的POI点
2018/01/10 Python
Python3压缩和解压缩实现代码
2021/03/01 Python
Html5调用手机摄像头并实现人脸识别的实现
2018/12/21 HTML / CSS
国际性能运动服装品牌:Dare 2b
2018/07/27 全球购物
英国健身仓库:Bodybuilding Warehouse
2019/03/06 全球购物
家长会主持词开场白
2014/03/18 职场文书
六年级学生评语
2014/04/22 职场文书
信息技术课后反思
2014/04/27 职场文书
小学生三分钟演讲稿
2014/08/18 职场文书
三方股份合作协议书
2014/10/13 职场文书
骨干教师事迹材料
2014/12/17 职场文书
毕业生对母校寄语
2015/02/26 职场文书
2016三八妇女节校园广播稿
2015/12/17 职场文书
初中物理教学反思
2016/02/19 职场文书
《天净沙·秋思》教学反思三篇
2019/11/02 职场文书
Python办公自动化之Excel(中)
2021/05/24 Python