Python 散点图线性拟合_线性回归(实战)

前面介绍了线性回归的理论知识后,有些朋友建议我写一篇实战篇,这样可以方便理解。今天我们就来使用Python实现多元线性回归模型的落地。

本次数据集如下链接:

https://pan.baidu.com/s/16w8-snxnTKtU3boAJGN1Cg​pan.baidu.com

提取码:3udf

各个变量解释为

  • AT:温度
  • V:压力
  • AP:相对湿度
  • RH:排气量
  • PE:发电量(因变量)

下面正式开始吧!

1,导入包

# 导入第三方包
import pandas as pd
import numpy as np
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

2,读取数据

raw = pd.read_excel('CCPP.xlsx')
raw.describe()

通过数据的面属性统计分析,我们可以得到这些数值变量的基本统计值,如均值、最小值、最大值、下四分位、上四分位、标准差,而这些统计值有助于你对数据的理解和分布的解读。

下面我们绘制各变量之间的散点图,对各变量的相关关系有个大概印象。

sns.pairplot(ccpp)
plt.show()

从上面的散点图来看,似乎AP(相对湿度)和RH(排气量)与PE(发电量)之间并不存在明显的线性关系。

3,建模

接下来需要根据读取进来的数据构造回归模型,但建模之前,我们一般需要将数据集拆分成训练集(用于建模)和测试集(用于模型的评估)两个部分。

Train,Test = train_test_split(ccpp, train_size = 0.8, random_state=1234)

建模

fit_train = ols('PE~AT+V+AP' , data = ccpp).fit()
fit_train.summary()

通过模型反馈的结果我们可知,R_squared的值为0.918。说明模型是通过显著性检验的,即F统计量所对应的P值是远远小于0.05这个阈值的,说明需要拒绝原假设(即认为模型的所有回归系数都不全为0),但模型的显著性通过检验并不代表每个变量都对因变量是重要的,所以还需要进行偏回归系数的显著性检验。通过上图的检验结果显示,P>|t|这一栏,结果都小于0.05,均通过显著性检验。说明温度AT,压力A,相对湿度AP都影响到排气量PE的变动,故不需要将其中的变量从模型中剔除。

4,变量筛选

多元线性回归能够按照一些方法筛选建立回归的自变量,这些方法包括:向前法,向后法,逐步法。这三种方法进入或者剔除变量的一个标准是AIC准则,即最小信息准则。AIC值越小说明模型效果越好,越简洁。

#自定义一个通过AIC进行变量向前筛选的函数
def forward_select(data, response):
    remaining = set(data.columns)
    remaining.remove(response)
    selected = []
    current_score, best_new_score = float('inf'), float('inf')
    while remaining:
        aic_with_candidates=[]
        for candidate in remaining:
            formula = "{} ~ {}".format(
                response,' + '.join(selected + [candidate]))
            aic = ols(formula=formula, data=data).fit().aic
            aic_with_candidates.append((aic, candidate))
        aic_with_candidates.sort(reverse=True)
        best_new_score, best_candidate=aic_with_candidates.pop()
        if current_score > best_new_score: 
            remaining.remove(best_candidate)
            selected.append(best_candidate)
            current_score = best_ne

你可能感兴趣的:(Python,散点图线性拟合,python,线性回归,统计检验,p值,线性回归系数的标准误)