Press "Enter" to skip to content

09 线性回归及矩阵运算

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

09 线性回归及矩阵运算

 

 

 

定义:通过一个或者多个自变量与因变量之间进行建模的回归分析。其中可以为一个或者多个自变量之间的线性组合。

 

一元线性回归:涉及到的变量只有一个

多元线性回归:变量两个或以上

 

通用公式:h(w) = w0 + w1x1 + w2x2 + ….= wTx

其中w,x 为矩阵:wT=(w0, w1, w2) x=(1,x1, x2)T

 

 

回归的应用场景 (连续型数据)

 

 

    1. 房价预测

 

    1. 销售额预测 (广告,研发成本,规模等因素)

 

    1. 贷款额度

 

 

线性关系模型

 

 

    1. 定义: 通过属性 (特征) 的线性组合来进行预测的函数:

 

    1. f(x) = w1x1 + w2x2 + w3x3 + …… + wdxd + b

 

    1. w : weight (权重) b: bias (偏置项)

 

    1. 多个特征: (w1:房子的面积, w2:房子的位置 ..)

 

 

损失函数(误差)

 

 

    1. 《统计学习方法》 – 算法 ,策略, 优化

 

线性回归, 最小二乘法,正规方程 & 梯度下降

 

    1. 损失函数(误差大小)

 

yi 为第i个训练样本的真实值
hw(xi)为第i个训练样本特征值组合预测函数 (预测值)

 

    1. 寻找最优化的w

 

      1. 最小二乘法之 正规方程 (直接求解到最小值,特征复杂时可能没办法求解)

 

      1. 求解:w= (xTx)-1 xTy

 

      1. X 为特征值矩阵,y为目标值矩阵

 

      1. 缺点: 特征过于复杂时,求解速度慢

最小二乘法之 梯度下降

使用场景:面对训练数据规模庞大的任务
超参数:a

 

 

线性回归算法案例

 

API

 

 

    1. sklearn.linear_model.LinealRegression()

 

普通最小二乘法线性回归
coef_: 回归系数 (w值)

 

    1. sklearn.linear_model.SGDRegressir()

 

通过使用SGD最小化线性模型
coef_: 回归系数
不能手动指定学习率

波士顿房价预测

 

from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression, SGDRegressor
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error
def mylinear():
    """
    线性回归预测房价
    :return: None
    """
    # 1. 获取数据
    lb = load_boston()
    # 2. 分割数据集到训练集和测试集
    x_train, x_test, y_train, y_test = train_test_split(lb.data, lb.target, test_size=0.25)
    print(y_train, y_test)
    # 3. 进行标准化处理(特征值和目标值都必须标准化处理)
    # 实例化两个标准化API,特征值和目标值要用各自fit
    # 
    std_x = StandardScaler()
    x_train = std_x.fit_transform(x_train)
    x_test = std_x.transform(x_test)
    std_y = StandardScaler()
    y_train = std_y.fit_transform(y_train)
    y_test = std_y.transform(y_test)
    # 4. estimator预测
    # 4.1 正规方程求解预测结果
    lr = LinearRegression()
    lr.fit(x_train, y_train)
    print(lr.coef_)
    y_lr_predict = std_y.inverse_transform(lr.predict(x_test))
    print('正规方程测试集里面每个房子的预测价格:', y_lr_predict)
    print('正规方程的均方误差:',mean_squared_error(std_y.inverse_transform(y_test),y_lr_predict))
    # 4.1 梯度下降进行梯度预测
    sgd = SGDRegressor()
    lr.fit(x_train, y_train)
    print(sgd.coef_)
    y_sgd_predict = std_y.inverse_transform(sgd.predict(x_test))
    print('梯度下降测试集里面每个房子的预测价格:', y_sgd_predict)
    print('梯度下降的均方误差:', mean_squared_error(std_y.inverse_transform(y_test), y_sgd_predict))
    return None

if __name__ == '__main__':
    mylinear()

 

回归性能评估

 

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

mean_squared_error(y_true, y_pred)
真实值和预测值为标准化话之前的值

两种预测方式的选择

 

 

样本量选择

样本量大于100K –> SGD 梯度下降

样本量小于100K –> 其他

 

梯度下降 正规方程
需要选择学习率 不需要
需要多次迭代 一次运算得出
当特征数量大时也能较好使用 需要计算(xTx)-1,运算量大
适用于各种类型的模型 只适用于线性模型

 

 

特点:线性回归器是最为简单、易用的回归模型,在不知道特征之间关系的情况下,

可以使用线性回归器作为大多数系统的首要选择。 LinearRegression 不能解决拟合问题。

 

Be First to Comment

发表评论

邮箱地址不会被公开。 必填项已用*标注