多元线性回归有哪些基本假定,多元非线性回归python
1多元线性回归线性回归原理建模评价指标2岭回归建模专业选择最佳alpha交叉验证3 Lasso的核心作用:特征选择4多项式回归多项式回归提升模型表示
1多元线性回归线性回归原理
线性回归是机器学习中最简单的回归算法,多元线性回归是一个样本具有多重特征的线性回归问题。对于I特征为n的样本,回归结果几乎可以写出一个大家都很熟悉的方程:
在多元线性回归中,损失函数定义如下:
我们的损失函数是L2范式,也就是欧氏距离的平方结果,在sklearn的所有官方文档和网页中都是RSS残差平方和。
最小二乘法求解多元线性回归的参数:
目前,问题已经转化为最小化RSS的参数向量。这种通过最小化真实值和预测值之间的RSS来求解参数的方法称为最小二乘法。
最小二乘法的过程很简单。求极值的第一步往往是求一阶导数使一阶导数为0,最小二乘法也不错。因此,我们现在导出残差平方和RSS上的参数向量W:
建模课程klearn。线性_模型。线性回归(fit _ intercept=true,normalize=False,copy_X=True,n _ n
我们的模型没有不可替代的参数。这说明线性回归的性能往往取决于数据本身而不是我们的参数能力,而且线性回归对数据的要求也很高。
sk learn . linear _ modeimportlinearregression aslrfromskneel . model _ selectionimporttrain _ test _ spll _ spll _ splitfro t cross _ val _ score from sk learn . datasetsportfetch _ California _ housingasfch #将加州房屋价值数据集导入pandart以查看x=PD。DataFrame(housevalue.data),放入DataFrame查看导入的数据y=housevalue.target,data x.shapey.shapex
分为训练集和测试集:Xtrain,Xtest,Ytrain,ytest=train_test_split(x,y,test_size=0.3,random_state=420) # Xtest (360i。index=range (i. shape [0]) Xtrain的恢复指数
评估指数MSE
Sklearn使用RSS变量,均方差(MSE)来衡量我们的预测值和真实值之间的差异。
没有注意
Cross_val_score(reg,x,y,cv=10,scoring="mean_squared_error ")
仅:
Cross_val_score(reg,x,y,cv=10,scoring=" neg _ mean _ squared _ error ")
确定是否有# importsklearnsorted(sk learn . metrics . scorers . keys)的两个方法调用。
# 1 froms kle arn . metrics import mean _ squared _ errorsasmsemse(yhat,Ytest)y . max(y . min)# 2 cross _ val _ scool)
在sklearn的参数评分中,以均方误差为评价基准时,“负均方误差”(均方误差MSE为负?)和真均方误差MSE的值实际上是neg _ mean _ squared _ com/
对于一些拟合模型,如果用MSE来判断,MSE会变小。如果大部分样本实际上是完全拟合的,那么在少数样本的真实值和预测值的较大差异被平均分配到每个样本后,MSE会变小。但是,这样的拟合结果一定不是1。
好的结果,因为一旦我的新样本在拟合曲线的后半段,我的预测结果必然会出现巨大的偏差,这不是我们希望看到的。因此,我们希望找到新的指标,它不仅可以判断预测值是否正确,还可以判断我们的模型是否拟合了足够多的值以外的信息。
R^2:
和解释变量得分(EVS)
R2分数(真实值,预测值)#顺序不能颠倒。
从sklearn.metrics导入r2 _得分2 _得分(ytest,yhat) #或者直接指定参数R2 _得分(y _ true=ytest,y _ pred=yhat)得分的值为测试的x和y。
R2=reg.score(Xtest,Ytest)我们观察到,虽然我们在加州房子价值数据集上的MSE相当小,但是我们的MSE并不高,这证明我们的模型可以很好地拟合数据值,但是不能正确地拟合数据分布。让我们对照图纸,看看是不是这样。我们可以在一个图上画两条曲线,一条曲线是我们的真实标签Ytest,另一条曲线是我们的预测结果yhat。两条曲线重叠得越多,我们的模型就越合适。
将matplotlib.pyplot导入为PLT # sorted(Ytest)PLT . plot(range(len(Ytest)),sorted(Ytest),c=black ,label= Data )PLT . plot(range(len(yhat)),sorted(yhat),c=red ,label= Predict )PLT . legend()PLT . show()
可以看出,虽然我们的大部分数据拟合得很好,但是在图像的开头和结尾有很大的拟合误差。如果我们在图像的右侧分布更多的数据,我们的模型将越来越偏离我们的真实标签。这种结果和我们前面说的差不多。虽然在有限的数据集上正确地预测了数值,但是数据的分布并没有正确地拟合。如果更多的数据进入我们的模型,数据标签预测错误的可能性非常大。
r2 显示为负?
当我们的r2为负的时候,证明我们的模型和我们的数据拟合的很差,模型根本不能用。总之,否定是合理的。当然,在实际应用中,如果你发现你的线性回归模型为负,并不意味着你必须接受它。首先,检查你的建模过程和数据处理过程是否正确。可能你已经伤害了数据本身,也可能你的建模过程中存在bug。如果你检查了所有的代码,你确定你的预处理没有问题,但是你的仍然是负的,那么这证明线性回归模型不适合你的数据。试试其他算法。
2岭回归这种算法不是为了提高模型的性能,而是为了提高模型的性能而设计的。(事实上,当我们使用岭回归或Lasso时,模型的效果往往会降低,因为我们删除了一小部分特征。
岭回归的损失函数;
推导后
多重共线性是可以控制的:最小二乘法必须有解,这个解可以用来调整,保证不会偏离太多。当然,在W中占据了原始特征矩阵贡献的空间,因此,如果过大,也会导致W的估计出现较大偏差,无法正确拟合数据的真实面貌。在使用中,我们需要找出的最佳值,使模型效果更好。
在sklearn中,岭回归由线性模型库中的岭类调用:
sklearn.linear_model类。Ridge(alpha=1.0,fit_intercept=True,
normalize=False,copy_X=True,max_iter=None,tol=0.001,solver=auto ,
随机状态=无)
重新导入数据后
Fromsklearn.linear _ model导入ridge reg=ridge (alpha=1)。Fit (Xtrain,YTrain) reg。Score (Xtest,YTest) #交叉验证下,岭回归的结果与线性回归相比有怎样的变化?将numpy作为npalpharange=np.arange(1,1001,100)ridge,lr=[],[]for alpha range中的alpha:reg=Ridge(alpha=alpha)linear=LR()regs=cross _ val _ score(reg,X,y,cv=5,scoring=r2 )。mean()linears=cross _ val _ score(linear,X,y,cv=5,scoring=r2 )。mean()ridge . append(regs)lr . append(linears)PLT . plot(alpha range,Ridge,color=red ,label= Ridge )PLT . plot(alpha range,LR,color=blue ,label= LR )PLT . legend()PLT . show()
它可以逐渐接近最高点,但即使在这个数据中找到了最高的alpha,模型也没有得到改进。
查看差异:
将数组作为npalpharange=np.arange(1,1001,100)山脊,lr=[],[]为alpha范围中的alpha:reg=Ridge(alpha=alpha)linear=LR()regs=cross _ val _ score(reg,X,y,cv=5,scoring=r2 ).var()linears=cross _ val _ score(linear,X,y,cv=5,scoring=r2 ).var()脊。追加(regs)lr。附加(线性)PLT。绘图(阿尔法范围,山脊,颜色=红色,标签=山脊)。plot(alpha范围,LR,颜色=蓝色,标签= LR )。图例()工厂。显示()山脊专门的选择最好希腊字母的第一个字母的交叉验证实例类。线性_模型Ridgecv(alphas=(0.1,1.0,10.0),fit
截距=真,正常化=假,得分=无,cv=无,存储cv值=假)
从sklearn.linear_model导入RidgeCV ridge _=RidgeCV(alpha s=NP .arange(1,1001,100) #,scoring= neg _ mean _ squared _ error ,store_cv_values=True #,cv=5)。拟合(X,y)#不交叉验证的结果山脊_。score(X,y)#每个希腊字母的第一个字母下的结果山脊_。cv_values_ .平均值(轴=0)#选择的最佳值山脊_。阿尔法_ 3套索的核心作用:特征选择这里不详细说了
四多项式回归普遍的用于解决线性回归只能处理线性数据问题的手段
sk学习。预处理。po 1多项式特征类(度数=2,
interaction_only=False,include_bias=True)
从sklearn。预处理导入多项式功能端口数量作为npX=np.arange(1,4).整形(-1,1)x=多项式特征(度数=3,include_bias).拟合_变换(X)rnd=NP。随机的。随机状态(42)#设置随机数种子y=rnd.randn(3)y#LR().拟合(x,y).coef_#LR().拟合(x,y).intercept _ LR(fit _ intercept=False).拟合(x,y).coef_LR(fit_intercept=False).拟合(x,y).截取_多项式回归提升模型表现从sklearn。预处理导入多项式要素作为脉波频率(Pulse Frequency的缩写)从sklearn.linear_model导入线性回归导入数组作为NP rnd=NP。随机的。随机状态(42)#设置随机数种子X=rnd.uniform(-3,3,size=100)X=X . shape(-1,1)#将X升维,准备好放入实例中y=NP。sin(X)rnd正常(size=len(X))/3 line=NP。Lin空间(-3,3,1000,endpoint=False).整形(-1,1) #测试数据reg=LinearRegression().拟合(X,y)注册分数(X,y)#进行高次项转换poly=PF(度数=4)X _=聚。拟合_变换(X)直线_=多边形。变换(线)#拟合LinearR_=LinearRegression().fit(X_,y)#打分线性R_ .得分(X_,y)线性RR _ .score(line_,np.sin(line))
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。