精华内容
下载资源
问答
  • 来自烟水暖的学习笔记回归分析(Regression analysis)回归...回归分析的分类:1) 按自变量的个数,可以分为一元回归,多元回归2)按变量相关性的形状(回归线)是否为直线型,可分为线性回归,非线性回归。下面,...

    来自烟水暖的学习笔记

    回归分析(Regression analysis)

    回归分析(Regression analysis),是研究因变量与自变量之间相关性的一种数学方法,并将相关性量化,即得到回归方程。我们可以通过回归方程(回归预测模型)来预测因变量的变化。

    回归分析的分类:

    1) 按自变量的个数,可以分为一元回归,多元回归

    2)按变量相关性的形状(回归线)是否为直线型,可分为线性回归,非线性回归。

    下面,我们将通过python工具来理解最简单的回归分析,即一元线性回归,并了解回归分析的步骤。

    想要更多了解回归分析包含的内容,可参考下面内容烟水暖:详细解读Excel回归分析:价格与需求的相关性​zhuanlan.zhihu.comzhihu-card-default.svg

    一元线性回归

    顾名思义,就是只包含一个自变量,且与因变量的关系是呈线性的回归分析,其回归方程(回归模型)可用下面的方程表示:

    y=bx+a (其中:y为因变量,x为自变量,b为回归系数或斜率,a为截距)

    简单实例

    我们将通过分析产品A的单价与销量之间的关系,来预测当产品A的定价为x,市场的需求量y将会是多少,这样我们就能知道该向供应商订购多少产品A。

    数据如下:确定变量,导入数据

    2. 探索性数据分析,绘制散点图,观察变量之间关系及趋势变化,确定回归类型

    #绘制散点图,观察Price,demand的相关性

    由图可见,Price与Demand具有较强的负相关性,即Price增加,Demand反而减少。

    我们也可通过下面函数观察Price与Demand的相关系数(相关系数R是描述变量之间的相关性,范围在[-1,1]之间,R>0,则为正相关,R<0,则为负相关;R的绝对值越接近于1,相关性越强,反之,相关性越弱)

    3. 建立回归模型,并进行模型训练

    在统计学中,一般我们是通过“最小二乘法”直线拟合来执行线性回归分析。

    4. 检验模型的拟合程度

    查看模型的判断系数,判断其拟合度。

    判断系数为0.8679788013877346,可见模型的拟合程度还是较高的。

    下面将拟合回归线放入散点图,直观的感受模型的拟合程度:

    最后查看回归方程的内容:

    模型包含的内容:

    参数:

    fit_intercept: 默认为true,是否计算截距

    normalize: 是否将数据归一化

    copy_X:是否复制x的值,默认是复制,否则覆盖原来x的值

    n_jobs:计算模型使用的作业数,也叫核数

    属性:

    coef_:斜率

    intercept_:截距

    方法:

    fit() 拟合线性模型

    get_params() 获取估计量的参数,即返回上面四个参数的内容

    predict() 使用模型预测结果

    score() 返回判定系数 ^2,判定系数描述的是回归方程的拟合优度,值越接近于1,拟合度越高

    set_params()设置估计量的参数的内容

    这里,我们只需要拿到下面内容,即可知道回归模型的内容。

    即Price与Demand呈负相关性,且可用 y=-0.895x+10.128来描述其关系。接下来,我们便可用这个模型来预测需求。

    5. 使用回归模型预测

    通过模型的预测方法,我们可预测当产品A的价格为8,或8.2,对应的需求为2.96,2.78.

    总结

    通过上面的学习,我们可用了解到最简单的线性回归分析,理解其如何帮我们来分析Price和Demand之间的关系,并由此预测Demand。

    展开全文
  • 一元线性回归模型

    2019-12-08 19:42:27
    一元线性回归模型 线性回归模型是数据科学领域最简单的模型,很多复杂的模型 (如多项式回归、逻辑回归、SVM) 都是建立线性回归模型的基础上的,或者是从其中能找到线性回归模型的影子。最简单的线性回归模型就是...

    本文主要介绍线性回归模型,该模型主要应用于监督学习中目标变量是连续数值型的场景。

    一元线性回归模型

    线性回归模型是数据科学领域最简单的模型,很多复杂的模型 (如多项式回归、逻辑回归、SVM) 都是建立在线性回归模型的基础上的,或者是从其中能找到线性回归模型的影子。最简单的线性回归模型就是一元线性回归模型,其模型的形式就是:
    y=ax+b(1) y=ax+b \tag{1}
    由式(1)可知,线性回归是针对连续数值型变量的模型,且样本只有一个特征,即只有一个自变量。所谓线性,是指方程是线性的,也就是在寻找一条直线来拟合数据;所谓回归,是指用方程来模拟变量之间是如何关联的。线性回归就是要找一条直线,并且让这条直线尽可能地拟合训练样本中的数据点。

    虽然我们可以找到一条拟合训练集的直线,但是同一训练样本可以拟合出很多条直线,我们如何判断那条直线是最适合的?这就引出了如何评价模型结果的好坏,又通过什么样的方式来判断?接下来我们通过损失函数来了解线性回归的评价标准。

    损失函数

    为了衡量模型的效果,很自然的就会想到衡量预测值与真实值之间的差别。假设预测值为f(x),真实值为y,样本的数量为n,那么就有:
    i=1n(f(xi)yi)2(2) \sum_{i=1}^n(f(x_i)-y_i)^2 \tag{2}
    也就是每一个样本的预测值与真实值差的平方和,取平方是为了消除负数的影响。

    式(2)就是均方误差(MSE, Mean Squared Error),它对应了常用的欧氏距离(也就是计算两点之间距离)。均方误差是机器学习中回归问题经常使用的评价方式,在机器学习中称之为损失函数。可以看到一个公式在不同的地方会有不同的名字,很容易搞混,但我们只要理解其中的基本思想就会很清楚了。

    所以,现在我们知道了损失函数是衡量回归模型误差的函数,也就是我们要的“直线”的评价标准。这个函数的值越小,说明直线越能拟合我们的数据。

    得到损失函数后,又如何求得使损失函数最小的a和b呢,接下来我们通过最小二乘法来获得问题的解。

    最小二乘法

    回归方程里,求得特征对应的最佳回归系数的方法是最小化误差的平方和,也就是损失函数。

    假设式(2)的值为S,将式(1)代入式(2)可得:
    S=i=1n(f(xi)axib)2(3) S =\sum_{i=1}^n(f(x_i)-ax_i-b)^2 \tag{3}
    在xi和yi已知的前提下,式(3)是a和b的二次函数。由微积分的知识可知,要求得a和b的最小值分别对a和b求偏导,当两者的偏导数为0时取得最小值。如下所示:
    Sa=2i=1n(yiaxib)xi=0(4) \frac {\partial S } {\partial a }=2\sum_{i=1}^n(y_i - ax_i-b)x_i = 0 \tag{4}

    Sb=2i=1n(yiaxib)=0(5) \frac{\partial S}{\partial b} = 2\sum_{i=1}^n(y_i-ax_i-b)=0 \tag{5}

    将xi和yi代入(4)和(5)式中就可以得到a和b的最小值。

    总结

    本文简单介绍了一元线性回归模型及其损失函数,并通过最小二乘法求得线性方程的最小参数。

    参考资料

    模型之母:简单线性回归&最小二乘法

    用人话讲明白线性回归LinearRegression

    机器学习眼中的线性回归

    展开全文
  • 一元线性回归模型很简单y1=ax+b+ε,y1为实际值,ε为正态的误差。y2=ax+b,y2为预测值。ε=y1-y2。def model(a,b,x):# x is vector,a and b are the common number.return a*x+b这里将整组数据的预测结果方差作为...

    一元线性回归模型很简单

    y1=ax+b+ε,y1为实际值,ε为正态的误差。

    y2=ax+b,y2为预测值。

    ε=y1-y2。def model(a,b,x):

    # x is vector,a and b are the common number.

    return a*x+b

    这里将整组数据的预测结果方差作为损失函数。

    J(a,b)=sum((y1-y2)^2)/ndef cost(a,b,x,y):

    # x is argu, y is actual result.

    n=len(x)

    return np.square(y-a*x-b).sum()/n

    优化函数则进行使损失函数,即方差最小的方向进行搜索

    a=a-theta*(∂J/∂a)

    b=b-theta*(∂J/∂b)

    这里的解释就是,对影响因素a或b求损失函数J的偏导,如果损失函数随着a或b增大而增大,我们就需要反方向搜索,使得损失函数变小。

    对于偏导的求取则看的别人的推导公式

    theta为搜索步长,影响速度和精度(我猜的,实际没有验证)def optimize(a,b,x,y):

    theta = 1e-1 # settle the step as 0.1

    n=len(x)

    y_hat = model(a,b,x)

    # compute forecast values

    da = ((y_hat-y)*x).sum()/n

    db = (y_hat-y).sum()/n

    a = a - theta*da

    b = b - theta*db

    return a, b

    使用sklearn库,可以使用现成的线性回归模型import numpy as np

    from sklearn.linear_model import LinearRegression

    import matplotlib.pyplot as plt

    x = [1,2,4,5,6,6,7,9]

    x = np.reshape(x,newshape=(8,1))

    y = [10,9,9,9,7,5,3,1]

    y = np.reshape(y,newshape=(8,1))

    # create an instance of LinearRegression model

    lr = LinearRegression()

    # train model

    lr.fit(x,y)

    lr.score(x,y)

    # compute y_hat

    y_hat = lr.predict(x)

    # show the result

    plt.scatter(x,y)

    plt.plot(x, y_hat)

    plt.show()

    展开全文
  • 线性回归线性回归公式:$h_θ$ = $θ_0$ + $θ_1x$平方差代价函数:$J(θ)$ = $\frac1{2m}\sum_{i=1}^{m}{(h_θ(x^{(i)}) - y^{(i)})}^2$梯度下降$θ_j := θ_j - α\frac∂ {∂ θ_j}J(θ_0,θ_1)$使用上面的公式...

    线性回归

    线性回归公式:$h_θ$ = $θ_0$ + $θ_1x$

    平方差代价函数:$J(θ)$ = $\frac1{2m}\sum_{i=1}^{m}{(h_θ(x^{(i)}) - y^{(i)})}^2$

    梯度下降

    $θ_j := θ_j - α\frac∂ {∂ θ_j}J(θ_0,θ_1)$

    使用上面的公式不断的更新代价函数$J(θ)$,直到$J(θ)$收敛或者不再发散,其中:

    $\frac∂ {∂ θ_j}J(θ_0,θ_1)$ = $\frac∂{∂θ_j}\frac1{2m} \sum_{i=1}^{m}(θ_0 +θ_1x^{(i)} - y^{(i)})^2$

    $j = 0:\frac∂ {∂ θ_0}J(θ_0,θ_1) = \frac1m\sum_{i=1}^{m}(h_θ(x^{(i)}) - y^{(i)})$

    $j = 1:\frac∂ {∂ θ_1}J(θ_0,θ_1) = \frac1m\sum_{i=1}^{m}(h_θ(x^{(i)}) - y^{(i)}) * x^{(i)}$

    算出代价函数$j$的斜率后,将其代回梯度下降算法,代入之后的线性回归的梯度下降算法为: $θ_0 := θ_0 - α\frac1m\sum_{i=1}^{m}(h_θ(x^{(i)}) - y^{(i)})$

    $θ_1 := θ_1 -α\frac1m\sum_{i=1}^{m}(h_θ(x^{(i)}) - y^{(i)}) * x^{(i)}$

    不断重复该过程直到收敛或者不再发散。

    python代码实现

    import numpy as np

    import matplotlib.pyplot as plt

    import pandas as pd

    def h(xita0,xita1,data):

    data['y_pre'] = xita0 + data['x']*xita1

    j0 = (1/(data.shape[0])*2) * sum(data['y_pre'] - data['y'])

    j1 = (1/(data.shape[0])*2) * sum((data['y_pre'] - data['y']) * data['x'])

    return j0,j1

    def j(data,aerfa=0.001,max_iters=100000,precision=0.00001):

    xita0 = 0

    xita1 = 0

    for i in range(max_iters):

    print('xita0,xita1:',xita0,xita1)

    j0,j1 = h(xita0,xita1,data)

    print(j0,j1)

    if abs(j1) < precision:

    break

    xita0 = xita0 - aerfa * j0

    xita1 = xita1 - aerfa * j1

    print(i)

    return xita0,xita1

    num_points = 1000

    vectors_set = []

    for i in range(num_points):

    x1 = np.random.normal(0.0, 0.55)

    y1 = x1 * 0.5 + 0.5 + np.random.normal(0.0, 0.03)

    vectors_set.append([x1, y1])

    data = pd.DataFrame(vectors_set,columns=['x','y'])

    xita0,xita1 = j(data)

    x_data = [v[0] for v in vectors_set]

    y_data = [v[1] for v in vectors_set]

    y_pre = [xita0 + xita1*v[0] for v in vectors_set]

    plt.scatter(x_data,y_data,c='b')#c表示颜色

    plt.plot(x_data,y_pre)

    plt.show()

    复盘

    平方差代价函数:$J(θ)$ = $\frac1{2m}\sum_{i=1}^{m}{((θ_0 + θ_1x) - y^{(i)})}^2$ 梯度下降法求解的过程就是通过不断的迭代,通过不同的$θ_0 和 θ_1$的组合,来求$J(θ)$的值,使得$J(θ)$最小的那个组合,就是线性回归模型中最优的$θ_0 和 θ_1$。 下面,我们使用python来求解:

    from matplotlib import pyplot as plt

    from mpl_toolkits.mplot3d import Axes3D

    import pandas as pd

    def surface3d_data():

    '''我们从0到1易0.05的步长迭代不同的θ_0(x)和 θ_1(y)的组合,来计算代价值(z)'''

    for t0 in float_range(0, 1, 0.05):

    x = float(t0)

    for t1 in float_range(0, 1, 0.05):

    y = float(t1)

    z = round((1/(data.shape[0])*2) * sum(np.square((x + y*data['x'])-data['y'])),4)

    yield [x, y, z]

    def draw(x, y, z):

    '''采用matplolib绘制曲面图:param x: x轴坐标数组:param y: y轴坐标数组:param z: z轴坐标数组:return:'''

    X = x

    Y = y

    Z = z

    fig = plt.figure(figsize=(30,30))

    ax = fig.add_subplot(111, projection='3d')

    ax.plot_trisurf(X, Y, Z)

    plt.show()

    res = list(surface3d_data())

    df = pd.DataFrame(res,columns=['xita0','xita1','j'])

    #查看使得代价函数最小的'xita0','xita1'是多少

    print(df.loc[df.j.idxmin(),:])

    # 输出结果为:

    # xita0 0.5000

    # xita1 0.5000

    # j 0.0009

    # 和我们生成随机数点的公式相同,如下:

    # y1 = x1 * 0.5 + 0.5 + np.random.normal(0.0, 0.03)

    x = [v[0] for v in res]

    y = [v[1] for v in res]

    z = [v[2] for v in res]

    draw(x, y, z) #画出代价函数的曲面图

    通过观察可得,曲面大概在x = 0.5,y = 0.5点的点上取得最小值。

    展开全文
  • -*-coding:utf-8-*-import numpy as npimport matplotlib.pyplot as plt2、定义线性回归模型def predict(x, a, b):y_predict = a * x + breturn y_predict一元线性回归的模型如下:公式1—一元线性回归模型损失函数...
  • 问题制作一元材积表,不懂林学的可能不知道,如图,也就是构造材积和胸径间的关系,这里采用了python的一元线性回归方法(本人用spss做了幂函数非线性回归,效果最好)。Python方差分析导入库和数据from sklearn ...
  • x_d)$,其中 $x_i$ 为 $\boldsymbol{x}$ 第 $i$ 个属性上的取值,线性模型(linear model)试图学得一个通过属性的线性组合来进行预测的函数,即:$$f(\boldsymbol{x}) = w_1x_1 + w_2x_2 + ... +...
  • 一元线性回归

    2020-10-20 10:47:49
    一元线性回归 ...在一元线性回归模型y=wx+b中,x称为模型变量,w和b称为模型参数,其中w为权重,b为偏置值。 我们要解决的问题就是如何根据样本数据来确定模型参数,w和b呢, 假设有n组样本(x1x_1x1​,
  • Matlab中实际上有多个函数可以实现回归分析的功能,如regress,polyfit,lsqcurvefit等。这里简单总结一下polyfit函数的用法:Matlab中实际上有多个函数可以实现回归分析的功能,如regress,polyfit,lsqcurvefit等...
  • 之前的博文讲的是理论。现在需要用到成熟的库,来应用。 Science 科学的工具包 kit # sklearn 命名惯例: ...# LinearRegression 线性回归的类,我们可以使用该类实现线性回归。 # 底层就是使用...
  • 简要:实际上计量模型估计和实现最好用的软件还是stata,这个软件无论国内还是国外,经济学家们都是爱不释手。今天我们要介绍的是python中的一个较为强大的统计分析包(Statsmodels),不过需要强调的是python因为...
  • """ 《深度学习与图像识别原理实践》 """ import numpy as np class SimpleLinearRegressionSelf... 初始化Simple Linear regression 模型 """ self.a_=None self.b_=None def fit(self,x_train,y_train): asser.
  • 一元线性回归模型和最小二乘法

    千次阅读 2019-10-08 19:27:05
    一元线性回归模型 参数估计(最小二乘法) 最小二乘法c++实现 导言 监督学习中,预测的变量是离散的,则称分类 otherwise 连续的变量称回归。 回归中只包含一个自变量和因变量,二者为线性关系,则为一元线性...
  • 一元线性回归分析预测法模型,根据历史数据预测下期数据值
  • 线性回归分析学习笔记第一篇:一元线性回归 1.线性回归分析究竟是何方神圣? 首先要弄懂什么是回归分析大数据分析中,回归...这里提到的定量关系也就是变量间的“线性”关系,形如:y = a + bx(一元线性回归)
  • **TensorFlow 实现一元线性回归模型一元线性回归即是将N个随机样本点拟合到一条直线上:样本点: x y 3.3 1.7 4.4 2.7 5.5 2.1 6.71 3.2 6.93 1.69 4.168 1.573 9.779 3.366 6.182 2.596 … … ...
  • 一元非线性回归模型求解: 一元线性回归方程求解 c语言求解过程 // 求线性回归方程:Y = a + bx // dada[rows*2]数组:X, Y;rows:数据行数;a, b:返回回归系数 // SquarePoor[4]:返回方差分析指标: 回归...
  • 一元线性回归分析

    2014-06-17 22:10:41
    满足一元线性回归的基本条件: 所有的 的分布的均值都正好一条直线上,称之为总体的(真实...满足这些条件的回归模型称为一元线性回归模型。  根据样本观测值,采用最小二乘法,得到了一条估 计的样本回归直线 。
  • 1.一元线性回归模型 #一元线性回归模型 import pandas as pd import matplotlib.pyplot as plt import seaborn as sns #导入数据集 E:\app\Anaconda\数据挖掘\数据挖掘源代码\第7章 线性回归模型 #导入数据集 E...
  • MATLAB一元线性回归分析

    千次阅读 2019-09-25 07:02:00
    MATLAB一元线性回归分析应用举例 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ huigui.m function [b,bint,r,rint,states,sima2,p,y0,zxqj]=huigui(x,y,x0) %x –p元线性模型自变量的n个观测值...
  • 一元线性回归及Excel回归分析

    千次阅读 2019-06-08 19:26:54
    一元线性回归可以说是数据分析中非常简单的一个知识点,有一点点统计、分析、建模经验的人都知道这个分析的含义,也会用各种工具来做这个分析。这里面想把这个分析背后的细节讲讲清楚,也就是后面的数学原理。 什么...
  • 线性回归从一元线性回归入门

    千次阅读 2018-08-07 01:03:59
    本文是从一元线性回归为为基础来理解线性回归,适合于线性回归的入门,让初学者对于线性回归有直观的理解。本文也是我对于线性回归算法入门学习,分享给大家。 线性回归的定义 回归是用于应用于输入变量与输出...
  • 机器学习(一元线性回归模型

    千次阅读 2020-01-22 20:50:54
    模型:一元线性回归模型 回归分析:建立方程模拟两个或者多个变量之间是如何相互关联,被预测的变量称为因变量(结果),用来进行预测的变量称为 自变量(输入参数),当输入参数只有一个(输出1个)时,称为一元...
  • 一元线性回归分析(SPSS版) 原创 Gently spss学习乐园 2019-11-25 一元线性回归模型回归分析(regression analysis )是研究一个变量如何随另一个或一些变量变化的方法。例如,学习成绩会受努力的时间,方法,个人...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,009
精华内容 2,803
关键字:

在一元线性回归模型y