机器学习 您所在的位置:网站首页 简述回归分析预测的基本原理是什么 机器学习

机器学习

2024-04-20 01:23| 来源: 网络整理| 查看: 265

一、线性回归算法的原理

  回归是基于已有数据对新的数据进行预测,比如预测股票走势。这里我们主要讲简单线性回归。基于标准的线性回归,可以扩展出更多的线性回归算法。 

  线性回归就是能够用一个直线较为精确地描述数据之间的关系,这样当出现新的数据的时候,就能够预测出一个简单的值。

  线性回归的模型形如:

                  

  线性回归得出的模型不一定是一条直线:

    (1)在只有一个变量的时候,模型是平面中的一条直线;

    (2)有两个变量的时候,模型是空间中的一个平面;

    (3)有更多变量时,模型将是更高维的。

  线性回归模型有很好的可解释性,可以从权重W直接看出每个特征对结果的影响程度。线性回归适用于X和y之间存在线性关系的数据集,可以使用计算机辅助画出散点图来观察是否存在线性关系。我们尝试使用一条直线来拟合数据,使所有点到直线的距离之和最小。

  实际上,线性回归中通常使用残差平方和,即点到直线的平行于y轴的距离而不用垂线距离,残差平方和除以样本量n就是均方误差。均方误差作为线性回归模型的损失函数(cost function)。使所有点到直线的距离之和最小,就是使均方误差最小化,这个方法叫做最小二乘法。

  损失函数公式:

              因为  

  最后通过求解,得到w及b的计算公式分别如下:

                 ,  

 

   推理过程:

 

                                             

   假设我们找到了最佳拟合的直线方程 : 

    则对每一个样本点    ,根据我们的直线方程,预测值为:,其对应的真值为   

  我们希望    和   的差距尽量小,这里我们用   表达   和  的距离,

    考虑所有样本则为:

  我们的目标是使   尽可能小,而    ,所以我们要找到  a 、b  ,使得  尽可能小。

    被称为损失函数或效用函数。

 

  通过分析问题,确定问题的损失函数或效用函数,通过最优化损失函数或者效用函数,获得机器学习的模型,这是参数学习算法的一般套路。

  求损失函数可转化为典型的最小二乘法问题: 最小化误差的平方。

    最小二乘法的求解过程:

                   目标:找到  a 、b  ,使得  尽可能小。

        

           

       

                 

               

                  

                  

                   

                 

                      

                                

                

                            

                   

            

  一般过程:

               假设输入数据集D有n个样本,d个特征,则:                          D=\lgroup{ (x^{(1)},y_1) , (x^{(2)},y_2) ...(x^{(n)},y_n) } \rgroup              其中第i个样本表示为:                         (x^{(i)},y_i)=(x_1^{(i)},x_2^{(i)},...x_d^{(i)},y_i)              线性模型通过建立线性组合进行预测。我们的假设函数为:                          h_\theta(x_1,x_2,...x_d)=\theta_0+\theta_1x_1+\theta_2x_2+...+\theta_dx_d \qquad(1)                                   其中\theta_0,\theta_1...\theta_d为模型参数。              令x_0=1x^{(i)}=(x_1^{(i)},x_2^{(i)},...x_d^{(i)})为行向量,令                               X=\begin{bmatrix} x^{(0)}\\ x^{(1)}\\ \vdots\\ x^{(n)} \end{bmatrix}_{n \times d}, \theta=\begin{bmatrix} \theta_0\\ \theta_1\\ \vdots\\ \theta_d \end{bmatrix}_{d \times 1} , Y=\begin{bmatrix} y_1\\ y_2\\ \vdots\\ y_n \end{bmatrix}_{n \times 1}                              Xn \times d维矩阵,\thetad \times 1维向量,则假设函数(1)式可表示为:                                                                   h_\theta(X)=X\theta                             损失函数为均方误差,即                                            J(\theta)=\frac{1}{2} (X\theta - Y)^T (X\theta - Y)                           最小二乘法求解参数,损失函数J(\theta)\theta求导:                                                  \nabla J(\theta)=2X^T(X\theta-Y)                           令\nabla J(\theta)=0,得                                                             \theta=(X^TX)^{-1}X^TY   二、算法优缺点   优点:     (1)思想简单,实现容易。建模迅速,对于小数据量、简单的关系很有效;     (2)是许多强大的非线性模型的基础。     (3)线性回归模型十分容易理解,结果具有很好的可解释性,有利于决策分析。     (4)蕴含机器学习中的很多重要思想。     (5)能解决回归问题。   缺点:     (1)对于非线性数据或者数据特征间具有相关性多项式回归难以建模.     (2)难以很好地表达高度复杂的数据。 三、代码实现   1.简单的线性回归算法 import numpy as np import matplotlib.pyplot as plt x=np.array([1,2,3,4,5],dtype=np.float) y=np.array([1,3.0,2,3,5]) plt.scatter(x,y) x_mean=np.mean(x) y_mean=np.mean(y) num=0.0 d=0.0 for x_i,y_i in zip(x,y): num+=(x_i-x_mean)*(y_i-y_mean) d+=(x_i-x_mean)**2 a=num/d b=y_mean-a*x_mean y_hat=a*x+b plt.figure(2) plt.scatter(x,y) plt.plot(x,y_hat,c='r') x_predict=4.8 y_predict=a*x_predict+b print(y_predict) plt.scatter(x_predict,y_predict,c='b',marker='+')

  输出结果:

                          

  2.基于sklearn的简单线性回归

import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression # 线性回归 # 样本数据集,第一列为x,第二列为y,在x和y之间建立回归模型 data=[ [0.067732,3.176513],[0.427810,3.816464],[0.995731,4.550095],[0.738336,4.256571],[0.981083,4.560815], [0.526171,3.929515],[0.378887,3.526170],[0.033859,3.156393],[0.132791,3.110301],[0.138306,3.149813], [0.247809,3.476346],[0.648270,4.119688],[0.731209,4.282233],[0.236833,3.486582],[0.969788,4.655492], [0.607492,3.965162],[0.358622,3.514900],[0.147846,3.125947],[0.637820,4.094115],[0.230372,3.476039], [0.070237,3.210610],[0.067154,3.190612],[0.925577,4.631504],[0.717733,4.295890],[0.015371,3.085028], [0.335070,3.448080],[0.040486,3.167440],[0.212575,3.364266],[0.617218,3.993482],[0.541196,3.891471] ] #生成X和y矩阵 dataMat = np.array(data) X = dataMat[:,0:1] # 变量x y = dataMat[:,1] #变量y # ========线性回归======== model = LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False) model.fit(X, y) # 线性回归建模 print('系数矩阵:\n',model.coef_) print('线性回归模型:\n',model) # 使用模型预测 predicted = model.predict(X) plt.scatter(X, y, marker='x') plt.plot(X, predicted,c='r') plt.xlabel("x") plt.ylabel("y")

输出结果:

     系数矩阵:     [ 1.6314263]    线性回归模型:     LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)

  

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有