机器学习--线性回归算法的原理及优缺点

一、线性回归算法的原理

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

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

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

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

    考虑所有样本则为:

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

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

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

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

    最小二乘法的求解过程:

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

      

           

       

                

               

                  

                  

                   

                 

                      

                                

                

                            

                   

            

  一般过程:

假设输入数据集D有n个样本,d个特征,则:
                         
              其中第个样本表示为:
                         
              线性模型通过建立线性组合进行预测。我们的假设函数为:
                          
                                   其中为模型参数。
              令为行向量,令
                               
                              维矩阵,维向量,则假设函数(1)式可表示为:
                                                                   
                             损失函数为均方误差,即
                                            
                           最小二乘法求解参数,损失函数求导:
                                                  
                           令,得

二、算法优缺点

  优点:

    (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)

  

原文地址:https://www.cnblogs.com/lsm-boke/p/11746274.html

时间: 2024-08-29 10:25:16

机器学习--线性回归算法的原理及优缺点的相关文章

机器学习--支持向量机 (SVM)算法的原理及优缺点

一.支持向量机 (SVM)算法的原理 支持向量机(Support Vector Machine,常简称为SVM)是一种监督式学习的方法,可广泛地应用于统计分类以及回归分析.它是将向量映射到一个更高维的空间里,在这个空间里建立有一个最大间隔超平面.在分开数据的超平面的两边建有两个互相平行的超平面,分隔超平面使两个平行超平面的距离最大化.假定平行超平面间的距离或差距越大,分类器的总误差越小. 对于线性可分的支持向量机求解问题实际上可转化为一个带约束条件的最优化求解问题: 推理过程:      结果:

机器学习--K近邻 (KNN)算法的原理及优缺点

一.KNN算法原理 K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法. 它的基本思想是: 在训练集中数据和标签已知的情况下,输入测试数据,将测试数据的特征与训练集中对应的特征进行相互比较,找到训练集中与之最为相似的前K个数据,则该测试数据对应的类别就是K个数据中出现次数最多的那个分类. KNN算法的描述: (1)计算测试数据与各个训练数据之间的距离: (2)按照距离的递增关系进行排序: (3)选取距离最小的K个点: (4)确定前K个点所在类别的出现频率   (5

机器学习常见算法及原理总结(干货)

朴素贝叶斯 参考[1] 事件A和B同时发生的概率为在A发生的情况下发生B或者在B发生的情况下发生A P(A∩B)=P(A)?P(B|A)=P(B)?P(A|B) 所以有: P(A|B)=P(B|A)?P(A)P(B) 对于给出的待分类项,求解在此项出现的条件下各个目标类别出现的概率,哪个最大,就认为此待分类项属于哪个类别 工作原理 1.假设现在有样本x=(a1,a2,a3,-an)这个待分类项(并认为x里面的特征独立) 2.再假设现在有分类目标Y={y1,y2,y3,y4..yn} 3.那么ma

【机器学习】算法原理详细推导与实现(五):支持向量机(下)

[机器学习]算法原理详细推导与实现(五):支持向量机(下) 上一章节介绍了支持向量机的生成和求解方式,能够根据训练集依次得出\(\omega\).\(b\)的计算方式,但是如何求解需要用到核函数,将在这一章详细推导实现. 核函数 在讲核函数之前,要对上一章节得到的结果列举出来.之前需要优化的凸函数为: \[ min_{\gamma,\omega,b}->\frac{1}{2}||\omega||^2 \] \[ y^{(i)}(\omega^Tx^{(i)}+b) \geq 1 ,i=1,2,.

机器学习经典算法具体解释及Python实现--线性回归(Linear Regression)算法

(一)认识回归 回归是统计学中最有力的工具之中的一个. 机器学习监督学习算法分为分类算法和回归算法两种,事实上就是依据类别标签分布类型为离散型.连续性而定义的. 顾名思义.分类算法用于离散型分布预測,如前面讲过的KNN.决策树.朴素贝叶斯.adaboost.SVM.Logistic回归都是分类算法.回归算法用于连续型分布预測.针对的是数值型的样本,使用回归.能够在给定输入的时候预測出一个数值.这是对分类方法的提升,由于这样能够预測连续型数据而不不过离散的类别标签. 回归的目的就是建立一个回归方程

机器学习常见算法优缺点总结

机器学习常见算法优缺点总结 K近邻:算法采用测量不同特征值之间的距离的方法进行分类. 优点: 1.简单好用,容易理解,精度高,理论成熟,既可以用来做分类也可以用来做回归: 2.可用于数值型数据和离散型数据: 3.训练时间复杂度为O(n):无数据输入假定: 4.对异常值不敏感 缺点: 1.计算复杂性高:空间复杂性高: 2.样本不平衡问题(即有些类别的样本数量很多,而其它样本的数量很少): 3.一般数值很大的时候不用这个,计算量太大.但是单个样本又不能太少 否则容易发生误分. 4.最大的缺点是无法给

机器学习经典算法详解及Python实现--线性回归(Linear Regression)算法

(一)认识回归 回归是统计学中最有力的工具之一.机器学习监督学习算法分为分类算法和回归算法两种,其实就是根据类别标签分布类型为离散型.连续性而定义的.顾名思义,分类算法用于离散型分布预测,如前面讲过的KNN.决策树.朴素贝叶斯.adaboost.SVM.Logistic回归都是分类算法:回归算法用于连续型分布预测,针对的是数值型的样本,使用回归,可以在给定输入的时候预测出一个数值,这是对分类方法的提升,因为这样可以预测连续型数据而不仅仅是离散的类别标签. 回归的目的就是建立一个回归方程用来预测目

【吴恩达机器学习】学习笔记——2.1单变量线性回归算法

1 回顾1.1 监督学习定义:给定正确答案的机器学习算法分类:(1)回归算法:预测连续值的输出,如房价的预测(2)分类算法:离散值的输出,如判断患病是否为某种癌症1.2 非监督学习定义:不给定数据的信息的情况下,分析数据之间的关系.聚类算法:将数据集中属性相似的数据点划分为一类. 2 单变量线性回归算法2.1 符号定义m = 训练样本的数量x = 输入变量y = 输出变量2.2 工作方式训练集通过学习算法生成线性回归函数hypothesis  hθ(x) = θ0 + θ1x 原文地址:http

通过机器学习的线性回归算法预测股票走势(用Python实现)

在本人的新书里,将通过股票案例讲述Python知识点,让大家在学习Python的同时还能掌握相关的股票知识,所谓一举两得.这里给出以线性回归算法预测股票的案例,以此讲述通过Python的sklearn库实现线性回归预测的技巧. 本文先讲以波士顿房价数据为例,讲述线性回归预测模型的搭建方式,随后将再这个基础上,讲述以线性预测模型预测股票的实现代码.本博文是从本人的新书里摘取的,新书预计今年年底前出版,敬请大家关注. 正文开始(长文预警) ------------------------------