线性回归----学习笔记整理
线性回归应用LinearRegression或SGDRegressor实现回归预测知道回归算法的评估标准及其公式知道过拟合与欠拟合的原因以及解决方法知道岭回归的原理及与线性回归的不同之处应用Ridge实现回归预测应用joblib实现模型的保存于加载1、掌握线性回归的定义利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式。线性回归的分类:线性关系非线性关
线性回归
应用LinearRegression或SGDRegressor实现回归预测
知道回归算法的评估标准及其公式
知道过拟合与欠拟合的原因以及解决方法
知道岭回归的原理及与线性回归的不同之处
应用Ridge实现回归预测
应用joblib实现模型的保存于加载
1、掌握线性回归的定义
利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式。
线性回归的分类:线性关系 非线性关系
2、线性回归API
sklearn.linear_model.LinearRegression()
LinearRegression.coef_:回归系数
LinearRegression.intercept_:回归系数
from sklearn.linear_model import LinearRegression
#1、获取数据
x=[[80,86],
[82,80],
[85,78],
[90,90],
[86,82],
[82,90],
[78,80],
[92,94]
]
y=[84.2,80.6,80.1,90,83.2,87.6,79.4,93.4]
#模型训练
#实例化一个估计器
estimate=LinearRegression()
#使用fit方法进行训练
estimate.fit(x,y)
print("",estimate.coef_)
print("",estimate.predict([[100,80]]))
3、函数求导
常见函数的导数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qbwlE8iG-1647483250899)(C:\Users\ldw\AppData\Roaming\Typora\typora-user-images\image-20211015171327188.png)]
导数的四则运算
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0NFWi3v0-1647483250900)(C:\Users\ldw\AppData\Roaming\Typora\typora-user-images\image-20211015171409426.png)]
矩阵向量求导
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4I9cWlLk-1647483250900)(C:\Users\ldw\AppData\Roaming\Typora\typora-user-images\image-20211015171820114.png)]
4、线性回归的损失和优化
1、损失函数
J ( W ) = ( h ( x 1 ) − y 1 ) 2 + ( h ( x 2 ) − y 2 ) 2 + . . . + ( h ( x m ) − y m ) 2 = ∑ i = 1 m ( h ( x i ) − y i ) 2 J(W)=(h(x_1)-y_1)2+(h(x_2)-y_2)2+...+(h(x_m)-y_m)2=\sum_{i=1}^m(h(x_i)-y_i)2 J(W)=(h(x1)−y1)2+(h(x2)−y2)2+...+(h(xm)−ym)2=i=1∑m(h(xi)−yi)2
h ( x i ) 为 第 i 个 训 练 样 本 特 征 值 组 合 预 测 函 数 h(x_i)为第i个训练样本特征值组合预测函数 h(xi)为第i个训练样本特征值组合预测函数
y i 为 第 i 个 训 练 样 本 的 预 测 值 y_i为第i个训练样本的预测值 yi为第i个训练样本的预测值
又称最小二乘法
2、优化算法
正规方程和梯度下降
1、正规方程
w = ( X T X ) − 1 X T Y w=(X^TX)^{-1}X^TY w=(XTX)−1XTY
优点: x为特征值矩阵,y为目标值矩阵,直到求导最好的结果. 缺点:当特征过多过复杂时,求解速度太慢并且得不到结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZPaWB8Bp-1647483250901)(C:\Users\ldw\AppData\Roaming\Typora\typora-user-images\image-20211018101320531.png)]
推导公式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gxP4Oo1v-1647483250902)(C:\Users\ldw\AppData\Roaming\Typora\typora-user-images\image-20211018102150815.png)]
2、梯度下降算法
在单变量函数中,梯度就是函数的微分,代表函数在某个定点的切线的斜率
在多变量函数中,梯度就是一个向量,向量有方向,梯度的方向就指出了函数在给定点的上升最快的方向
梯度下降算法公式
θ
i
+
1
=
θ
i
−
α
δ
/
ϕ
θ
i
j
(
θ
)
\theta_{i+1}=\theta_i-\alpha\delta/\phi\theta_ij(\theta)
θi+1=θi−αδ/ϕθij(θ)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zWcLgq1D-1647483250903)(C:\Users\ldw\AppData\Roaming\Typora\typora-user-images\image-20211020135148145.png)]
5、线性回归随机梯度下降学习API
sklearn.linear_model.SGDRegression(loss=“squared_loss”,fit_intercept=True,learning_rate=“invscaling”,eta=0.01)
SGDRegression类实现了随机梯度下降学习,它支持不同的loss函数和正则化惩罚项来拟合线性回归模型
loss 损失类型 loss="squared_loss"普通最小二乘法
fit_intercept:是否计算偏重
learning_rate:学习率填充
“invscaling”:eta=eta0/pow(t,pow_t) pow_t=0.25:存在父类当中
对于一个常数值的学习率来说,可以使用learning_rate=“constant”,并使用eta0来指定学习率。
6、波士顿房价预测
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9jvsqmW3-1647483250903)(C:\Users\ldw\AppData\Roaming\Typora\typora-user-images\image-20211020141150892.png)]
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression, SGDRegressor
from sklearn.metrics import mean_squared_error
def linear1():
# 正规方程对波士顿房价进行预测
# 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)预估器流程 fit() --> 模型 coef_ intercept_
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_test, y_predict)
print("梯度下降-均方误差为:\n", error)
return None
def linear2():
# 梯度下降对波士顿房价进行预测
# 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)预估器流程 fit() --> 模型 coef_ intercept_
estimator = SGDRegressor(learning_rate="constant", eta0=0.01, max_iter=10000, penalty="l1")
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_test, y_predict)
print("梯度下降-均方误差为:\n", error)
return None
if __name__ == "__main__":
# linear1()
linear2()
7、欠拟合和过拟合
欠拟合:学习到数据的特征过少,在训练集表现不好,测试集也表现不好
解决方案:1、增加数据的特征数量 2、添加多项式特征
过拟合:原始特征过多,存在一些嘈杂特征, 模型过于复杂是因为模型尝试去兼顾各个测试数据点
在训练集表现好,测试集也表现不好
解决方案:1、重新清洗数据集 2、增大数据的训练集 3、正则化 4、减少特征维度
L1正则化
直接把高次项前面的系数变成0
LASSO
L2 正则化更常用
把高次项前面的系数变得特别小
Ridge - 岭回归:带L2正则化的线性回归
8、正则化线性函数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jakuWGzo-1647483250904)(C:\Users\ldw\AppData\Roaming\Typora\typora-user-images\image-20211020144237757.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4u8f2Pbg-1647483250904)(C:\Users\ldw\AppData\Roaming\Typora\typora-user-images\image-20211020144257315.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7EPPkqEO-1647483250905)(C:\Users\ldw\AppData\Roaming\Typora\typora-user-images\image-20211020144428250.png)]
岭回归:就是把系数添加平方项,然后限制系数值的大小。α值越小,系数值越大。α值越大,系数值越小。
Lasso回归:对系数值进行绝对值处理。由于绝对值在顶点处不可导,所以进行计算的过程中产生很多0,最后得到的结果是:稀疏矩阵
Elastic Net 弹性网络:是前两个内容的综合,设置一个γ,如果γ=0,则岭回归。如果γ=1 则Lasso回归。
9、岭回归API
sklearn.linear_model.Range(alpha=1.0,fit_intercept=True,solve=“auto”,normalize=False)
具有L2正则化的线性回归
alpha正则化力度,也叫λ λ取值0-1 1-10
solve:根据数据自动选择优化方法 sag如果数据集、特征都比较大,选择该随机梯度下降优化
normalize:数据是否进行标准化,若为true,则standardscaler标准化数据
Range.intercept_:回归偏重
Range.coef_:回归权重
sklearn.linear_model.RangeCV(_BaseRidgeCV,RegressorMixin)
具有l2正则化的线性回归,可进行交叉验证
coef_:回归系数
正则化力度越大,权重系数越小
正则化力度越小,权重系数越大
def linear3():
# 岭回归对波士顿房价进行预测
# 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)预估器流程 fit() --> 模型 coef_ intercept_
#estimator = Ridge(alpha=0.5, max_iter=10000)
estimator = RidgeCV(alphas=(0.001,0.01,0.1,1.10,100))
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_test, y_predict)
print("岭回归-均方误差为:\n", error)
return None
10、模型的保存和加载
保存模型
from sklearn.externals import joblib
joblib.dump(estimator,“my_ridge.pkl”)
#加载模型
estimator = joblib.load(“my_ridge.pkl”)
更多推荐
所有评论(0)