回归与聚类算法————线性回归

目录

1,线性回归

2,线性模型

3、线性回归的损失和优化原理

3.1 损失函数

3.2 优化算法

正规方程 

梯度下降Gradient Descent

3.3 回归性能评估

4,波士顿房价预测案例

5,两种优化算法的对比

6,其他优化方法

6.1 梯度下降(Gradient Descent)  GD

6.2 随机梯度下降(Stochastic gradient descent)  SGD

6.3 随机平均梯度法(Stochasitc Average Gradient)  SAG


1,线性回归

线性回归(Linear regression)是利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式。

  • 特点:只有一个自变量的情况称为单变量回归大于一个自变量情况的叫做多元回归

2,线性模型

自变量或者参数为一次时称为线性模型

回归与聚类算法————线性回归_第1张图片

 也可以使用矩阵表示回归与聚类算法————线性回归_第2张图片

分类:

  • 线性关系
  • 非线性关系

3、线性回归的损失和优化原理

3.1 损失函数

真实值与预测值之间存在着误差,被称为损失函数

  • yi为第i个训练样本的真实值
  • h(xi)为第i个训练样本特征值组合预测函数
  • 又称最小二乘法

3.2 优化算法

求取模型当中的w,使得损失最小 (目的是找到最小损失对应的W值)

正规方程 

X为特征值矩阵,y为目标值矩阵,直接一次求得最好的结果

缺点:但当特征过多过复杂时,求解速度太慢且得不得结果 

API:

from sklearn.linear_model import LinearRegression
  • LinearRegression(fit_intercept=True)
    • fit_intercept:是否计算偏置(使模型非必须过原点)
    • LinearRegression.coef_:回归系数--权重
    • LinearRegression.intercept_:偏置

梯度下降Gradient Descent

回归与聚类算法————线性回归_第3张图片

α为学习速率,需要手动指定(超参数),α旁边的整体表示方向。通过不断的递归,迭代更新w值,找到最小值

适用于数据规模十分庞大的任务

API:

from sklearn.linear_model import SGDRegressor
  • SGDRegressor(loss="squared_loss", fit_intercept=True, learning_rate ='invscaling', eta0=0.01)
    • SGDRegressor类实现了随机梯度下降学习,它支持不同的损失函数和正则化惩罚项来拟合线性回归模型。
    • loss:损失类型
      • loss=”squared_loss”: 普通最小二乘法
    • fit_intercept:是否计算偏置
    • learning_rate : string, 学习率填充
      • 'optimal': eta = 1.0 / (alpha * (t + t0)) [default]
      • 'invscaling': eta = eta0 / pow(t, power_t)
        • power_t=0.25:存在父类当中
      • 'constant': eta = eta0
      • 对于一个常数值的学习率来说,可以使用learning_rate=’constant’ ,并使用eta0来指定学习率。
    • SGDRegressor.coef_:回归系数
    • SGDRegressor.intercept_:偏置

3.3 回归性能评估

均方误差(Mean Squared Error)MSE 评估机制:

回归与聚类算法————线性回归_第4张图片

 API:

from sklearn.metrics import mean_squared_error
  • mean_squared_error(y_true, y_pred)     均方误差回归损失
    • y_true:真实值
    • y_pred:预测值
    • return:浮点数结果

4,波士顿房价预测案例

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.linear_model import SGDRegressor
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import SGDRegressor
from sklearn.metrics import mean_squared_error

def linear1():
    """
    利用正规方程的优化算法预测
    :return:
    """

    #1.获取数据
    boston=load_boston()

    #2.划分数据集
    x_train,x_test,y_train,y_test=train_test_split(boston.data,boston.target,random_state=22)

    #3.标准化
    transfer=StandardScaler()
    x_train=transfer.fit_transform(x_train)
    x_test=transfer.transform(x_test)

    #4.预估器
    estimator=LinearRegression()
    estimator.fit(x_train,y_train)

    #5.得出模型
    print("正规方程的权重系数为:\n",estimator.coef_)
    print("正规方程的偏置为:\n",estimator.intercept_)

    #6.模型评估
    y_predict=estimator.predict(x_test)
    print("正规方程的预测房价为:\n",y_predict)
    error =mean_squared_error(y_predict,y_test)
    print("正规方程的均方误差为:\n",error)


    return  None
def linear2():
    """
    利用梯度下降的优化算法预测
    :return: 
    """
    # 1.获取数据
    boston = load_boston()

    # 2.划分数据集
    x_train, x_test, y_train, y_test = train_test_split(boston.data, boston.target, random_state=22)

    # 3.标准化
    transfer = StandardScaler()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)

    # 4.预估器
    estimator = SGDRegressor()
    estimator.fit(x_train, y_train)

    # 5.得出模型
    print("梯度下降的权重系数为:\n", estimator.coef_)
    print("梯度下降的偏置为:\n", estimator.intercept_)

    # 6.模型评估
    y_predict = estimator.predict(x_test)
    print("梯度下降的预测房价为:\n", y_predict)
    error = mean_squared_error(y_predict, y_test)
    print("梯度下降的均方误差为:\n", error)
    return None

linear1()
linear2()

5,两种优化算法的对比

回归与聚类算法————线性回归_第5张图片

 

算法选择:

  • 小规模数据:
    • LinearRegression(不能解决拟合问题)   很少使用
    • 岭回归
  • 大规模数据:SGDRegresso

6,其他优化方法

6.1 梯度下降(Gradient Descent)  GD

 原始的梯度下降法需要计算所有样本的值才能够得出梯度,更新一次权重和偏置,计算量大。

6.2 随机梯度下降(Stochastic gradient descent)  SGD

是一个优化方法。它在一次迭代时只考虑一个训练样本。

  • SGD的优点是:
    • 高效
    • 容易实现
  • SGD的缺点是:
    • SGD需要许多超参数:比如正则项参数、迭代数。
    • SGD对于特征标准化是敏感的。

6.3 随机平均梯度法(Stochasitc Average Gradient)  SAG

 由于收敛的速度太慢,有人提出SAG等基于梯度下降的算法。在内存中为每个样本都维护一个旧的梯度,随机选择一个样本来更新,并更新参数

你可能感兴趣的:(机器学习,python)