回归拟合(一)

作者: 那未必 | 来源:发表于2017-11-01 21:14 被阅读64次

    基础准备

    首先需要安装 statsmodels:

    pip install statsmodels
    

    statsmodels是一个python的统计分析包,有很多统计模型可以使用。编程时,习惯的引入方式是:

    import statsmodels.api as sm
    

    一元线性回归拟合

    创建实验数据

    为了验证方便,首先自己创建一组散点,分布在 y=1+10x 直线的周围。

    import statsmodels.api as sm
    import numpy as np
    
    # 先自己创造一组随机坐标点
    # 坐标点在 y=1+10x 附近
    # 模拟策略:
    # 设想有若干个 y=kx+m, k=10, m=1,
    # x 是某区间中的一组随机数,
    # 然后算出 y
    # 用矩阵相乘的方式来表达这个过程比较方便
    
    nsample=100
    x=np.linspace(0,10,nsample)
    X=sm.add_constant(x)
    beta=np.array([1,10])
    # 添加一点随机扰乱值
    e=np.random.normal(size=nsample)
    # 两个矩阵相乘,得到y值
    y=np.dot(X,beta)+e
    

    拟合数据

    这才是本文的重点。如果已经有了前面创建的 y、 X数据,现在只需要用 sm.OLS 模型拟合一下。总共就两步:第一、创建模型;第二、fit 数据。

    model=sm.OLS(y,X)
    result=model.fit()
    

    打印一下拟合结果:

    print result.params
    

    输出:

    [  0.85704777  10.00038404]
    

    也就是 m=0.86, k=10.00

    还可以输出更详细的拟合结果报告:

    print result.summary()
    
    拟合结果

    输出结果中,coef 列是 k和m值,而 std err 列则表达了相关性,可以认为是 1-相关系数。

    图示化展现

    y_fitted=result.fittedvalues
    fig,ax=plt.subplots(figsize=(8,6))
    ax.plot(x,y,'o',label='data')
    ax.plot(x,y_fitted,'r--.',label='OLS')
    ax.legend(loc='best')
    
    拟合图像

    相关文章

      网友评论

        本文标题:回归拟合(一)

        本文链接:https://www.haomeiwen.com/subject/zqfnpxtx.html