精华内容
下载资源
问答
  • excel多元非线性回归
    千次阅读
    2020-11-18 10:47:46

    Excel数据分析工具库是个很强大的工具,可以满足基本的统计分析,这里介绍用Excel数据分析工具库中的回归做回归分析。

    本文主要介绍:

    • Excel数据分析工具库—回归
    • 线性回归和非线性回归
    • 简单线性回归和多重线性回归
    • 逻辑斯蒂回归

    一、什么是回归分析(Regression)

    1、定义

    确定两种或两种以上变量间相关关系的一种统计分析方法。通过数据间相关性分析的研究,进一步建立自变量(i=1,2,3,…)与因变量Y之间的回归函数关系,即回归分析模型,从而预测数据的发展趋势。

    2、分类

    • 按照涉及的变量的多少,分为一元回归和多元回归分析;
    • 按照因变量的多少,可分为简单回归分析和多重回归分析;
    • 按照自变量和因变量之间的关系类型,可分为线性回归分析和非线性回归分析。

    二、线性回归

    1、简单线性回归

    简单线性回归又叫一元线性回归,即回归模型中只有一个自变量和一个因变量,其回归方程可以表示为:

    4e6099d1a8fcff5c7301dcdb27a65bcf.png

    其中,Y表示因变量,x表示自变量,a是 常数,b是斜率,

    a12a84532ac137e44bf44b7e6c3b710f.png

    2、最小二乘法:

    如何确定参数a和b,则要用最小二乘法来实现。通过最小化误差的平方和寻找数据的最佳函数匹配,即使得观测点和估计点的距离的平方和最小。

    3、线性回归分析的步骤:

    • 确定自变量和因变量
    • 绘制散点图,确定回归模型类型
    • 估计模型参数,建立回归模型:最小二乘法进行模型参数估计
    • 对回归模型进行检验
    • 利用回归模型进行预测

    4、多重线性回归

    定义:一个因变量与多个自变量的线性回归问题,是一元线性回归的推广。其回归方程可以写为:

    20d270ae3e82dfc154857fc31394b57a.png

    多重线性回归方程中回归系数的估计也是用到最小二乘法

    三、用Excel做回归分析

    我们研究销售额Y和推广费用X1之间的关系,数据如下:

    16b8344331ada52bd7fe038e2401955a.png

    首先我们用数据分析—相关系数分析计算一下自变量和因变量之间的相关系数为0.95157,为强相关。

    6769683812474ac04f0f7d864e586093.png

    绘制散点图如下:

    8a2e9b020af492dc1065cbf110eafa61.png

    然后,我们用数据分析库里的回归来做分析

    0fe3a97f958da0a2140264d4e3b5e3f3.png

    注意Y值和X值输入区域,X值是自变量,Y是因变量。

    a290105390290e230d146b61e945cd3c.png

    四、线性回归方程的检验

    评价回归拟合程度好坏(重要):

    c8948b3ecb4c24b1248fd07db1d1b259.png

    1、 先看回归统计表,Multiple R即相关系数R的值,和我们之前做相关分析得到的值一样,大于0.8表示强正相关。

    2、 回归统计表中的R Square是R平方值,R平方即R的平方,又可以叫判定系数、拟合优度,取值范围是[0,1],R平方值越大,表示模型拟合的越好。一般大于70%就算拟合的不错,60%以下的就需要修正模型了。这个案例里R平方0.9054,相当不错。

    3、 Adjusted R是调整后的R方,这个值是用来修正因自变量个数增加而导致模型拟合效果过高的情况,多用于衡量多重线性回归。

    4、 第二张表,方差分析表,df是自由度,SS是平方和,MS是均方,F是F统计量,Significance F是回归方程总体的显著性检验,其中我们主要关注F检验的结果,即Significance F值,F检验主要是检验因变量与自变量之间的线性关系是否显著,用线性模型来描述他们之间的关系是否恰当,越小越显著。这个案例里F值很小,说明因变量与自变量之间显著。

    5、 残差是实际值与预测值之间的差,残差图用于回归诊断,回归模型在理想条件下的残差图是服从正态分布的。

    6、 第三张表我们重点关注P-value,也就是P值,用来检验回归方程系数的显著性,又叫T检验,T检验看P值,是在显著性水平α(常用取值0.01或0.05)下F的临界值,一般以此来衡量检验结果是否具有显著性,如果P值>0.05,则结果不具有显著的统计学意义,如果0.01

    7、 从第三张表的第一列我们可以得到这个回归模型的方程:y=4361.486+1.198017x,此后对于每一个输入的自变量x,都可以根据这个回归方程来预测出因变量Y。

    这里简单总结了一下什么是回归分析,如何用excel做线性回归分析,以及如何评价回归方程拟合程度的好坏。入门很简单,精通还很遥远,我们都在学习中。

    注:本文首发于CSDN@文章属原创,转载请联系作者@作者:虾壳,在数据分析的道路上努力奔跑@微信公众号:可乐的数据分析之路

    更多相关内容
  • Excel多元线性回归

    万次阅读 2021-10-26 13:09:36
    一、EXCEL进行多元线性回归 1.首先需要下载一个数据分析的插件: 点击左上角文件->选项->加载项->分析工具库->转到-数据分析库->确定 下载好插件之后就可以看到这里多了一个数据分析 点击...

    一、EXCEL进行多元线性回归

    1.首先需要下载一个数据分析的插件:

    点击左上角文件->选项->加载项->分析工具库->转到-数据分析库->确定

     

    下载好插件之后就可以看到这里多了一个数据分析

    点击数据->数据分析

    首先删除表里的非数据项,以进行多元线性回归

    这里选择了所有的数据

    二、多元线性回归模型预测房价

    1.导入包

    import pandas as pd
    import numpy as np
    import seaborn as sns
    import matplotlib.pyplot as plt
    

    2.读入数据

    df = pd.read_csv('E:\house_prices.csv')
    df.info(); df.head()
    

    3.输出结果

     三、变量探索

    1.数据处理

    # 异常值处理
    # ================ 异常值检验函数:iqr & z分数 两种方法 =========================
    def outlier_test(data, column, method=None, z=2):
        """ 以某列为依据,使用 上下截断点法 检测异常值(索引) """
        """ 
        full_data: 完整数据
        column: full_data 中的指定行,格式 'x' 带引号
        return 可选; outlier: 异常值数据框 
        upper: 上截断点;  lower: 下截断点
        method:检验异常值的方法(可选, 默认的 None 为上下截断点法),
                选 Z 方法时,Z 默认为 2
        """
        # ================== 上下截断点法检验异常值 ==============================
        if method == None:
            print(f'以 {column} 列为依据,使用 上下截断点法(iqr) 检测异常值...')
            print('=' * 70)
            # 四分位点;这里调用函数会存在异常
            column_iqr = np.quantile(data[column], 0.75) - np.quantile(data[column], 0.25)
            # 1,3 分位数
            (q1, q3) = np.quantile(data[column], 0.25), np.quantile(data[column], 0.75)
            # 计算上下截断点
            upper, lower = (q3 + 1.5 * column_iqr), (q1 - 1.5 * column_iqr)
            # 检测异常值
            outlier = data[(data[column] <= lower) | (data[column] >= upper)]
            print(f'第一分位数: {q1}, 第三分位数:{q3}, 四分位极差:{column_iqr}')
            print(f"上截断点:{upper}, 下截断点:{lower}")
            return outlier, upper, lower
        # ===================== Z 分数检验异常值 ==========================
        if method == 'z':
            """ 以某列为依据,传入数据与希望分段的 z 分数点,返回异常值索引与所在数据框 """
            """ 
            params
            data: 完整数据
            column: 指定的检测列
            z: Z分位数, 默认为2,根据 z分数-正态曲线表,可知取左右两端的 2%,
               根据您 z 分数的正负设置。也可以任意更改,知道任意顶端百分比的数据集合
            """
            print(f'以 {column} 列为依据,使用 Z 分数法,z 分位数取 {z} 来检测异常值...')
            print('=' * 70)
            # 计算两个 Z 分数的数值点
            mean, std = np.mean(data[column]), np.std(data[column])
            upper, lower = (mean + z * std), (mean - z * std)
            print(f"取 {z} 个 Z分数:大于 {upper} 或小于 {lower} 的即可被视为异常值。")
            print('=' * 70)
            # 检测异常值
            outlier = data[(data[column] <= lower) | (data[column] >= upper)]
            return outlier, upper, lower
    

     2.调用函数

    outlier, upper, lower = outlier_test(data=df, column='price', method='z')
    outlier.info(); outlier.sample(5)
    

    3.结果

     4.删除错误数据

    # 这里简单的丢弃即可
    df.drop(index=outlier.index, inplace=True)
    

    四、分析数据

    1.定义变量

    # 类别变量,又称为名义变量,nominal variables
    nominal_vars = ['neighborhood', 'style']
    
    for each in nominal_vars:
        print(each, ':')
        print(df[each].agg(['value_counts']).T)
        # 直接 .value_counts().T 无法实现下面的效果
         ## 必须得 agg,而且里面的中括号 [] 也不能少
        print('='*35)
        # 发现各类别的数量也都还可以,为下面的方差分析做准备
    

    # 热力图 
    def heatmap(data, method='pearson', camp='RdYlGn', figsize=(10 ,8)):
        """
        data: 整份数据
        method:默认为 pearson 系数
        camp:默认为:RdYlGn-红黄蓝;YlGnBu-黄绿蓝;Blues/Greens 也是不错的选择
        figsize: 默认为 10,8
        """
        ## 消除斜对角颜色重复的色块
        #     mask = np.zeros_like(df2.corr())
        #     mask[np.tril_indices_from(mask)] = True
        plt.figure(figsize=figsize, dpi= 80)
        sns.heatmap(data.corr(method=method), \
                    xticklabels=data.corr(method=method).columns, \
                    yticklabels=data.corr(method=method).columns, cmap=camp, \
                    center=0, annot=True)
        # 要想实现只是留下对角线一半的效果,括号内的参数可以加上 mask=mask
    

     2.调用函数输出结果

    # 通过热力图可以看出 area,bedrooms,bathrooms 等变量与房屋价格 price 的关系都还比较强
     ## 所以值得放入模型,但分类变量 style 与 neighborhood 两者与 price 的关系未知
    heatmap(data=df, figsize=(6,5))
    

     四、拟合

    1.代码:

        
    import statsmodels.api as sm
    from statsmodels.formula.api import ols # ols 为建立线性回归模型的统计学库
    from statsmodels.stats.anova import anova_lm
    
    df = df.copy().sample(600)
    
    # C 表示告诉 Python 这是分类变量,否则 Python 会当成连续变量使用
    ## 这里直接使用方差分析对所有分类变量进行检验
    ## 下面几行代码便是使用统计学库进行方差分析的标准姿势
    lm = ols('price ~ C(neighborhood) + C(style)', data=df).fit()
    anova_lm(lm)
    
    # Residual 行表示模型不能解释的组内的,其他的是能解释的组间的
    # df: 自由度(n-1)- 分类变量中的类别个数减1
    # sum_sq: 总平方和(SSM),residual行的 sum_eq: SSE
    # mean_sq: msm, residual行的 mean_sq: mse
    # F:F 统计量,查看卡方分布表即可
    # PR(>F): P 值
    
    # 反复刷新几次,发现都很显著,所以这两个变量也挺值得放入模型中
    

    2.结果:

     3.多元线性回归建模

    代码:

    from statsmodels.formula.api import ols
    
    lm = ols('price ~ area + bedrooms + bathrooms', data=df).fit()
    lm.summary()
    

    结果:

     四、sklearn多元线性回归预测房价

    1.导入包

    import pandas as pd
    import numpy as np
    import math
    import matplotlib.pyplot as plt # 画图
    from sklearn import linear_model # 线性模型
    data = pd.read_csv('E:\house_prices.csv') #读取数据,改为
    data.head() #数据展示
    
    

    2.结果

     

    2.去除第一列house_id

    代码:

    new_data=data.iloc[:,1:] #除掉id这一列
    new_data.head()
    

     

     关系矩阵显示:

    new_data.corr() # 相关系数矩阵,只统计数值列
    
    

     

    赋值变量

    代码:

    x_data = new_data.iloc[:, 0:5] #area、bedrooms、bathroom对应列
    y_data = new_data.iloc[:, -1] #price对应列
    print(x_data, y_data, len(x_data))
    
    

     建立模型并输出:

    # 应用模型
    model = linear_model.LinearRegression()
    model.fit(x_data, y_data)
    print("回归系数:", model.coef_)
    print("截距:", model.intercept_)
    print('回归方程: price=',model.coef_[0],'*neiborhood+',model.coef_[1],'*area +',model.coef_[2],'*bedrooms +',model.coef_[3],'*bathromms +',model.coef_[4],'*sytle ',model.intercept_)
    
    

     对数据清洗后再求解

    new_data_Z=new_data.iloc[:,0:]
    new_data_IQR=new_data.iloc[:,0:]
    
    
    # ================ 异常值检验函数:iqr & z分数 两种方法 =========================
    def outlier_test(data, column, method=None, z=2):
        """ 以某列为依据,使用 上下截断点法 检测异常值(索引) """
        """ 
        full_data: 完整数据
        column: full_data 中的指定行,格式 'x' 带引号
        return 可选; outlier: 异常值数据框 
        upper: 上截断点;  lower: 下截断点
        method:检验异常值的方法(可选, 默认的 None 为上下截断点法),
                选 Z 方法时,Z 默认为 2
        """
        # ================== 上下截断点法检验异常值 ==============================
        if method == None:
            print(f'以 {column} 列为依据,使用 上下截断点法(iqr) 检测异常值...')
            print('=' * 70)
            # 四分位点;这里调用函数会存在异常
            column_iqr = np.quantile(data[column], 0.75) - np.quantile(data[column], 0.25)
            # 1,3 分位数
            (q1, q3) = np.quantile(data[column], 0.25), np.quantile(data[column], 0.75)
            # 计算上下截断点
            upper, lower = (q3 + 1.5 * column_iqr), (q1 - 1.5 * column_iqr)
            # 检测异常值
            outlier = data[(data[column] <= lower) | (data[column] >= upper)]
            print(f'第一分位数: {q1}, 第三分位数:{q3}, 四分位极差:{column_iqr}')
            print(f"上截断点:{upper}, 下截断点:{lower}")
            return outlier, upper, lower
        # ===================== Z 分数检验异常值 ==========================
        if method == 'z':
            """ 以某列为依据,传入数据与希望分段的 z 分数点,返回异常值索引与所在数据框 """
            """ 
            params
            data: 完整数据
            column: 指定的检测列
            z: Z分位数, 默认为2,根据 z分数-正态曲线表,可知取左右两端的 2%,
               根据您 z 分数的正负设置。也可以任意更改,知道任意顶端百分比的数据集合
            """
            print(f'以 {column} 列为依据,使用 Z 分数法,z 分位数取 {z} 来检测异常值...')
            print('=' * 70)
            # 计算两个 Z 分数的数值点
            mean, std = np.mean(data[column]), np.std(data[column])
            upper, lower = (mean + z * std), (mean - z * std)
            print(f"取 {z} 个 Z分数:大于 {upper} 或小于 {lower} 的即可被视为异常值。")
            print('=' * 70)
            # 检测异常值
            outlier = data[(data[column] <= lower) | (data[column] >= upper)]
            return outlier, upper, lower
    
    outlier, upper, lower = outlier_test(data=new_data_Z, column='price', method='z')
    outlier.info(); outlier.sample(5)
    
    # 这里简单的丢弃即可
    new_data_Z.drop(index=outlier.index, inplace=True)
    

    输出结果:

     4price 列为依据,使用 上下截断点法(iqr) 检测异常值

    outlier, upper, lower = outlier_test(data=new_data_IQR, column='price')
    outlier.info(); outlier.sample(6)
    
    # 这里简单的丢弃即可
    new_data_IQR.drop(index=outlier.index, inplace=True)
    
    

    输出数据相关矩阵

    print("原数据相关性矩阵")
    new_data.corr()
    
    

     

    Z方法处理的数据相关性矩阵

    在这里插入代码片print("Z方法处理的数据相关性矩阵")
    new_data_Z.corr()
    

     

     建模输出:

    x_data = new_data_Z.iloc[:, 0:5]
    y_data = new_data_Z.iloc[:, -1]
    # 应用模型
    model = linear_model.LinearRegression()
    model.fit(x_data, y_data)
    print("回归系数:", model.coef_)
    print("截距:", model.intercept_)
    print('回归方程: price=',model.coef_[0],'*neiborhood+',model.coef_[1],'*area +',model.coef_[2],'*bedrooms +',model.coef_[3],'*bathromms +',model.coef_[4],'*sytle ',model.intercept_)
    
    

     

    五、总结

    通过对多元线性回归的模拟,加深了对EXCEL的使用经验,也学会了如何使用使用sklearn库调用函数的方法,对sklearn的使用也更加熟练。

    六、参考

    多元线性回归算法预测房价

    多元线性回归分析

    数据清洗技术——Excel数据清洗

    展开全文
  • 一元线性回归 1、女士的身高-体重例子。--借助excel数据分析功能 ...多元线性回归 3、薪资-性别-年龄-教育程度例子。--借助excel数据分析功能 4、店铺营业额-店铺面积-离车站距离例子。--直接计算

    在学习机器学习的线性回归这块内容,想再一次好好理清楚算法的基本思路。最初还是使用了excel来理顺一遍思路。excel的数据分析功能也还是十分便捷的,计算也十分方便。
    本博客共使用四个详细例子来介绍线性回归。分别是1、女士的身高-体重例子–借助excel数据分析功能;2、气温-冰红茶销售量例子。–直接计算;3、薪资-性别-年龄-教育程度例子。–借助excel数据分析功能;4、店铺营业额-店铺面积-离车站距离例子。–直接计算。

    一元线性回归

    1、女士的身高-体重例子。–借助excel数据分析功能
    使用excel中散点图功能将数据绘制成散点图。

    在这里插入图片描述
    散点图右键,选择“设置趋势线格式”。
    在这里插入图片描述
    弹出的设置框可以设置散点图样式,趋势线选择线性,勾选显示公式、显示R平方值。
    在这里插入图片描述
    同样的,在坐标轴右键,选择“设置坐标轴格式”。弹出的设置框可以修改一下坐标轴的初始值,让散点图更好看一些。
    在这里插入图片描述
    最终散点图如下。可以看到数据分布特征非常明显,呈现线性分布。右键添加趋势线,并显示方程、R²。R²=0.991,接近于 1,说明模型能够解释99.1%的方差,效果非常好。
    在这里插入图片描述

    根据excel中:“数据-数据分析-回归”得到得模型如下。
    旧版excel点击:“工具-数据-数据分析-回归”。
    在这里插入图片描述
    Y值输入区域:选择你的Y值数据,我这为C列;X值输入区域:选择你的X值数据,我这为B列。
    输出区域默认为新的工作表,但我希望输出与数据在同一张表格,所以选择了想要的区域位置。其他的内容根据需要自行勾选。
    在这里插入图片描述
    输出内容如下:
    在这里插入图片描述

    这个值为R²,反映了模型的解释能力,越接近于1说明效果越好。这里可以看出我们模型的效果很好。
    在这里插入图片描述

    F检验,即对方程是否有线性关系的检验,原假设 H0:方程没有线性关系,我们看到 P值< 0.01,故拒绝 H0,认为方程具有线性关系。
    在这里插入图片描述

    t 检验,即对一元线性方程的截距项α和系数β进行检验,H0:α=0,可以看到 P<0.01,拒绝H0,说明α通过了t检验;同理,β也通过了 t检验。
    在这里插入图片描述

    根据这里可以得到线性回归方程为y=-87.5167+3.45x。
    方程是需要自己写的哈,数据分析功能不会直接输出的。
    在这里插入图片描述

    残差图:可以看到数据并没有散乱的分布在X 轴两侧,而是呈抛物线的形状,说明模型中需要引入一个二次项,从散点图中亦可以看出。
    在这里插入图片描述

    正态概率图:散点分布在一条直线上,说明服从正太分布。当样本足够大(一般认为≥30)时,一般不需要太关注正太分布性。
    在这里插入图片描述

    2、气温-冰红茶销售量例子。–直接计算
    使用excel中散点图功能将数据绘制成散点图。可以看到数据呈现线性分布,气温与销售量呈正相关。右键添加趋势线,并显示方程、R²。R²接近于 1,说明模型效果较好。
    在这里插入图片描述
    第A列为每日最高气温x的值,A16为x的和,A17为x的平均数。第B列为当日冰红茶的销售量y,B16为y的和,B17为y的平均数。第C列为各个x减去x平均值的具体数值。第E列为的各个x的离差平方,E16即为x的离差平方和Sxx的值。第D列为各个y减去y平均值的具体数值。第F列为的各个y的离差平方,F16即为y的离差平方和Syy的值。第G列为的各个x与相应y的离差平方,G16即为x和y的离差平方和Sxy的值。
    在这里插入图片描述
    由a=Sxy/Sxx得到a的值,由b=y-ax得到b的值。然后得出方程y=3.7x-36.4。
    在这里插入图片描述
    根据公式得到销售量的预测值,即第K列。K16为预测值的和,K17为预测值的平均数。第L列为预测值减去预测平均数的具体数值。第M列为预测值的离差平方,M16即为预测值的离差平方和。第N列为y与预测值的离差平方,N16为y和预测值的离差平方和。
    在这里插入图片描述
    由R2=Syy2/sqrt(Syy*Syy1)得到R2.。可见该方程的精度比较高。
    在这里插入图片描述

    多元线性回归

    3、薪资-性别-年龄-教育程度例子。–借助excel数据分析功能
    根据excel中散点图功能,绘制出三个自变量与因变量的散点图,并得到方程和R²。可以看出年龄、工龄、教育程度与薪资都成正相关。
    其中年龄-薪资的模型图拟合度较好,R²最大。
    做法同1类似,需要分别选择X值。
    在这里插入图片描述
    同1的步骤,根据excel中:“数据-数据分析-回归”得到得模型如下。
    注意:x的赋值要把三个x都选上。输出内容如下:
    在这里插入图片描述
    整体的R²,可以看出我们模型的效果还是比较好的。
    在这里插入图片描述
    整体方程P值<<0.01,故拒绝原假设,方程通过了F检验。
    在这里插入图片描述
    所有的自变量都通过了t检验。
    在这里插入图片描述
    可以得到线性回归方程为
    y=-44632.8+2303.837x1+1952.72x2+8052.969x3。
    在这里插入图片描述

    4、店铺营业额-店铺面积-离车站距离例子。–直接计算
    使用excel中散点图功能将数据绘制成散点图。可以看到数据呈现线性分布,店铺面积与营业额呈正相关,距离与营业额呈负相关。。
    在这里插入图片描述
    第A列为店铺的面积大小(x1),A12为面积大小之和,A13为面积的平均值。第B列为店铺到车站的距离(x2),B12为距离之和,B13为距离的平均数。第C列为营业额的数值(y),C12为营业额之和,C13为营业额的平均数。第D列为各个x1减去x1平均值的具体数值。第E列为的各个x1的离差平方,E12即为x1的离差平方和Sx1x1的值。
    第F列为各个x2减去x2平均值的具体数值。第G列为的各个x2的离差平方,G12即为x2的离差平方和Sx2x2的值。第H列为各个y减去y平均值的具体数值。第I列为的各个y的离差平方,I12即为y的离差平方和Syy的值。第J列为的各个x1与相应y的离差平方,J12即为x1和y的离差平方和Sx1y的值。第K列为的各个x2与相应y的离差平方,K12即为x2和y的离差平方和Sx2y的值。第L列为的各个x1与相应x2的离差平方,L12即为x1和x2的离差平方和Sx1x2的值。第N列为预测值。
    在这里插入图片描述
    由a1=Sx1ySx2x2-Sx2ySx1x2/Sx1x1Sx2x2-Sx1x2^ 2得到a1的值,由a2=Sx2ySx1x1-Sx1ySx1x2/Sx1x1Sx2x2-Sx1x2^2得到a2的值,由b=y-a1x1-a2x2`得到b值,最后得到方程y=41.5x1-0.3x2+65.3。
    在这里插入图片描述

    展开全文
  • 数据回归-基于行政村尺度的南昌县血吸虫病疫情多元非线性回归分析.pdf
  • 以某矿全尾砂为原料,制作灰砂比为1∶4、1∶6、1∶8和1∶...基于Excel和SPSS软件,建立了不同龄期充填体强度与灰砂比、料将质量浓度的回归方程,回归方程相关性系数较高、显著性较强,能较好的表征各因素对强度的影响规律。
  • 我是目录一、多元线性回归1. 定义2. 数据清洗2.1 缺失值处理2.2 异常值(离群点)处理3. 特征共线性问题二、用Excel做房价预测线性回归1. 配置Excel2. 完善数据集2.1 剔除错误数据2.2 处理数据数值3. Excel线性...

    一、多元线性回归

    1. 定义

    在回归分析中,如果有两个或两个以上的自变量,就称为多元回归。事实上,一种现象常常是与多个因素相联系的,由多个自变量的最优组合共同来预测或估计因变量,比只用一个自变量进行预测或估计更有效,更符合实际。因此多元线性回归比一元线性回归的实用意义更大。

    2. 数据清洗

    多元线性回归属于监督机器学习算法,通过已知数据训练得到模型或决策函数。应用此算法时,不能盲目地套用算法,必须对数据的有效性、正确性、假设合理性进行验证,如果发现数据本身不正确,就需要纠正。

    数据清洗

    • 缺失值处理
      异常值处理

    2.1 缺失值处理

    删除法

    删除观测样本
    删除变量
    使用完整原始数据进行分析
    改变权重
    

    插补法

    抽样填补
    均值差补
    回归模型
    热平台差补
    冷平台差补
    拉格朗日插值法
    随机森林插值
    

    替换法

    缺失值所在变量为数值型:用该变量在其他所有对象的取值的均值/特定值来替换变量的缺失值
    缺失值所在变量为非数值型:用该变量其他全部有效观测值的中位数或众数进行替换
    

    参考: http://blog.csdn.net/qq_31584157/article/details/52562830

    2.2 异常值(离群点)处理

    异常值定义:测定值中与平均值的偏差超过三倍标准差的值
    异常值大概包括离群值、重复值、数据不一致。

    1.判断异常值方法汇总

    简单统计量分析:描述性统计,判断变量的取值是否超出合理的范围
    3O原则:正态分布假设下,P(|x-u|>3o)<=0.003,属于极个别的小概率事件
    箱型图分析:1.5倍四分位间距的值
    图像法汇总:绘制直方图、绘制点图、绘制箱形图、绘制qq图、绘制单变量散点图
    局部异常因子检测:基于密度识别异常值的算法,只对数值型数据有效
    通过聚类检测异常值
    

    2.异常值处理方法(数据光滑)
    分析异常值出现的原因,再判断是否取舍,如果数据正确,可直接在数据上进行挖掘建模

    删除法:直接把相应的记录删除
    把异常值视为缺失值:利用缺失值处理的方法进行处理
    平均值修正:可用前后两个观测值的平均值修正该异常值
    不处理:直接在具有异常值的数据集上进行挖掘建模
    

    3. 特征共线性问题

    1. 定义

    多重共线性(Multicollinearity)是指线性回归模型中的自变量之间由于存在高度相关关系而使模型的权重参数估计失真或难以估计准确的一种特性,多重是指一个自变量可能与多个其他自变量之间存在相关关系。

    多重共线性是使用线性回归算法时经常要面对的一个问题。在其他算法中,例如决策树或者朴素贝叶斯,前者的建模过程时逐渐递进,每次都只有一个变量参与,这种机制含有抗多重共线性干扰的功能;后者假设变量之间是相互独立的。但对于回归算法来说,都要同时考虑多个预测因子,因此多重共线性通常不可避免。

    1. 检测方法

    二、用Excel做房价预测线性回归

    1. 配置Excel

    用Excel做线性回归前的具体配置准备步骤,请参照上次博客《用Excel+Anoconda-jupyter做线性回归》中的1.1。

    2. 完善数据集

    2.1 剔除错误数据

    数据集中部分数据存在错误,在对数据进行分析之前,需要剔除错误数据。

    此处剔除卧室数和洗浴间数都为0的数据。

    选中一组bedroombathroom都为0的数据:

    请添加图片描述

    筛选不正常数据:

    请添加图片描述

    选中序号为蓝色及前面一组序号为黑色的所有行,删除:

    请添加图片描述

    此时是不是看不到其他正常数据了?这时候我们点一下上面的筛选,就能显示删除不正常的数据后的全部的数据了。

    请添加图片描述

    当做其他线性回归时,或者其他需要筛选步骤的,都可用此方法查找数据。

    2.2 处理非数据数值

    线性回归中经常会遇到非数值型数据,即分类型数据,比如性别、所属省份、专业类型等等
    分类型数据无法量化,一般会采用哑数据进行处理
    如某个数据分为A、B、C三类,即可采用两个哑数据a,b
    类型为A时,a=1,b=0
    类型为B时,a=0,b=1
    类型为C时,a=0,b=0
    不使用a,b,c三个哑数据,是因为如果哑数据个数与分类数相同时,恒有a+b+c=1,会存在多重共线性问题
    所以在N分类时,一般使用N-1个哑数据

    1. 在我们的数据集中neighborhood和style栏是非数值数据,在neighborhood一栏中将A,B,C以二进制编码表示为10,01,00,也就是十进制的2,1,0。
    2. 在style一栏中同理可得ranch,victorian,lodge为2,1,0。
      方法:点击菜单栏的开始,找到查找和选择,点击选择替换,根据上述替换数据。

    在替换的时候一定要勾选区分大小写:

    在这里插入图片描述

    3. Excel做线性回归

    1. 数据选择:

    ①Excel中——数据——数据分析

    在这里插入图片描述

    ② 选择回归

    在这里插入图片描述

    在这里插入图片描述

    1. 得到结果:

    在这里插入图片描述

    通过P-value一栏可以得到房屋面积和价格的相关性最强。

    根据表中数据得到回归方程:
    y= -0.45723 x1 -28426 x2 +345.9623 x3 +4509.576 x4 -2915.15 x5 +2128.176 x6
    r²=0.723794

    三、用jupyter+sklearn做线性回归练习

    1. 打开jupyter步骤

    点开Windows

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    2.写入代码

    2.1 不做数据处理

    ①代码(以下代码可分步进行):

    #引入包
    import pandas as pd
    import numpy as np
    import seaborn as sns
    from sklearn import datasets
    from sklearn.linear_model import LinearRegression
    
    df = pd.read_csv('D:\\**\\house_prices.csv')#读取文件,此处为自己的文件的路径
    df.info()#显示列名和数据类型类型
    df.head(6)#显示前n行,n默认为5
    
    #取出自变量
    data_x=df[['area','bedrooms','bathrooms']]# x
    data_y=df['price']# y
    
    # 进行多元线性回归
    model=LinearRegression()
    l_model=model.fit(data_x,data_y)
    print('参数权重')
    print(model.coef_)
    print('模型截距')
    print(model.intercept_)
    

    ②显示结果:
    在这里插入图片描述

    2.2 进行数据处理

    ①代码(同样按间隔,可分步进行):

    #引入包
    import pandas as pd
    import numpy as np
    import seaborn as sns
    from sklearn import datasets
    from sklearn.linear_model import LinearRegression
    
    
    df = pd.read_csv('D:\\**\\house_prices.csv')#读取文件,此处为自己的文件的路径
    df.info()#显示列名和数据类型类型
    df.head(6)#显示前n行,n默认为5
    
    
    # 异常值处理
    # ================ 异常值检验函数:iqr & z分数 两种方法 =========================
    def outlier_test(data, column, method=None, z=2):
        """ 以某列为依据,使用 上下截断点法 检测异常值(索引) """
        """ 
        full_data: 完整数据
        column: full_data 中的指定行,格式 'x' 带引号
        return 可选; outlier: 异常值数据框 
        upper: 上截断点;  lower: 下截断点
        method:检验异常值的方法(可选, 默认的 None 为上下截断点法),
                选 Z 方法时,Z 默认为 2
        """
        # ================== 上下截断点法检验异常值 ==============================
        if method == None:
            print(f'以 {column} 列为依据,使用 上下截断点法(iqr) 检测异常值...')
            print('=' * 70)
            # 四分位点;这里调用函数会存在异常
            column_iqr = np.quantile(data[column], 0.75) - np.quantile(data[column], 0.25)
            # 1,3 分位数
            (q1, q3) = np.quantile(data[column], 0.25), np.quantile(data[column], 0.75)
            # 计算上下截断点
            upper, lower = (q3 + 1.5 * column_iqr), (q1 - 1.5 * column_iqr)
            # 检测异常值
            outlier = data[(data[column] <= lower) | (data[column] >= upper)]
            print(f'第一分位数: {q1}, 第三分位数:{q3}, 四分位极差:{column_iqr}')
            print(f"上截断点:{upper}, 下截断点:{lower}")
            return outlier, upper, lower
        # ===================== Z 分数检验异常值 ==========================
        if method == 'z':
            """ 以某列为依据,传入数据与希望分段的 z 分数点,返回异常值索引与所在数据框 """
            """ 
            params
            data: 完整数据
            column: 指定的检测列
            z: Z分位数, 默认为2,根据 z分数-正态曲线表,可知取左右两端的 2%,
               根据您 z 分数的正负设置。也可以任意更改,知道任意顶端百分比的数据集合
            """
            print(f'以 {column} 列为依据,使用 Z 分数法,z 分位数取 {z} 来检测异常值...')
            print('=' * 70)
            # 计算两个 Z 分数的数值点
            mean, std = np.mean(data[column]), np.std(data[column])
            upper, lower = (mean + z * std), (mean - z * std)
            print(f"取 {z} 个 Z分数:大于 {upper} 或小于 {lower} 的即可被视为异常值。")
            print('=' * 70)
            # 检测异常值
            outlier = data[(data[column] <= lower) | (data[column] >= upper)]
            return outlier, upper, lower
    
    
    outlier, upper, lower = outlier_test(data=df, column='price', method='z')#获得异常数据
    outlier.info(); outlier.sample(5)
    df.drop(index=outlier.index, inplace=True)#丢弃异常数据
    
    
    #取出自变量
    data_x=df[['area','bedrooms','bathrooms']]
    data_y=df['price']
    
    
    # 进行多元线性回归并得出结果
    model=LinearRegression()
    l_model=model.fit(data_x,data_y)
    print('参数权重')
    print(model.coef_)
    print('模型截距')
    print(model.intercept_)
    

    ② 显示结果
    在这里插入图片描述

    四、用线性回归模型的统计学库实现

    ① 代码:

    #引入包
    import pandas as pd
    import numpy as np
    import seaborn as sns
    from sklearn import datasets
    from sklearn.linear_model import LinearRegression
    from statsmodels.formula.api import ols #相比前面新引入的包
    
    
    df = pd.read_csv('D:\\**\\house_prices.csv')#读取文件,此处为自己的文件的路径
    df.info()#显示列名和数据类型类型
    df.head(6)#显示前n行,n默认为5
    
    
    #不使用虚拟变量
    lm = ols('price ~ area + bedrooms + bathrooms', data=df).fit()
    lm.summary()
    

    ②结果显示

    在这里插入图片描述

    1. 我们可以用以下代码来查看相关性(当出现多元共线性时):

    ①代码

    def vif(df, col_i):
        """
        df: 整份数据
        col_i:被检测的列名
        """
        cols = list(df.columns)
        cols.remove(col_i)
        cols_noti = cols
        formula = col_i + '~' + '+'.join(cols_noti)
        r2 = ols(formula, df).fit().rsquared
        return 1. / (1. - r2)
    test_data = results[['area', 'bedrooms', 'bathrooms', 'A', 'B']]
    for i in test_data.columns:
        print(i, '\t', vif(df=test_data, col_i=i))
    

    ② 结果显示:
    在这里插入图片描述

    可见bedroom和bathroom相关程度较高。

    1. 这时我们去掉bedroom

    ①代码

    # 去掉bedroom再次建模
    lm = ols(formula='price ~ area + bathrooms', data=df).fit()
    lm.summary()
    

    ②结果显示

    在这里插入图片描述

    小小的总结

    1. 在做多元线性回归时,虽然自变量越多并不一定得到结果的就越准确,但多个自变量的最优组合共同来预测或估计因变量,比只用某些自变量进行预测或估计更有效,更符合实际。
    2. 多元线性回归属于监督机器学习算法,通过已知数据训练得到模型或决策函数。应用此算法时,不能盲目地套用算法,必须对数据的有效性、正确性、假设合理性进行验证,如果发现数据本身不正确,就需要纠正。一定要对数据进行预处理,数据对结果有很大的影响,特别在错误数据很多的时候。

    参考文献

    1. 多元线性回归算法预测房价
    2. 多元线性回归分析
    3. 数据预处理:数据探索与数据清洗(缺失值+异常值)、数据集成+数据规约+数据变换
    4. 特征共线性问题
    5. 多重共线性(统计累赘)的概念、特征及其测量方式和处理方式
    展开全文
  • 本节知识点:Excel数据分析工具库—回归线性回归和非线性回归简单线性回归和多重线性回归逻辑斯蒂回归一、什么是回归分析(Regression)1、定义确定两种或两种以上变量间相关关系的一种统计分析方法。通过数据间相关性...
  • 因此多元线性回归比一元线性回归的实用意义更大。 多元线性回归模型,(multivariable linear regression model )在实际经济问题中,一个变量往往受到多个变量的影响。例如,家庭消费支出,除了受家庭可支配收入...
  • 多元线性回归分析

    千次阅读 2021-10-21 09:24:41
    小鹿一、概念二、EXCEL进行多元线性回归三、sklearn3.1 不进行数据处理3.2 进行数据处理3.3 分析四、总结五、参考 ...1.删掉表里的数据项,以进行多元线性回归 2.选中要进行多元线性回归的区域,点击文
  • 线性回归以及非线性回归

    千次阅读 2019-10-12 22:19:59
    一元线性回归 只含有一个自变量,对应的方程是一条直线 代价函数(损失函数) 这个代价函数也称为平方误差代价函数 思想:对于训练样本(x, y)来说,选择θ0,θ1 使h(x) 接近y 选择合适的(θ0, θ1...
  • 本节知识点:Excel数据分析工具库—回归线性回归和非线性回归简单线性回归和多重线性回归逻辑斯蒂回归一、什么是回归分析(Regression)1、定义确定两种或两种以上变量间相关关系的一种统计分析方法。通过数据间...
  • 这里写目录标题一、多元线性回归基础理论二、案例分析三、数据预处理1.错误数据清洗2.数值型数据转换四、使用Excel实现回归1.回归实现2.回归分析五、使用Sklearn库实现回归六、总结七、参考 一、多元线性回归基础...
  • EXCEL多元回归分析

    万次阅读 多人点赞 2018-04-13 14:36:14
    一、多元回归分析定义: 多元回归分析(Multiple Regression Analysis)是指在相关变量中将一个变量视为因变量,其他一个或多个变量视为自变量,建立多个变量之间线性或非线性数学模型数量关系式并利用样本数据进行...
  • 多元线性回归算法预测房价一、多元线性回归的概念二、EXCEL多元线性回归解析三、用Sklearn库做多元线性回归解析四、线性回归模型的统计学库实现参考 一、多元线性回归的概念 在回归分析中,如果有两个或两个以上的...
  • 1.因变量的分类 回归分析 三个重要作用:
  • 多元线性回归

    千次阅读 2021-09-04 15:26:54
    多元线性回归通俗理解就是一个因变量与多个自变量之间的相关关系 scikit-learn中的线性回归使用 from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split from...
  • 一元线性回归多元线性回归模型的python实现
  • 其与线性回归分析区别在于,线性回归分析的因变量Y属于定量数据,而Logistic回归分析的因变量Y属于分类数据。 (1)Logistic回归分类 结合Y值的具体情况,Logistic回归分析共分为三种,分别是二元Logistic回归分析,...
  • 数学建模-多元线性回归

    千次阅读 2021-08-07 12:17:01
    回归的思想 通过研究自变量X和因变量Y的相关关系,尝试...线性回归 OLS、GLS(最小二乘) 连续数值型变量 GDP、产量、收入 0-1回归 logistic回归 二值变量(0‐1) 是否违约、是否得病 定序回归 probit定序回归 定
  • 文章目录一、多元线性回归二、使用EXCEL三、Python中分析(不使用Sklearn)总结 一、多元线性回归 二、使用EXCEL 选中price 列所有数据,选择数据,再选择数据分析中的回归,点击确定 设置输入和输出选项,点击...
  • 多元线性回归及案例(Python)

    千次阅读 2022-04-11 17:38:23
    1 多元线性回归简介 2 案例:客户价值预测模型 2.1 案例背景 2.2具体代码 3模型评估 参考书籍 1 多元线性回归简介 多元线性回归模型可以表示为如下所示的公式。 其中x1、x2、x3……为不同的特征变量,k1...
  • 多元线性回归参数求解3.梯度下降4.梯度下降法求解多元线性回归梯度下降算法在机器学习中出现频率特别高,是非常常用的优化算法。本文借多元线性回归,用人话解释清楚梯度下降的原理和步骤。(PS:也不知道为啥,在...
  • 多元线性回归模型预测房价

    千次阅读 2021-10-30 15:14:12
    模型优化 二、用Excel重做上面的多元线性回归,求解回归方程 三、用机器学习库Sklearn库重做上面的多元线性归 四、参考文献 一、多元线性回归模型预测房价 1.基础包导入 import pandas as pd import numpy as np ...
  • 多元线性回归 stata

    万次阅读 多人点赞 2019-09-16 09:43:18
    回归的思想,任务,使命 可以看到0-1回归的因变量自变量都是0-1变量 因变量y可以分为 解释y的形成机制就是通过建立x,y的数学关系式 感觉相关分析就是回归分析的前两步, 数据的分类 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,356
精华内容 542
关键字:

excel多元非线性回归