赞
踩
利用回归方程(函数),对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式
一个自变量叫单变量回归,多个自变量叫多元回归
线性回归主要有两种模型,一种是线性关系,另一种是非线性关系,出现一次幂是线性关系,出现高次幂是非线性关系
from sklearn.linear_model import LinearRegression
x=[[80,86],[82,80],[85,78],[90,90],[86,82],[82,90],[78,90],[92,94]]
y=[84.2,80.6,80.1,90,83.2,87.6,79.4,93.4]
estimator=LinearRegression()
estimator.fit(x,y)
print('线性回归的系数是:\n',estimator.coef_)
print('输出预测结果:\n',estimator.predict([[100,80]]))
线性回归的系数是:
[0.3 0.7]
输出预测结果:
[86.]
最小二乘法
也就是用矩阵的形式来求参数w
推导过程
基本思想可以类比一个下山的过程
梯度的概念
在单变量函数中,梯度其实就是函数的微分,代表着函数在某个给定点的切线的斜率
在多变量函数中,梯度是一个向量,向量有方向,梯度的方向就指出了函数在给定点的上升最快的方向
常见梯度下降算法
全梯度下降算法(FGD)
在更新参数时使用所有的样本来进行更新
随机梯度下降(SGD)
每次只代入计算一个样本目标函数的梯度来更新权重,再取下一个样本重复此过程
小批量梯度下降算法(mini-batch GD)
每次从训练样本集上随机抽取一个小样本集,在抽出来的小样本集上采用FG迭代更新权重
随机平均梯度下降算法(SAGD)
随机选择第i个样本来更新此样本的梯度,其他样本的梯度保持不变,然后求得所有梯度的平均值,进而更新参数
小规模数据:正规方程(不能解决拟合问题),岭回归
大规模数据:梯度下降法
y=kx+b中,k为系数,b为偏置
回归性能评估
MSE均方误差
sklearn.matrics.mean_squared_error(y_true,y_pred)
正规方程
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 from sklearn.metrics import mean_squared_error def linear_model1(): ''' 线性回归:正规方程 ''' #1获取数据 boston=load_boston() #2数据基本处理 #2.1分割数据 x_train,x_test,y_train,y_test=train_test_split(boston.data,boston.target,test_size=0.2) #3特征工程-标准化 transfer=StandardScaler() x_train=transfer.fit_transform(x_train) x_test=transfer.fit_transform(x_test) #4机器学习-线性回归 estimator=LinearRegression() estimator.fit(x_train,y_train) print('这个模型的偏置是:\n',estimator.intercept_) print('这个模型的系数是:\n',estimator.coef_) #5模型评估 #5.1预测值 y_pre=estimator.predict(x_test) print('预测值是:\n',y_pre) #5.2均方误差 ret=mean_squared_error(y_test,y_pre) print('均方误差:\n',ret) linear_model1()
梯度下降
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 linear_model2(): ''' 线性回归:梯度下降法 ''' #1获取数据 boston=load_boston() #2数据基本处理 #2.1分割数据 x_train,x_test,y_train,y_test=train_test_split(boston.data,boston.target,test_size=0.2) #3特征工程-标准化 transfer=StandardScaler() x_train=transfer.fit_transform(x_train) x_test=transfer.fit_transform(x_test) #4机器学习-线性回归 estimator=SGDRegressor(max_iter=1000) #最大迭代次数设置为1000,就不会报错了 estimator.fit(x_train,y_train) print('这个模型的偏置是:\n',estimator.intercept_) print('这个模型的系数是:\n',estimator.coef_) #5模型评估 #5.1预测值 y_pre=estimator.predict(x_test) print('预测值是:\n',y_pre) #5.2均方误差 ret=mean_squared_error(y_test,y_pre) print('均方误差:\n',ret) linear_model2()
sklearn.linear_model.Ridge(alpha=1.0,solver='auto',normalize=False)
具有L2正则化的线性回归,alpha是正则化力度,solver会根据数据自动选择优化方法,normalize是数据是否进行标准化
L1正则化:将高次方项的系数变成0
L2正则化:将高次方项的系数变成特别小的数
岭回归(Ridge Regression)
属于L2正则化,使用的是随机平均梯度下降(SAGD)
在原本损失函数中添加正则项
Lasso回归(Lasso Regression)
属于L1正则化
弹性网络(Elastic Net)
在岭回归和Lasso回归中进行了折中,通过混合比r进行控制
常用:岭回归
只有少部分特征是有用的:弹性网络,Lasso回归
岭回归实现了SAG
正则化力度越大,权重系数会越小
正则化力度越小,权重系数会越大
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,RidgeCV,Ridge from sklearn.metrics import mean_squared_error def linear_model3(): ''' 线性回归:岭回归 ''' #1获取数据 boston=load_boston() #2数据基本处理 #2.1分割数据 x_train,x_test,y_train,y_test=train_test_split(boston.data,boston.target,test_size=0.2) #3特征工程-标准化 transfer=StandardScaler() x_train=transfer.fit_transform(x_train) x_test=transfer.fit_transform(x_test) #4机器学习-线性回归 #estimator=Ridge(alpha=1.0) #参数表示正则化力度 estimator=RidgeCV(alphas=(0.001,0.01,0.1,1,10,100)) #交叉验证的方式 estimator.fit(x_train,y_train) print('这个模型的偏置是:\n',estimator.intercept_) print('这个模型的系数是:\n',estimator.coef_) #5模型评估 #5.1预测值 y_pre=estimator.predict(x_test) print('预测值是:\n',y_pre) #5.2均方误差 ret=mean_squared_error(y_test,y_pre) print('均方误差:\n',ret) linear_model3()
老版本方法
训练好进行保存
from sklearn.externals import joblib
保存:joblib.dump(estimator,'test.pkl')
加载:estimator=joblib.load('test.pkl')
注意:文件名随便起,但后缀名一定是.pkl
新版本方法
pip install joblib
import joblib
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。