精华内容
下载资源
问答
  • 线性回归算法

    2020-04-10 12:44:56
    线性回归算法是寻找一条直线,最大程度的“拟合”样本与特征与样本输出标记之间的关系 线性回归算法特点: 解决回归问题 思想简单,容易实现 是许多强大的非线性回归模型的基础 结果具有良好的可解释性 实现一个...

    线性回归算法是寻找一条直线,最大程度的“拟合”样本与特征与样本输出标记之间的关系

    线性回归算法特点:

    • 解决回归问题
    • 思想简单,容易实现
    • 是许多强大的非线性回归模型的基础
    • 结果具有良好的可解释性

    实现一个简单的线性回归算法

    模型的最终结果应该是对给定的数据进行拟合,形成一条直线:

    y_hat(i) = ax(i)+b

    要想使得 y_hat(i) - y(i) 的平方和最小,经过最小二乘法计算就有:

    d

    接下来就可以通过给的数据集得出简单线性模型了。
    将拟合和预测的过程进行封装:

    class SimpleLinearRepression:
    
        def __init__(self):
            # 初始化 Simple Linear Repression 模型
            self.a_ = None
            self.b_ = None
    
        def fit(self, x_train, y_train):
            assert x_train.ndim == 1, " Simple Linear Repression can only solve simple feature training data "
            assert len(x_train) == len(y_train), " the size of x_train must be equal to y_train "
    
            x_mean = x_train.mean()
            y_mean = y_train.mean()
    
            num = (x_train-x_mean).dot(y_train-y_mean)
            d = (x_train-x_mean).dot(x_train-x_mean)
            self.a_ = num / d
            self.b_ = y_mean - self.a_ * x_mean
            return self
    
        def predict(self, x_predict):
            # 根据给定的 x_predict 向量预测出 y_predict 向量
            assert x_predict.ndim == 1, \
                'Simple Linear Repression can only solve simple feature training data'
            assert self.a_ is not None and self.b_ is not None, \
                'must fit before predict'
            return np.array(x_predict * self.a_ + self.b_)
    
        def __repr__(self):
            return "SimpleLinearRepression()"
    
    
    

    在 jupyter notebook 中使用:

    x = np.array([1., 2., 3., 4., 5.])
    y = np.array([1., 3., 2., 3., 5.])
    
    from python.SimpleLinearRepression import SimpleLinearRepression
    
    slr2 = SimpleLinearRepression()
    
    slr2.fit(x, y)
    
    SimpleLinearRepression()
    
    x_predict = slr2.predict(x)
    x_predict
    
    array([1.2, 2. , 2.8, 3.6, 4.4])
    
    plt.scatter(x,y)
    plt.plot(x, x_predict, color='r')
    plt.axis([0,6,0,6])
    

    s

    这样就得到一个简单的线性模型。

    多元线性回归算法

    和简单的线性回归算法一样,我们应该通过拟合具有多个特征的数据得到一条直线:
    yy

    然后求出theta 使得 y_hat(i)-y(i)的平方和最小。于是令:

    hat

    xb

    这样就有:

    在这里插入图片描述

    最后经过矩阵运算得到(化简过程网上都有) :

    2

    这就是多元线性回归的正规方程解(normal Equation)

    • 问题:时间复杂度高
    • 优点:不需要对数据进行归一化处理

    实现多元线性回归模型

    将算法进行封装:

    import numpy as np
    from sklearn.metrics import r2_score
    
    
    class LinearRepression:
        def __init__(self):
            # 初始化 LinearRepression 模型
            self.interception_ = None  # 截距
            self.coef_ = None  # 系数
            self._theta = None
    
        def fit_normal(self, X_train, y_train):
            # 根据训练集 x_train, y_train 训练 linearRepression 模型
            X_b = np.hstack([np.ones((len(X_train), 1)), X_train])
            self._theta = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y_train)
            self.interception_ = self._theta[0]
            self.coef_ = self._theta[1:]
            return self
    
        def predict(self, X_predict):
            assert X_predict.shape[1] == len(self.coef_), \
                'the length of coef_ must be equal to the column of X_predict'
            assert self.coef_ is not None and self.interception_ is not None, \
                "coef_ and interception cant' be None"
            X_b = np.hstack([np.ones((len(X_predict), 1)), X_predict])
            return X_b.dot(self._theta)
    
        def score(self, X_test, y_test):
            y_predict = self.predict(X_test)
            return r2_score(y_predict, y_test)
    
        def __repr__(self):
            return "LinearRepression()"
    
    
    

    在 jupyter notebook 中使用:

    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn import datasets
    
    boston = datasets.load_boston()
    
    X = boston.data
    
    y = boston.target
    
    X = X[y < 50.0]
    y = y[y < 50.0]
    
    from python.LinearRepression import LinearRepression
    from sklearn.model_selection import train_test_split
    
    X_train, X_test, y_train, y_test = train_test_split(
        X, y, test_size=0.2, random_state=100)
    
    reg = LinearRepression()
    
    reg.fit_normal(X_train, y_train)
    
    LinearRepression()
    
    reg.coef_
    
    array([-1.00287922e-01,  3.26543388e-02, -4.68509409e-02,  1.02921936e+00,
           -1.15927300e+01,  3.59511341e+00, -2.53657709e-02, -1.16387369e+00,
            2.22080674e-01, -1.21981663e-02, -8.16231253e-01,  7.16938620e-03,
           -3.50243874e-01])
    
    reg.interception_
    
    32.20511321044348
    
    reg.score(X_test, y_test)
    
    0.7819244293617029
    

    衡量线性回归算法的指标:MSE RMSE MAE 和 R Squared

    MSE
    RMSE
    在这里插入图片描述

    其中MSERMSE 就是量纲上的差距,而 MAE 就是衡量预测值与真实值之间的平均绝对误差,思想比较简单但也很实用。
    最好的线性回归评价指标 R Squared:

    r_squared
    r_squared
    r_squared

    • R2 <= 1
    • R2 的值越大越好,当我们的模型不犯任何错误时得到最大值 1。
    • 当我们的模型等于基准模型时, R2 取得 0。
    • 如果 R2 的值 < 0 ,说明我们的模型还不如基准模型,此时很有可能我们的数据并不是线性关系。

    然后让分数的分子分母同时 /m 就得到如下公式:

    在这里插入图片描述

    其中 Var(y) 就是样本数据的方差,接下来我们就来实现这些评价标准。

    MSE

    mse_test = np.sum((y_predict-y_test)**2) / len(y_test)
    mse_test
    
    24.156602134387438
    

    RMSE

    from math import sqrt
    
    rmse_test = sqrt(mse_test)
    rmse_test
    
    4.914936635846635
    

    MAE

    mae_test = np.sum(np.absolute(y_predict-y_test))/len(y_test)
    mae_test
    
    3.5430974409463873
    

    sklearn 中的MSE 和 MAE

    from sklearn.metrics import mean_squared_error
    from sklearn.metrics import mean_absolute_error
    
    mean_squared_error(y_test, y_predict)
    
    24.156602134387438
    
    mean_absolute_error(y_test, y_predict)
    
    3.5430974409463873
    

    R Squared

    1-mean_squared_error(y_test, y_predict) / np.var(y_test)
    
    0.6129316803937322
    
    from sklearn.metrics import r2_score
    
    r2_score(y_test, y_predict)
    
    0.6129316803937324
    

    ヾ( ̄▽ ̄)Bye~~Bye~

    个人博客:线性回归算法

    展开全文
  • 线性回归算法原理

    千次阅读 多人点赞 2021-03-14 15:54:35
    线性回归算法原理预测函数从一元到多元标量、向量、矩阵符号的定义标量展开式标量求和式向量内积式矩阵乘法式损失函数0-1损失绝对损失平方损失经验风险基本公式线性回归的经验风险梯度下降偏导数与梯度梯度下降的...


    我们来学习线性回归的基本原理。

    我们之前说到分类与回归的区别是预测的 y 值是否连续。由此可知,线性回归属于监督学习中的回归算法,用来预测连续的 y 值。下面我们先来看一下线性回归的预测函数~

    预测函数

    从一元到多元

    我们在第 1 章学过的 f(x) = kx+b 是最简单的线性回归模型,模型的输入只有一个特征 x 。其中,斜率 k 在机器学习中的术语叫做特征 x 的权重(weight),截距 b 在机器学习中的术语叫做偏置(bias)。 取二者的英文缩写后,单特征的线性回归模型就可以写成 f(x) = wx+b。

    只有一个输入特征的线性回归模型叫做一元线性回归模型,如上面提到的 f(x) = wx+b;有多个输入特征的线性回归模型叫做多元线性回归模型。那么,多元线性回归模型是什么样的呢?

    先来看有两个输入特征 x1 和 x2 的线性回归模型:

    线性回归
    模型的预测输出 f(x1,x2) 等于每个输入特征(x1和x2)乘以对应的权重(w1和w2)后再求和,最后加上偏置项 b 。类似的,我们可以写出有 n 个输入特征的线性回归模型:

    线性回归
    由模型的表达式可知:特征 x1 每增加一个单位值,模型的预测输出值就会增加 w1;权重 w1越大,特征 x1 变化时对模型的预测输出影响就越大,即:权重 w 的大小在一定程度上反映了其对应特征 x 的重要性。

    为了形式的统一,我们可以把上面的多元线性回归模型中的偏置项 b 改写成 w0,同时令x0=1,使得:b = w0*x0,因而多元线性回归模型可以表示成如下的形式:

    线性回归
    问:多元线性回归建模的输入特征有3个时,模型参数有多少个呢?
    A:3个
    B:4个
    C:5个
    答案:B 多元线性回归模型的参数除了每个输入特征的权重参数外,还有一个偏置项参数。

    标量、向量、矩阵

    从形式上来看:标量是一个单独的实数,向量是一维数组,矩阵是二维数组

    标量只有大小,向量既有大小又有方向;例如,有3个元素的向量 [2,3,5] 可以代表三维空间直角坐标系中的一个点 A,从原点 O 到点 A 的有向线段 OA 代表了这个向量的方向。向量的大小是原点到点 A 的欧式距离,如图所示:

    坐标方向
    向量可以看做是只有一行或只有一列的矩阵,矩阵可以看做是有多个向量成员的向量组。

    符号的定义

    上面的公式无法表示不同样本的预测输出,而且形式也不够简洁,所以我们需要换个更加规范和统一的表达方式。首先约定一些符号的表示含义:

    符号定义
    一定要仔细看一下上图中符号的细节和含义哦,确保自己再看到这些符号时能够回想起它们的含义,即便一时不理解,再看到它们时也要能够找到这幅图~

    认识了这些符号的含义之后,我们来看一下参数向量w和特征向量xi的表现形式:

    w与x的表现形式
    图中的 w 和 xi 既可以看作列向量也可以看作列矩阵。下面我们来看一下多元线性回归预测函数的几种表达形式:

    标量展开式

    标量展开式
    对于特定的样本输入 xi ,模型的预测输出 f(xi) 等于各输入特征的加权和。i 表示样本标号,一共有 m 个样本。

    标量求和式

    标量求和式
    使用求和符号对标量展开式进行改写,表达的思想是一致的:特征加权求和

    向量内积式

    向量内积式
    公式中间的白点表示两个向量的内积运算。向量内积的运算法则是:两个向量对应维度的数值相乘再求和,同样是对输入特征的加权求和。

    矩阵乘法式

    矩阵乘法式
    图中的矩阵乘法也是将 w 和 xi 对应位置的元素相乘再求和,但矩阵乘法必须满足第一个矩阵的列数等于第二个矩阵的行数,所以 w 要先转置为行矩阵,再和 xi 相乘,或者让 xi 转置后乘以 w ,简记为: 一行乘一列

    关于矩阵乘法的规律可以概括为:m行k列的矩阵 A 乘以k行n列的矩阵 B,得到的结果是m行乘n列的矩阵 C,用符号表示如下:

    矩阵乘法
    上面的预测函数是对一条样本进行预测输出,实际上,通过矩阵乘法可以对整个训练集的数据进行预测输出。首先我们需要把训练集和模型参数都表示成矩阵的形式,如下:

    xyw的表达式
    然后我们就可以写出如下的线性回归预测函数:
    线性回归预测函数
    矩阵乘法的过程:x 的第 1 行乘以 w 的第 1 列得到 f(x1) ,x 的第 2 行乘以 w 的第 1 列得到 f(x2),…,x 的第 m 行乘以 w 的第 1 列得到 f(xm),就这样一行乘一列得到一个样本输出,m 个样本的预测输出组成一个列向量(列矩阵)。

    问:根据上面所学的内容,请你判断下图中的样本数和特征维数分别是多少?
    问题
    A. m 个样本,n 个特征
    B. n 个样本,m个特征
    C. m个样本,n+1个特征
    D. n个样本,m+1个特征
    答案:A 一般来说,训练集的样本标记数和样本数是一致的,列向量 y 有 m 个元素,故有 m 个样本;特征矩阵 x 有 m 行,则每一行都是样本的一个特征向量,特征的维数为 n 。选项中的 n+1 是模型参数的数量。

    上面我们推导出了多元线性回归的几种表达式,但实际上这个模型还是未知的,因为模型的参数 w 还没有确定。如何确定模型参数呢?

    这个问题其实在之前的教程就提到了,我们需要通过最小化经验风险函数来学习模型参数。具体来说就是先随机初始化模型参数 w ,然后根据模型表达式得到所有训练数据的预测输出,将预测值和真实值进行对比,以减小误差为目标来更新模型参数 w 。

    这里的误差实际上就是刚才所说的经验风险。经验二字可以理解为训练数据代表着过去的经验,风险是说使用随机初始化参数的模型在训练数据上的预测效果一般不会很好,会有一定的风险,且经验风险是模型预测值 f(x) 和样本标记值 y 的函数,随着模型参数的更新,模型预测值和经验风险都会产生相应的变化。

    注意上面所说的模型预测值 f(x) 和 样本标记值 y 都是列向量或列矩阵,在下面讲经验风险推导的时候你可以看到它的具体表现形式!在介绍经验风险之前,我们需要先了解一下损失函数(loss function)的概念。

    损失函数

    损失函数是关于模型预测值 f(xi) 和样本标记值 yi 的函数,记作: L(f(xi),yi),L是 Loss 的缩写。它用来度量模型在单个样本上预测效果的好坏。

    常见的损失函数有:0-1损失函数绝对损失函数平方损失函数对数损失函数。最后一个对数损失函数我们留在下一节的逻辑回归里讲,今天我们只看前三个损失函数的表达式。

    0-1损失

    0-1损失
    样本预测值 f(xi) 等于样本标记值 yi,则模型在该样本上的预测损失为 0,否则为 1 。

    绝对损失

    绝对损失
    将样本预测值 f(xi) 和样本标记值 yi 差的绝对值作为模型在该样本上的预测损失。

    平方损失

    平方损失
    将样本预测值 f(xi) 和样本标记值 yi 差的平方值作为模型在该样本上的预测损失。

    三个损失函数中,平方损失用的最多,而我们今天所学的线性回归模型使用的损失函数也是平方损失。

    经验风险

    基本公式

    经验风险是模型在训练数据集上的平均损失,用来度量模型在整个训练数据集上预测效果的好坏,其数学表达式为:
    经验风险
    由公式可知,经验风险是将每个样本的损失进行求和,然后再除以样本数。自然地,线性回归的经验风险只需要把它的损失函数代入上述公式就可以啦!下面请看:

    线性回归的经验风险

    经验风险
    是不是和你想的有点不一样呢?我来解释一下,公式右侧的分母多了一个2,这个其实是为了函数求导后形式的简洁而添加的,具体来说就是为了和二次函数求导后出现的常数 2 进行抵消。

    将平方损失直接代入经验风险基本公式得到的是均方误差(mean squared error,简称 MSE),从名字可以知道它的计算方式是:先计算差值,然后平方,最后取均值。所以,线性回归的经验风险是 MSE 的一半。

    公式左侧的 J(w) 表示经验风险是参数向量 w 的函数;J 表示函数的映射关系,其实就是用来表示线性回归经验风险的符号标识。

    其实上面的经验风险(标量求和式)还可以转换成矩阵乘法的形式,你还记得前面预测函数的几种表达式吗?线性回归的预测函数既有标量形式又有矩阵乘法的形式,但它们表达的逻辑是一样的,如下:

    标量求和式
    可以看到,行矩阵乘列矩阵等价于对应元素乘积的求和式。受此启发,线性回归的经验风险也可以写成行矩阵和列矩阵相乘的形式:
    求和式
    我解释一下相比标量式替换掉的部分: f(x) 和 y 都是列矩阵,你可以在预测函数的矩阵乘法式部分进行回看。f(x) 和 y 作差即两个列矩阵的对应元素作差,结果还是列矩阵;f(x)-y 转置后成为行矩阵,行矩阵乘列矩阵为一个数(标量)。

    你可以看到,我前面的推导不论是预测函数还是经验风险,都是先从标量开始(方便理解),落脚到矩阵形式,目的就是为了下一节课编程计算的方便,因为 numpy 中有一些矩阵运算的方法可以帮助我们进行算法的实现。当然你想自己写一下矩阵运算的实现也可以,但是没必要。

    问:经验风险就是损失函数,对吗?
    A. 对
    B. 错
    答案:B 经验风险用来度量模型在整个训练集上的预测效果好坏,而损失函数用来度量模型在单个训练样本上的预测效果好坏。

    知道了线性回归的经验风险之后,下一步就是要最小化这个经验风险,并将经验风险最小时的模型参数作为学习到的最佳参数。

    这个问题有两种解法,第一种是令经验风险的导数为零,算解析解;第二种是机器学习中求解模型参数更加通用的一种方法:梯度下降法(gradient descent,简称GD)。下面我将重点讲解梯度下降法的理解和推导过程。

    梯度下降

    偏导数与梯度

    偏导数是相对于多变量函数而言的,例如函数 f(w1,w2) 对变量 w1 求偏导时,是把除 w1 以外的变量当做常数,然后计算导数。函数 f(w1,w2) 对 w1 的偏导数记作:

    偏导数
    本博客关于导数的计算主要掌握以下几条:
    导数
    注意上面展示都是求函数关于自变量 w 的导数,一次函数的导数为 w 前面的系数 x,二次函数的导数遵循幂函数求导法则,先降幂,然后乘上原幂指数;复合函数的导数为外层函数的导数与内层函数导数的乘积。

    梯度(gradient)其实是一个向量,一个函数对于其自变量分别求偏导数,这些偏导数所组成的向量就是函数的梯度。

    梯度下降的理解

    梯度下降法是求解模型参数的常用方法,那什么是梯度下降呢?我们刚才已经知道了梯度实际上就是一个向量,向量既有大小也有方向。所谓的梯度下降法实际上是模型参数的更新方法:沿梯度的负方向进行参数更新

    经验风险函数大多是一个凸函数,它的梯度方向是经验风险增大的方向,我们要最小化经验风险就必须朝着负梯度方向更新参数。光说文字有点抽象,下面举一个最简单也是最特殊的例子:

    凸函数

    假如模型的参数只有一个,那么经验风险 J(w) 关于参数 w 的示意图如上,这是一个一元二次函数,也是一个凸函数。关于凸函数的定义,你可以暂时理解为函数曲线上任意两点的连线都位于曲线的上方。

    这个函数的梯度可以看做只有一个元素的向量, 假如模型参数 w 的初始值为 5,则对应的经验风险为0.69,曲线上该点切线的斜率(导数)为正数,即梯度方向为模型参数 w 的正方向。从图中可以明显地观察到,沿 w 轴的正方向经验风险是在增大的!

    假如模型参数 w 的初始值 2,则对应的经验风险是 0.48,曲线上该点切线的斜率为负数,即梯度方向为模型参数 w 的负方向。从图中也可以明显地观察到,沿 w 轴的负方向经验风险在增大!

    所以,参数 w 在初始化之后要沿着梯度的负方向进行更新才能让经验风险越来越小,具体到这个例子中的模型参数更新公式为:

    更新公式
    公式中的 alpha 在机器学习中的术语叫做学习率,是一个人为设定的超参数,代表了参数 w 一次更新的幅度大小;梯度 gradient 在这个例子中即为导数值。

    假设图中(5,0.69)和(2,0.48)处的导数值为分别为 2 和 -3,学习率设置为 0.1,则两种情况下的参数更新如下:

    参数更新
    回顾 J(w) 的图像,经验风险的最小值点是在 w=3 处,上面更新一次后的参数 4.8 和 2.3 都是往 w=3 靠近的。所以,沿着梯度负方向更新参数 w 可以减小经验风险!

    上面是只有一个模型参数的例子,我们把梯度看成了单元素的向量。为了让梯度下降更有说服力,我再举一个含有两个模型参数的经验风险函数:

    三维梯度
    图中的经验风险是一个二元二次函数,也是一个凸函数(任意两点连线位于曲面的上方)。经验风险的梯度是对 w0 和 w1 分别求偏导后组成的向量。你在看这幅图的时候可以沿 w0 的某个值做一个切面,然后观察切面与曲面的交线,交线可以反映出经验风险和和 w1 的变化关系,其实和刚才举的第一个例子是一样的规律。

    我们在进行参数更新时,一般是对参数向量整体进行更新,如下:

    参数
    多元线性回归的经验风险是将 m 个多元二次函数(损失函数)累加后再乘上一个系数,结果还是一个多元二次函数(凸函数),故可以用梯度下降法进行参数更新,下面我们来推导一下多元线性回归的梯度下降公式(参数更新公式)。

    梯度下降的推导

    从上面二元二次函数的梯度下降公式中,我们可以得到如下的结论:

    梯度下降推导
    这个公式用来更新一系列模型参数(共计 n+1 个),其中 w0 是模型预测函数的偏置项。

    从第 3 行到第 4 行:和的导数等于导数的和,故求和符号不用管,保留即可;求和符号里面是一个复合函数,它的导数等于外层函数(二次函数)的导数乘以内层函数 f(xi) 的导数。

    从第 4 行到第 5 行:求解多元一次函数 f(xi) 对 wj 的偏导数代入即可,下面再来回顾一下 f(xi) 的表达式:

    f(x)的表达式
    从第 5 行到第 6 行:标量式转换为矩阵乘法形式。前面已经说过类似的转换,此处不再赘述;最后一行的 xj 是如下形式的列矩阵:

    列矩阵
    上面是对单个模型参数逐一进行更新的方式。接下来我们再推导一下一次更新所有参数的矩阵表达式,这样就可以直接利用 numpy 中的矩阵运算对所有参数进行更新了。

    更新
    上面的公式也是推导过程,其实就是把单个参数的更新公式先写成向量形式,然后再写成矩阵表达式。如果你对里面的符号还不理解,可以回看一下前面的内容哦。这节课公式推导和数学概念有些多,建议多看个几次,以便加深理解!

    问:沿着梯度方向更新模型参数向量,经验风险会变小,对吗?
    A. 对
    B. 错
    答案:B 一般来说,梯度方向是经验风险增大的方向,所以要进行梯度下降,朝着负梯度方向更新模型参数向量,这样经验风险才可能越来越小。

    展开全文
  • 各类算法是机器学习的一个入门要点。本课程详细讲解了线性回归算法的原理,推导过程、相关扩展方法和代码实战,并为数学基础不牢的入门人群复习所需要的数学知识,辅以多个代码实战,帮助您深入理解线性回归算法
  • python线性回归算法

    2019-04-25 21:45:16
    使用python实现的线性回归算法,拟合一条直线并通过直线预测值。
  • 简单线性回归算法的衡量指标探索分类中使用分类准确度衡量分类的准确度#简单线性回归该如何衡量预测的结果?可以通过测试集中的真实值与预测值进行比较,如上图,比较误差平方#存在的问题:误差与样本的数量有关?...
    简单线性回归算法的衡量指标探索

    分类中使用分类准确度衡量分类的准确度

    #简单线性回归该如何衡量预测的结果?


    可以通过测试集中的真实值与预测值进行比较,如上图,比较误差平方

    #存在的问题:误差与样本的数量有关?

    改进:除以m,使得结果与m无关


    #存在问题2:结果为衡量指标值的平方,值较大时平方翻倍了影响较大,与量纲有关?

    改进:开方后量纲一致

    #另一个评测标准:

    平均绝对误差


    代码实现





    RMSE与MAE的比较


    量纲一样,RMSE是将错误平方累加取均值再开跟,当错误值非常大的时候在开方的时候就将错误值放大了而后取得是均值,所以RMSE将错误相对放大了,所以要比MAE要大

    展开全文
  • 线性回归 简单线性回归算法
  • 线性回归算法总结

    2021-03-20 15:39:52
    线性回归算法总结 线性回归算法: 典型的参数学习 对比kNN:非参数学习 只能解决回归问题 虽然很多分类方法中,线性回归是基础(如逻辑回归) 对比kNN:既可以解决分类问题,有可以解决回归问题 对数据有假设...

    线性回归算法总结

    在这里插入图片描述
    线性回归算法:

    • 典型的参数学习
      对比kNN:非参数学习

    • 只能解决回归问题
      虽然很多分类方法中,线性回归是基础(如逻辑回归)
      对比kNN:既可以解决分类问题,有可以解决回归问题

    • 对数据有假设:线性(线性关系越强,得到的结果就越好)
      对比kNN:对数据没有假设

    • 对数据具有强解释性(如波士顿房价和房子房间数,是否临河有关系)
      在这里插入图片描述

    ### 更多关于线性回归模型的讨论
    
    import numpy as np
    from sklearn import datasets
    
    boston = datasets.load_boston()
    
    X = boston.data
    y = boston.target
    
    X = X[y < 50.0]
    y = y[y < 50.0]
    
    from sklearn.linear_model import LinearRegression
    
    lin_reg = LinearRegression()
    lin_reg.fit(X,y)#接下来的操作不需要进预测,所以不需要进行训练数据集和测试数据集的分割
    输出:LinearRegression()
    
    lin_reg.coef_
    输出:array([-1.06715912e-01,  3.53133180e-02, -4.38830943e-02,  4.52209315e-01,
           -1.23981083e+01,  3.75945346e+00, -2.36790549e-02, -1.21096549e+00,
            2.51301879e-01, -1.37774382e-02, -8.38180086e-01,  7.85316354e-03,
           -3.50107918e-01])
    
    np.argsort(lin_reg.coef_)#按照索引从小到大排列
    输出:array([ 4,  7, 10, 12,  0,  2,  6,  9, 11,  1,  8,  3,  5], dtype=int64)
    
    
    boston.feature_names#存放了所有特征的名称
    输出:array(['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD',
           'TAX', 'PTRATIO', 'B', 'LSTAT'], dtype='<U7')
    
    boston.feature_names[np.argsort(lin_reg.coef_)]#得到排序后对应的名称的排序结果
    输出:array(['NOX', 'DIS', 'PTRATIO', 'LSTAT', 'CRIM', 'INDUS', 'AGE', 'TAX',
           'B', 'ZN', 'RAD', 'CHAS', 'RM'], dtype='<U7')
    
    print(boston.DESCR)
    输出对波士顿房价有关数据集的描述
    
    
    
    展开全文
  • 线性回归算法解析

    千次阅读 2018-10-08 20:01:27
    线性回归算法解析概念模型函数损失函数求取损失函数最小化的算法线性回归的推广:多项式回归线性回归的推广:广义线性回归线性回归的正则化 概念 模型函数 损失函数 求取损失函数最小化的算法 线性...
  • 逻辑回归与线性回归算法梳理

    千次阅读 2019-03-31 16:19:11
    逻辑回归算法梳理逻辑回归与线性回归算法1线性回归2 逻辑回归2.1 逻辑回归原理2.2 逻辑回归损失函数2.3 简化后的逻辑回归损失函数3 联系与区别3.1 联系3.2 区别4 正则化与模型评估指标4.1 正则化作用4.2 线性回归...
  • 主要介绍了Python实现的简单线性回归算法,结合实例形式分析了线性回归算法相关原理、功能、用法与操作注意事项,需要的朋友可以参考下
  • 简单线性回归一、什么是线性回归二、线性回归的分类三、一元线性回归的数学知识四、封装一个自己的一元线性回归五、使用自己的一元线性回归预测波士顿房价六、使用sklearn的一元线性回归预测波士顿房价七、回归算法...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,482
精华内容 4,992
关键字:

线性回归算法