1、线性回归王秋月中国人民大学信息学院=0+10.01.02.0 x1081.0BudgetBoxOfficex1082.0线性回归0.01.02.0 x1082.01.0BudgetBoxOfficebox officerevenuecoefficient0=0+1moviebudgetcoefficient1x108线性回归0.01.02.01.0BudgetBoxOfficex108x1082.0=0 +10=80 million,1=0.6线性回归0.01.02.01.0BudgetBoxOfficex108x1082.0=0 +10=80 million,1=0.6给定1.6亿的预算,预
2、测票房收益为1.75亿使用线性回归预测0.01.02.01.0BudgetBoxOfficex108x1082.0哪个模型拟合得更好?0.01.02.01.0BudgetBoxOfficex108x1082.0Predicted valueObservedvalue()()计算残差0.01.02.01.0BudgetBoxOfficex108x1082.001+()()计算残差0.01.02.01.0BudgetBoxOfficex108x1082.0均方误差(Mean Squared Error,MSE)0.01.02.01.0BudgetBoxOfficex108x1082.0最小均方误差
3、0.01.02.01.0BudgetBoxOfficex108x1082.0代价函数其他评价指标平均绝对误差(平均绝对误差(Mean Absolute Error,MAE):):1=1()均方根误差(均方根误差(Root Mean Squared Error,RMSE):):1=1()2MAE is the easiest to understand,because its the average error.MSE is more popular than MAE,because MSE punishes larger errors.RMSE is even more popular tha
4、n MSE,because RMSE is interpretable in the y units.残差平方和(SSE):总离差平方和(TSS):决定系数决定系数(R2):):1 其他评价指标导入包含回归方法的类:导入包含回归方法的类:from sklearn.linear_model import LinearRegression创建该类的一个对象:创建该类的一个对象:LR=LinearRegression()训练模型拟合数据,并预测:训练模型拟合数据,并预测:LR=LR.fit(X_train,y_train)y_predict=LR.predict(X_test)线性回归的语法http
5、:/scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html 通过增加多项式特征来捕捉更高阶的数据特征()=0+1+22BudgetBoxOffice增加多项式特征 通过增加多项式特征来捕捉更高阶的数据特征“线性回归”意味着特征间的线性组合()=0+1+22+33BudgetBoxOffice增加多项式特征()=0+1 log()BudgetBoxOffice增加多项式特征 通过增加多项式特征来捕捉更高阶的数据特征“线性回归”意味着特征间的线性组合增加多项式特征 可以选择变量间的交互
6、项:()=0+11+22+312增加多项式特征 可以选择变量间的交互项:如何选择正确的函数形式:()=0+11+22+312检查每个变量与结果之间的关系导入包含转换方法的类:导入包含转换方法的类:from sklearn.preprocessing import PolynomialFeatures创建该类的一个对象:创建该类的一个对象:polyFeat=PolynomialFeatures(degree=2)创建多项式特征,并转换数据:创建多项式特征,并转换数据:polyFeat=polyFeat.fit(X_data)x_poly=polyFeat.transform(X_data)或者或
7、者x_poly=polyFeat.fit_transform(X_data)生成多项式特征的语法http:/scikit-learn.org/stable/modules/generated/sklearn.preprocessing.PolynomialFeatures.htmlerrorcross validation errortraining error21模型复杂度与误差XYModelTrue Function SamplesXYXYPolynomial Degree=1Polynomial Degree=3Polynomial Degree=922防止欠拟合与过拟合如何用一个如何用
8、一个9次多项式拟合数据,并防止过拟合?次多项式拟合数据,并防止过拟合?XYModelTrue Function SamplesXYXYPolynomial Degree=1Polynomial Degree=3Polynomial Degree=923防止欠拟合与过拟合()=12=1()()2XYModelTrue Function SamplesXYXYPoly Degree=9,=0.1Poly Degree=9,=1e-5Poly Degree=9,=0.024正则化(regularization)=12=1()()2+=12惩罚项收缩了所有系数的大小越大的系数被惩罚得越多,因为惩罚的是
9、平方25岭回归(Ridge Regression)(L2)=12=1()()2+=1226岭回归对模型参数的效果 =12=1()()2+=12惩罚项有选择地收缩了某些系数可以被用来做特征选择比岭回归收敛速度慢27套索回归(Lasso Regression)(L1)=12=1()()2+=1|28套索回归对模型参数的效果 =12=1()()2+=1|L1与L2正则化 岭回归和套索回归的综合,用以平衡稀疏和平滑两个问题 需要调节额外的参数,来分配L1和L2正则化惩罚项的比例10ElasticNet正则化 =12=1()()2+1=1|+2=12 正则化系数(1和2)是根据经验决定的使用测试数据调节
10、使用测试数据调节?测试数据训练数据训练数据超参数及其优化 正则化系数(1和2)是根据经验决定的 想让模型泛化-不要使用测试数据集来调节1和2使用测试数据集调节使用测试数据集调节?测试数据训练数据训练数据超参数及其优化NO!用交叉验证来调节用交叉验证来调节 训练数据训练数据验证数据验证数据测试数据测试数据超参数及其优化 正则化系数(1和2)是根据经验决定的 想让模型泛化-不要使用测试数据集来调节1和2 划分出另一个数据集来调节超参数-验证集(validation set)导入包含回归方法的类:导入包含回归方法的类:from sklearn.linear_model import Ridge创建该
11、类的一个对象:创建该类的一个对象:RR=Ridge(alpha=1.0)拟合训练数据,并在测试数据上预测:拟合训练数据,并在测试数据上预测:RR=RR.fit(X_train,y_train)y_predict=RR.predict(X_test)岭回归的语法导入包含回归方法的类:导入包含回归方法的类:from sklearn.linear_model import Ridge创建该类的一个对象:创建该类的一个对象:RR=Ridge(alpha=1.0)拟合训练数据,并在测试数据上预测:拟合训练数据,并在测试数据上预测:RR=RR.fit(X_train,y_train)y_predict=R
12、R.predict(X_test)岭回归的语法正则化参数正则化参数http:/scikit-learn.org/stable/modules/generated/sklearn.linear_model.Ridge.html导入包含回归方法的类:导入包含回归方法的类:from sklearn.linear_model import RidgeCV创建该类的一个对象:创建该类的一个对象:RRcv=RidgeCV(alphas=1e-3,1e-2,1e-1,1,cv=4)拟合训练数据,并在测试数据上预测:拟合训练数据,并在测试数据上预测:RRcv=RRcv.fit(X_train,y_train)
13、y_predict=RRcv.predict(X_test)岭回归的语法RidgeCV 使用交叉验证自动确定使用交叉验证自动确定alpha的值的值http:/scikit-learn.org/stable/modules/generated/sklearn.linear_model.RidgeCV.html导入包含回归方法的类:导入包含回归方法的类:from sklearn.linear_model import Lasso创建该类的一个对象:创建该类的一个对象:LR=Lasso(alpha=1.0)拟合训练数据,并在测试数据上预测:拟合训练数据,并在测试数据上预测:LR=LR.fit(X_t
14、rain,y_train)y_predict=LR.predict(X_test)套索回归的语法正则化参数正则化参数http:/scikit-learn.org/stable/modules/generated/sklearn.linear_model.Lasso.html导入包含回归方法的类:导入包含回归方法的类:from sklearn.linear_model import LassoCV创建该类的一个对象:创建该类的一个对象:LRcv=LassoCV(alphas=1e-3,1e-2,1e-1,1,cv=4)拟合训练数据,并在测试数据上预测:拟合训练数据,并在测试数据上预测:LRcv=
15、LRcv.fit(X_train,y_train)y_predict=LRcv.predict(X_test)套索回归的语法LassoCV 使用交叉验证自动确定使用交叉验证自动确定alpha的值的值http:/scikit-learn.org/stable/modules/generated/sklearn.linear_model.LassoCV.html导入包含回归方法的类:导入包含回归方法的类:from sklearn.linear_model import ElasticNet创建该类的一个对象:创建该类的一个对象:EN=ElasticNet(alpha=1.0,l1_ratio=0.
16、5)拟合训练数据,并在测试数据上预测:拟合训练数据,并在测试数据上预测:EN=EN.fit(X_train,y_train)y_predict=EN.predict(X_test)ElasticNet回归的语法l1_ratio把把alpha的值分的值分配给配给L1/L2http:/scikit-learn.org/stable/modules/generated/sklearn.linear_model.ElasticNet.html导入包含回归方法的类:导入包含回归方法的类:from sklearn.linear_model import ElasticNetCV创建该类的一个对象:创建该类
17、的一个对象:ENcv=ElasticNetCV(alphas=1e-3,1e-2,1e-1,1,cv=5)拟合训练数据,并在测试数据上预测:拟合训练数据,并在测试数据上预测:ENcv=ENcv.fit(X_train,y_train)y_predict=ENcv.predict(X_test)ElasticNet回归的语法ElasticNetCV 使用交叉验证自动确定使用交叉验证自动确定alpha和和l1_ratio的值的值http:/scikit-learn.org/stable/modules/generated/sklearn.linear_model.ElasticNetCV.htmlJupyter演示第6章-线性回归.ipynb
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100