线性回归
定义: 通过一个或者多个自变量与因变量之间进行建模的回归分析. 其中可以为一个或者多个自变量之间的线性组合.
一元线性回归: 涉及到的变量只有一个
多元线性回归: 变量两个或以上
通用公式: h(w) = w0 + w1x1 + w2x2 + ....= wTx
其中 w,x 为矩阵: wT=(w0, w1, w2) x=(1,x1, x2)T
回归的应用场景 (连续型数据)
房价预测
销售额预测 (广告, 研发成本, 规模等因素)
贷款额度
线性关系模型
定义: 通过属性 (特征) 的线性组合来进行预测的函数:
- f(x) = w1x1 + w2x2 + w3x3 + ...... + wdxd + b
- w : weight (权重) b: bias (偏置项)
多个特征: (w1: 房子的面积, w2: 房子的位置 ..)
损失函数 (误差)
《统计学习方法》 - 算法 , 策略, 优化
线性回归, 最小二乘法, 正规方程 & 梯度下降
损失函数 (误差大小)
yi 为第 i 个训练样本的真实值
hw(xi) 为第 i 个训练样本特征值组合预测函数 (预测值)
寻找最优化的 w
最小二乘法之正规方程 (直接求解到最小值, 特征复杂时可能没办法求解)
求解: w= (xTx)-1 xTy
X 为特征值矩阵, y 为目标值矩阵
缺点: 特征过于复杂时, 求解速度慢
最小二乘法之梯度下降
使用场景: 面对训练数据规模庞大的任务
超参数: a
线性回归算法案例
- API
- sklearn.linear_model.LinealRegression()
普通最小二乘法线性回归
coef_: 回归系数 (w 值)
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 不能解决拟合问题.
来源: https://www.cnblogs.com/hp-lake/p/11965368.html