线性回归
前言
我们需要了解分类算法解决的目标值是离散的问题;而回归算法解决的是目标值连续的问题
什么是线性回归?
定义:线性回归通过一个或者多个自变量与因变量之间之间进行建模的回归分析。其中特点为一个或多个称为回归系数的模型参数的线性组合。
一元线性回归:涉及到的变量只有一个
多元线性回归:涉及到的变量两个或两个以上
注:线性回归需要进行标准化,避免单个权重过大,影响最终结果
举例
单个特征:
- 试图去寻找一个k,b值满足:
- 房子价格 = 房子面积*k+b(b为偏置,为了对于单个特征的情况更多通用)
多个特征:(房子面积、房子位置,…)
- 试图去寻找一个k1,k2,…,b值满足:
- 房子价格 = 房子面积*k1 + 房子位置 *k2 +…+b
线性关系模型
试图找到一种属性和权重的组合来进行预测结果:
但是预测值总是会存在误差,所以需要利用损失函数计算误差
损失函数(最小二乘法)
如何去求模型当中的W(权重),使得损失最小? (目的是找到最小损失对应的W值)
优化
最小二乘法之正规方程(不太推荐)
缺点:
- 当特征过于复杂,求解速度太慢
- 对于复杂的算法,不能使用正规方程求解(逻辑回归等)
损失函数直观图(单变量举例),如下:
最小二乘法之梯度下降(❤️ ❤️ ❤️ )
理解:沿着这个函数下降的方向找,最后就能找到函数的最低点,然后更新W值。(不断迭代的过程)
知识储备
sklearn线性回归正规方程API
- sklearn.linear_model.LinearRegression()
coef_:回归系数
sklearn线性回归梯度下降API
- sklearn.linear_model.SGDRegressor()
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
def mylinear():
'''
线性回归预测房价
:return: None
'''
# 加载数据
lb = load_boston()
# 分割数据集到训练集和测试集
x_train, x_test, y_train, y_test = train_test_split(lb.data, lb.target, test_size=0.25)
print(y_train,y_test)
# 进行标准化处理
# 特征值和目标值都需要进行标准化处理
# 扫描器要求的是二维数据类型,需要利用reshape
std_x