python相关性分析模型_Python多元线性回归模型,python
只是python代码方便以后调用,理论部分需要看其他人的
回归模型的预测
import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import seaborn as sns
import statsmodels.api as sm
from sklearn import model_selection
from scipy.stats import f
from scipy.stats import norm
font = {
'family': 'FangSong',
'weight': 'bold',
'size': 12
}
matplotlib.rc("font", **font)
Profit = pd.read_excel("../data/Predict to Profit.xlsx", names=list("abcde"))
'''
RD_Spend 49 non-null float64
Administration 49 non-null float64
Marketing_Spend 49 non-null float64
State 49 non-null object
Profit 49 non-null float64
'''
print(Profit.shape)
# 将数据拆分成训练集和测试集
train, test = model_selection.train_test_split(Profit, test_size=0.2, random_state=1234)
# 根据train数据集建模
model = sm.formula.ols('e ~ a+b+c+C(d)', data=train).fit()
# 删除test集中的Profit变量,用剩下的自变量进行预测
test_X = test.drop(labels='e', axis=1)
pred = model.predict(exog=test_X)
# 对比预测值和实际值的差异
print(pd.DataFrame({
'pred': pred,
'real': test.e
}))
模型的显著性检验 F检验
# 计算建模数据中因变量的均值
ybar = train.e.mean()
# 统计变量个数和观测个数
p = model.df_model # 变量个数
n = train.shape[0] # 观测个数
# 计算回归离差平方和
RSS = np.sum((model.fittedvalues - ybar) ** 2)
# 计算误差平方和
ESS = np.sum((train.e - model.fittedvalues) ** 2)
# 计算F统计量的值
F = (RSS/p)/(ESS/(n - p - 1))
# 直接得到F统计量值
F1 = model.fvalue
print(F)
# 对比结果下结论
# 计算F分布的理论值
F_Theroy = f.ppf(q=0.95, dfn=p, dfd=n-p-1)
print(F_Theroy)
回归系数的显著性检验 t检验
print(model.summary())
P>|t|的值小于0.05才有用
回归模型的诊断
①误差项ε服从正态分布
误差项服从正太分布,就是要求因变量服从正态分布
绘制直方图
sns.distplot(a=Profit.e, bins=10, norm_hist=True, fit=norm,
hist_kws={'color': 'steelblue'},
kde_kws={'color': 'black', 'linestyle': '--', 'label': '核密度图'},
fit_kws={'color': 'red', 'linestyle': ':', 'label': '正态密度曲线'})
plt.legend()
# 显示图形
plt.show()
②无多重共线性
关于多重共线性的检验可以使用方差膨胀因子VIF来鉴定,如果VIF大于10,则说明变量间存在多重共线性;如果VIF大于100,则表名变量间存在严重的多重共线性如果发现变量之间存在多重共线性的话,则可以考虑删除变量或重新选择模型
# 导入statsmodel模块函数
from statsmodels.stats.outliers_influence import variance_inflation_factor
# 自变量X(包含RD_Speed、Marketing_Speed和常数列1)
X = sm.add_constant(Profit.ix[:, ['a', 'c']])
# 构造空的数据框,用于存储VIF值
vif = pd.DataFrame()
vif['features'] = X.columns
vif['VIF Factor'] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]
print(vif)
③线性相关性
高度相关:|p| >= 0.8
中度相关:0.5 <= |p| <0.8
弱相关:0.3 <= |p| < 0.5
几乎不相关:|p| < 0.3
相关性越大越好
# 计算数据集Profit中每个自变量与因变量利润之间的相关系数
res = Profit.drop(labels=['e'], axis=1).corrwith(Profit.e)
print(res)
# 绘制散点图矩阵
sns.pairplot(Profit.loc[:, ['a', 'b', 'c', 'e']])
plt.show()
综合考虑相关系数、散点图矩阵和t检验的结果,最终确定只保留模型model中的a(RD_Speed)和c(Marketing_Speed)两个自变量重新对该模型做修正
model2 = sm.formula.ols('e ~ a + c', data=train).fit()
# 模型回归系数的估计值 e = 51902.112471 + 0.79*a + 0.02*c
print(model2.params)
异常值检验
通常利用帽子矩阵、DFFITS准则、学生化残差或Cook距离进行异常点检测
outliers = model2.get_influence()
# 高杠杆值点(帽子矩阵)
leverage = outliers.hat_matrix_diag
# diffits值
dffits = outliers.dffits[0]
# 学生化残差
resid_stu = outliers.resid_studentized_external
# cook距离
cook = outliers.cooks_distance[0]
# 合并各种异常值检验的统计量值
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')], axis=1)
# 重设train数据的行索引
train.index = range(train.shape[0])
# 将上面的统计量与train数据集合并
profit_outliers = pd.concat([train, contat1], axis=1)
print(profit_outliers.head())
# 为了简单起见,这里使用标准化残差,当标准化残差大于2时,即认为对应的数据点为异常点
outliers_ratio = sum(np.where((np.abs(profit_outliers.resid_stu) > 2), 1, 0))/profit_outliers.shape[0]
print(outliers_ratio)
# 异常比例不高,低于5%,可以考虑删除
# 挑选非异常观测点
none_outliers = profit_outliers.loc[np.abs(profit_outliers.resid_stu) <= 2, :]
# 应用无异常值的数据集重新建模
model3 = sm.formula.ols('e ~ a + c', data=none_outliers).fit()
print(model3.params)
方差齐性检验
方差齐性是要求模型残差项的方差不随自变量的变动而呈现某种趋势,否则,残差的趋势就可以被自变量刻画。
# 设置第一张子图的位置
ax1 = plt.subplot2grid(shape=(2, 1), loc=(0, 0))
# 绘制散点图
ax1.scatter(none_outliers.a, (model3.resid - model3.resid.mean())/model3.resid.std())
# 添加水平参考线
ax1.hlines(y=0, xmin=none_outliers.a.min(), xmax=none_outliers.a.max(), colors='red', linestyles='--')
# 添加x轴和y轴标签
ax1.set_xlabel('RD_Spend')
ax1.set_ylabel('Std_Residual')
# 设置第二张子图的位置
ax2 = plt.subplot2grid(shape=(2, 1), loc=(1, 0))
# 绘制散点图
ax2.scatter(none_outliers.c, (model3.resid - model3.resid.mean())/model3.resid.std())
# 添加水平参考线
ax2.hlines(y=0, xmin=none_outliers.c.min(), xmax=none_outliers.c.max(), colors='red', linestyles='--')
# 添加x轴和y轴标签
ax2.set_xlabel('Marketing_Spend')
ax2.set_ylabel('Std_Residual')
# 调整子图之间的水平间距和高度间距
plt.subplots_adjust(hspace=0.6, wspace=0.3)
# 显示图形
plt.show()
# 回归模型的预测
pred3 = model3.predict(exog=test.loc[:, ['a', 'c']])
# 绘制预测值与实际值的散点图
plt.scatter(x=test.e, y=pred3)
# 添加斜率为1、截距项为0的参考线
plt.plot([test.e.min(), test.e.max()], [test.e.min(), test.e.max()], color='red', linestyle='--')
# 添加轴标签
plt.xlabel('实际值')
plt.ylabel('预测值')
# 显示图形
plt.show()
python相关性分析模型_Python多元线性回归模型,python相关推荐
- python线性拟合模型_Python机器学习-线性回归模型篇
一.What机器学习是什么 机器学习简单来说,是从数据中归纳出有用的规则,它是一种新的编程方式,它不需要人类来总结经验.输入逻辑,人类只需要把大量数据输入计算机,然后计算机就可以自动总结经验归纳逻辑, ...
- python回归分析预测模型_Python与线性回归模型预测房价
目录提出问题 理解数据 数据清洗 构建模型 模型评估 总结 1. 提出问题 房价和什么因素相关?进而得知如何挑选房子? 2. 理解数据 2.1 导入数据 从Kaggle 中下载 2.2 导入数据 im ...
- python多元非线性回归模型_多元线性回归模型python实现
import numpy as np class LinearRegression: '''支持多元线性回归''' def __init__(self): '''初始化 Linear Regressi ...
- python多元线性回归模型案例_Python 实战多元线性回归模型,附带原理+代码
原标题:Python 实战多元线性回归模型,附带原理+代码 作者 | 萝卜 来源 | 早起Python( ID:zaoqi-python ) 「多元线性回归模型」非常常见,是大多数人入门机器学习的第一 ...
- python多元线性回归实例_Python机器学习多元线性回归模型 | kTWO-个人博客
前言 在上一篇文章<机器学习简单线性回归模型>中我们讲解分析了Python机器学习中单输入的线性回归模型,但是在实际生活中,我们遇到的问题都是多个条件决定的问题,在机器学习中我们称之为多元 ...
- python多元线性回归模型_python – 使用Tensorflow的多元线性回归模型
我想通过使用Tensorflow构建一个多元线性回归模型. 一个数据示例:2104,3,399900(前两个是功能,最后一个是房价;我们有47个示例) 代码如下: import numpy as np ...
- Python 实战多元线性回归模型,附带原理+代码
作者 | 萝卜 来源 | 早起Python( ID:zaoqi-python ) 「多元线性回归模型」非常常见,是大多数人入门机器学习的第一个案例,尽管如此,里面还是有许多值得学习和注意的地方.其中多 ...
- 原理 + 代码 | Python 实现多元线性回归模型 (建模 + 优化,附源数据)
前言 多元线性回归模型非常常见,是大多数人入门机器学习的第一个案例,尽管如此,里面还是有许多值得学习和注意的地方.其中多元共线性这个问题将贯穿所有的机器学习模型,所以本文会将原理知识穿插于代码段中,争 ...
- 基于Python多元线性回归模型
提示:基于Python的多元线性回归模型 文章目录 前言 一.读取数据 二.建立模型 三.预测新值 四.去截距模型 总结 前言 本文主要是基于多元回归线性模型,然后建立模型和分析,解决多元线性回归模型 ...
- Python使用sklearn和statsmodels构建多元线性回归模型(Multiple Linear Regression)并解读
Python使用sklearn和statsmodels构建多元线性回归模型(Multiple Linear Regression)并解读 #仿真数据集(预测股票指数) 这里的目标是根据两个宏观经济变量 ...
最新文章
- msra数据集_ACL2020 | 香侬科技提出使用Dice Loss缓解数据集数据不平衡问题
- java mplayer 源码_师兄写的一个JAVA播放器的源代码
- [CF.Skills]Windows Mobile如何编程实现免提功能
- 看下资深架构师平时需要解决的问题,对比你离资深架构师还有多少距离——再论技术架构的升级之路...
- python with关键字_python中用with关键字来实现上下文管理器.
- 获取和使用某些网站的iconfont图标字体
- c++ 二维数组_C|数形结合理解数组指针、指针数组、一级指针来遍历二维数组
- 给硬盘分个整数大小的区
- 国际国家代号mysql_最全的各国 语言(文化)代码与国家地区对照表(国际通用标准形式)...
- C++ 什么是句柄?为什么会有句柄?HANDLE
- 输入关键字生成对联_输入真实名字自动生成网名,名字对联自动生成
- java 计算8+88+888+......前12项之和
- 修复WordPress中的Cookie阻止错误
- android studio无法识别mtk,Android6.0 MTK6737 长按 Power 没有真正关机 (MTK IPO 功能) · Younix’s Studio...
- 一个有界面的pdf合成工具(python)超级简单实用可做成exe
- ASO优化:影响 APP权重与吸量的五大要素
- 原神抽卡逛街模拟器完整搭建教程-仅限单机
- linux添加删除虚拟ip,Linux增加/删除虚拟ip
- 三维比例导引 matlab,三维比例导引律(源程序)
- 如何解决EDIUS无法打开文件的问题
热门文章
- OCP4.4 部署EFK-使用local-volume持久化
- MATLAB线性回归
- linux的adsl拨号上网,详细讲解Linux系统下ADSL拨号上网的方法
- 在nginx中编写html,码头不会在nginx html根目录中创建文件夹
- Mac添加中国法定节假日安排
- 是妄言还是实话 云电脑将代替传统PC?
- 微博mysql连接错误_新浪微博错误代码详解
- 【阅读笔记】(语义分割最全总结,综述)《A Review on Deep Learning Techniques Applied to Semantic Segmentation》
- FragmentActivity_左右滑动的碎片
- 百度地图点击城市的出现下钻