一个通过属性的线性组合来进行预测的函数:
f(x) = w1x1 + w2x2 + ... + wdxd + b
w为权重,b成为偏置项,可以理解为:w0*1
定义:线性回归通过一个或者多个自变量(特征)与因变量(目标值)之间进行建模的回归分析。其中可
以为一个或多个自变量之间的线性组合(线性回归的一种)
一元线性回归:涉及到的变量只有一个
多远线性回归:涉及到的变量两个或两个以上
# T为转置 #
矩阵乘法 (二维 乘法)
(m行 , n列) * (n行 , l列) = (m行 , l列)
各自一一对应相乘相加的到m行的值,形成l列
预测结果和真实值有一定的误差。
如何去求解模型当中的w,使得损失最小? (目的是找到最小损失对应的w值)
## -1是倒数的意思,矩阵 * 逆矩阵= 同阶的单位矩阵(对角线为1,其余为0) ##
正规方程和梯度下降(图示,无动态图):
## 一图为不断上下训练缩小损失值,找到最合适的线 二图梯度下降,依次梯度下降,直到最小值. ##
sklearn.linear_model.LinearRegression
正规方程
普通最小二乘线性回归
coef_:回归系数
sklearn.linear_model.SGDRegressor
梯度下降
coef_:回归系数
回归性能评估:
sklearn.metrics.mean_squared_error(y_true,y_pred) 均方误差回归损失 y_true:真实值 y_pred:预测值 return:浮点数结果 注:真实值,预测值为标准化之前的值
案例流程: 1. 获取波士顿地区的房价数据 2. 数据集划分(获取的数据为处理好的,直接使用) 3. 训练与测试集的数据标准化处理 4. 使用最简单的线性回归模型和梯度下降对房价进行预测
from sklearn.linear_model import LinearRegression,SGDRegressor,Ridge #最小二乘法:正规方程和梯度下降, from sklearn.model_selection import train_test_split #数据集划分 from sklearn.datasets import load_boston #波士顿房价数据 from sklearn.preprocessing import StandardScaler #标准化处理 from sklearn.metrics import mean_squared_error # 均方误差评价机制 # 线性回归预测房价 # 1.获取数据 lb =load_boston() # 2.分割数据集 x_train ,x_test ,y_train , y_test =train_test_split(lb.data,lb.target,test_size=0.25) # 3.标准化处理,统一标准化, 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.reshape((-1,1))) #不知道有多少行,填-1,有多少是多少 y_test=std_y.transform(y_test.reshape((-1,1))) # 正规方程预测 lr=LinearRegression() lr.fit(x_train,y_train) print(‘正规方程求解系数:‘,lr.coef_,‘\n‘) y_lr_predict =lr.predict(x_test) #标准化之后的值 y_lr_predict=std_y.inverse_transform(y_lr_predict) # 转换为原始的数据 print(‘正规方程房价预测结构:‘,y_lr_predict) print(‘正规方程的均方误差:‘,mean_squared_error(std_y.inverse_transform(y_test),y_lr_predict))
正规方程??,梯度下降??:
# 梯度下降 sgd=SGDRegressor() sgd.fit(x_train,y_train.reshape(-1,)) # 梯度下降的目标值,需要为一维的 # 回归系数 print(‘梯度下降求解系数:‘,sgd.coef_,‘\n‘) y_sgd_predict =sgd.predict(x_test) #标准化之后的值 y_sgd_predict=std_y.inverse_transform(y_sgd_predict) # 反标准化,还原 print(‘梯度下降房价预测结构:‘,y_sgd_predict) print(‘梯度下降的均方误差:‘,mean_squared_error(std_y.inverse_transform(y_test),y_sgd_predict))
正规方程和梯度下降输出:
线性回归是最简单,易用的回归模型。从某种程度上限制了使用,尽管如此,在不知道特征之间关系的
前提下,我们仍然使用线性回归作为大多数系统的首要选择。
原文:https://www.cnblogs.com/luowei93/p/11964737.html