多元回归分析

article/2025/10/8 22:10:42

建模复习

 

目录

前言

一、回归的思想

1,介绍

2,回归分析的分类

3,数据类型

二、一元线性回归

1,一元线性函数拟合

2,一元线性回归模型

3,回归系数

1,回归系数的解释

2,内生性

3,完全多重共线性

4,拟合优度

三,实验

1,变量说明

2,模型的建立与求解

2.1,数据来源:

2.2,线性假设

2.3,相关性分析

2.4,完全多重共线性

2.5,运用VIF法检验多重共线性

2.5,多元线性回归模型

2.6 利用岭回归解决多重共线性问题

2.6,多项式回归


前言

        回归分析是数据分析中最基础也是最重要的分析工具。通过研究自变量X和因变量Y的相关关系,尝试去解释Y的形成机制,进而达到通过X去预测Y的目的。

        常见的回归分析有:线性回归,0-1回归,定序回归,计数回归和生存回归。其划分的依据是因变量Y的类型。


一、回归的思想

1,介绍

回归分析:研究X和Y之间的相关性。

相关性:不解释

Y:因变量,类型:

        1)0-1变量:1是好瓜,0是坏瓜。

        2)定序变量:Y为a,b,c,d或者为1,2,3,4....表示不同的水平

        3)计数变量:次数,非负整数(完成作业的次数)
        4)生产变量:产品寿命,企业寿命。。。无法将数据具体化的数据

X:自变量。指标参数,回归分析中,通过研究X和Y的相关关系,尝试解释Y的形成机制,进而达到通过各种指标X预测Y

2,回归分析的分类

类别模型Y例子
线性回归OLS,GLS(最小二乘)连续数值型变量GDP与产量,收入关系
0-1回归logistic回归二值变量(0-1)是否好瓜,是否突变
定序回归probit回归定序变量等级评定(优良差)
计数回归泊松分布计数变量每分钟的车流量
生存回归cox等比例风险回归生存变量(截断数据)企业产品寿命

3,数据类型

数据类型建模方法
横截面数据:某一时间点收集的不同对象数据多元回归分析
时序数据:一串时间序列数据LSTM,灰色时间预测,指数平滑,ARIMA,SARIAM,GARCH,VAR,协积
面板数据:横截数据+时序数据固定效应,随机效应,静态面板,动态面板

横截数据在比赛中,往往可以使用回归进行建模,建立自变量和因变量间的相关分析模型和预测模型

二、一元线性回归

1,一元线性函数拟合

设这些样本点为\left ( x_{i},y_{i} \right ),i=1,2,...,n

我们设置拟合曲线为y=kx+b,令拟合值\hat{y}_{i}=k x_{i}+b

那么\hat{k}, \hat{b}=\underset{k, b}{\arg \min }\left(\sum_{i=1}^{n}\left(y_{i}-\hat{y}_{i}\right)^{2}\right)=\underset{k, b}{\arg \min }\left(\sum_{i=1}^{n}\left(y_{i}-k x_{i}-b\right)^{2}\right)

L=\sum_{i=1}^{n}\left(y_{i}-k x_{i}-b\right)^{2},现在找k和b,使得L最小。

(L为损失函数,在回归中也叫作误差平方和)

2,一元线性回归模型

假设x是自变量,y是因变量,且满足如下线性关系:

y_{i} = \beta_{0}+\beta_{1} x_{i}+\mu_{i}

\beta_{0}\beta_{1}是回归系数,\mu_{i}为无法观测得且满足一定条件得扰动项

令预测值\widehat{y_{i}}=\widehat{\beta_{0}}+\widehat{\beta_{1}} x_{i},其中:\begin{array}{c} \widehat{\beta_{0}}, \widehat{\beta_{1}}=\underset{\beta_{0}, \beta_{1}}{\operatorname{argmin}}\left(\sum_{i=1}^{n}\left(y_{i}-\widehat{y_{i}}\right)^{2}\right)=\underset{\beta_{0}, \beta_{1}}{\arg \min }\left(\sum_{i=1}^{n}\left(y_{i}-\widehat{\beta_{0}}-\widehat{\beta}_{1} x_{i}\right)^{2}\right) \\ \widehat{\beta_{0}}, \widehat{\beta_{1}}=\underset{i=1}{\arg \min }\left(\sum_{i=1}^{n}\left(\widehat{\mu_{i}}\right)^{2}\right) \end{array}

 我们称\widehat{\mu_{i}}=y_{i}-\widehat{\beta_{0}}-\widehat{\beta_{1}} x_{i}为残差

这部分为建模凑字数部分(建模论文写作公式存储)

2.线性的理解

假设x是自变量,有是因变量,且满足如下线性关系:

y_{i} = \beta_{0}+\beta_{1} x_{i}+\mu_{i}

当然,线性假定并不是要求初始模型都呈现严格的线性关系。自变量与自变量可以通过变量替换转化成线性模型,如:

\begin{array}{c} y_{i}=\beta_{0}+\beta_{1} \ln x_{i}+\mu_{i} \\ \ln y_{i}=\beta_{0}+\beta_{1} \ln x_{i}+\mu_{i} \\ y_{i}=\beta_{0}+\beta_{1} x_{i}+\beta_{2} x_{i}^{2}+\mu_{i} \\ y_{i}=\beta_{0}+\beta_{1} x_{1 i}+\beta_{2} x_{2 i}+\delta x_{1 i} x_{2 i}+\mu_{i} \end{array}

对变量x进行ln操作,或平法,开方操作是提高模型准确性的一大常用数据预处理,当然,也容易出现过拟合。。。

3,回归系数

1,回归系数的解释

y_{i} = \beta_{0}+\beta_{1} x_{i}+\mu_{i}\beta_{0}\beta_{1}是回归系数

假设x为某产品品质评分(1-10之间),y为该产品的销量,我们对和y使用一元线性回归模型,如果得到y=3.4+2.3x_{i};

评估分析:
3.4:在评分为0时,该产品的平均销量为3.4
2.3:评分每增加一个单位,该产品的平均销量增加2.3

2,内生性

(写建模论文严谨的解释)

内生性问题 (endogeneity issue) 是指模型中的一个或多个解释变量与误差项存在相关关系。换言之,如果 OLS回归模型中出现 ,则模型存在内生性问题,以致于 OLS 估计量不再是一致估计。

接上个假设,假设x_{1}为某产品品质评分(1-10之间),x_{2 }某产品价格,y为该产品的销量。那么我们建立多元线性回归模型y_{i} = \beta_{0}+\beta_{1} x_{2}+\beta_{2} x_{2}+\mu_{i}

得到y_{i} =5.3+0.19 x_{1}-1.74x_{2}

评估分析:

5.3:在评分为0日价格为0时,该产品的平均销量为5.3个(没现实意义)

0.19:在保持其他变量不变的情况下,评分每增加一个单位,该产品的平均销量增加0.19

-1.74:在保持其他变量不变的情况下,价格每增加一个单位,该产品的平均销量减少1.74

看见,加入新的自变量价格后,对回归系数的影响非常大,可能原因是产品评分和价格两变量存在相关性,所以遗漏变量导致的内生性问题

3,完全多重共线性

共线性问题指的是输入的自变量之间存在较高的线性相关度。共线性问题会导致回归模型
的稳定性和准确性大大降低,另外,过多无关的维度计算也很浪费时间。

计算VIT

解决法子:

1)向前逐步回归:将自变量逐个引入模型,每引入一个自变量后都要进行检验,显著时才加入回归模型。(缺点,随着以后其他自变量的引入,原来显著的自变量也可能变成不显著的了)

2)向后逐步回归:与向前逐步回归相反,先将所有变量均放入模型,之后尝试将其中一个自变量从模型中剔除,看整个模型解释因变量的 变异是否有显著变化,之后将最没有解释力的那个自变量剔除;此过程不断迭代, 直到没有自变量符合剔除的条件。(缺点:一开始把全部变量都引入回归方程, 这样计算量比较大。若对一些不重要的变量,一开始就不引入,这样就可以减少 一些计算。当然这个缺点随着现在计算机的能力的提升,已经变得不算问题了)

3)岭回归和lasso回归:正则化,这两种方法在OLS回归模型的损失函数上加入了不同的惩罚项,该惩罚项由回归系数的函数构成,一方面,加入的惩罚项能够识别出模型中不重要的变量,对模型起到简化作用,可以看作逐步回归法的升级版;另一方面,加入的惩罚项能够让模型变得可估计, 即使之前的数据不满足列满秩。

4)改变特征(变量)的表现形式:有些变量可以改变其表现形式,如像网页的浏览次数、点击次数等特征属于长尾分布,可以对其进行log变换,变换后的变量可以有效的降低变量之间的相关性。

5)主成分分析(PCA):通过主成分分析提取主要的特征,从而忽略次要的成分,得到相关性很低的特征。

4,拟合优度R^{2}

拟合优度(Goodness of Fit) 是指回归直线对观测值的拟合程度。度量拟合优度的统计量是可决系数(亦称确定系数)R²。

  • R² 最大值为 1。R² 的值越接近1,说明回归直线对观测值的拟合程度越好;
  • 反之,R² 的值越小,说明回归直线对观测值的拟合程度越差。
1 )回归分为解释型回归和预测型回归。
预测型回归一般才会更看重  R^{2}
2 )可以对模型进行调整,例如对数据取对数或者平方后再进行回归。
3 )数据中可能有存在异常值或者数据的分布极度不均匀。

\begin{array}{c} R^{2}=\frac{\sum\left(\hat{y}_{i}-\bar{y}\right)^{2}}{\sum\left(y_{i}-\bar{y}\right)^{2}}=1-\frac{S S E}{S S T}=1-\frac{\sum\left(\hat{y}_{i}-y_{i}\right)^{2}}{\sum\left(y_{i}-\bar{y}\right)^{2}} \end{array}

三,实验

1,变量说明

符号解释
\beta _{i}未知待估计参数
\mu _{i}满足一定条件的误差项
VIF方差膨胀因子
X原始数据矩阵

2,模型的建立与求解

2.1,数据来源:

diabetes 是一个关于糖尿病的数据集, 该数据集包括442个病人的生理数据及一年以后的病情发展情况。

from sklearn.datasets import load_iris, load_wine, load_diabetesdiabetes = load_diabetes()
data = diabetes['data']
target = diabetes['target']
feature_names = diabetes['feature_names']
df = pd.DataFrame(data, columns=feature_names)
df.head()  # 查看前几行数据

该数据集共442条信息,特征值总共10项, 如下:
age:年龄
sex:性别

bmi(body mass index):身体质量指数,是衡量是否肥胖和标准体重的重要指标,理想BMI(18.5~23.9) = 体重(单位Kg) ÷ 身高的平方
(单位m) bp(blood pressure):血压(平均血压)
s1,s2,s3,s4,s4,s6:六种血清的化验数据,是血液中各种疾病级数指针的6的属性值。 s1——tc,T细胞(一种白细胞)

2.2,线性假设

        已知442个病人的生理数据与年龄,性别,身体质量指数,BMI,六种血清的化验数据,有关。为了方便探求病人的生理数据与各项生理指标的具体关系,假设病人的生理数据(因变量)与各项生理指标(自变量)间的关系为线性关系:

\begin{array}{c} y_{i}=\beta_{1} x_{i 1}+\beta_{2} x_{i 2}+\beta_{3} x_{i 3}+ \cdots+\beta_{10} x_{i 10}+\mu_{i}(i=0,1, \cdots, 442) \end{array}

        其中,\beta _{i}是未知代估参数,\mu _{i}是无法观测且满足一定条件的误差项

2.3,相关性分析(建模考虑点)

import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=(15,8))
mask = np.triu(np.ones_like(df.corr(), dtype=bool))
sns.heatmap(df.corr(), annot=True, mask=mask, vmin=-1, vmax=1)
plt.title('Correlation Coefficient Of Predictors')
plt.show()

2.4,完全多重共线性(建模考虑点)

        如果数据矩阵X不满秩,即存在某一解释变量可以被其他解释变量线性表示出,则存在“严格多重共线性”。其表现为:\left ( X^{T}X^{-1} \right )不存在,总体参数\beta不可识别,无法定义最小二乘估计量。

        严格多重共线性在现实数据中极少出现,现实中较为常见的是近似(非严格)多重共线性。其具体表现为: 存在第k个解释变量,如果将x_k对其他解释变量\left \{ x_1,\cdots,x_{k-1},x_{k},\cdots,x_K \right \}了进行回归,所得到的可决系数R^2较高。在存在近似多重共线性的情况下,OSL 依然是最佳线性无偏估计,但不意味着 OSL 估计量方差绝对小。其主要负面效果为:单个系数的t检验不显著,或系数估计值不合理,甚至符号与理论值相反,另一种可能情况是增减解释变量会使得系数估计值发生很大的变化。直观来看,若两个(或多个)解释变量高度相关,则不容易区分它们对被解释变量的单独影响力。

2.5,运用VIF法检验多重共线性(建模考虑点)

VIF 全称为方差膨胀因子(Variance Inflation Factor),其计算方法为:

假设共有k个自变量,则第m个自变量的VIF_{m}=1 /\left(1-R_{1 \sim k/m}^{2}\right)。其中R_{1 \sim k/m}^{2}是将第m个自变量作为因变量,对剩下的K-1个自变量回归得到的拟合优度。VIF越大说明第m个自变量与其他自变量的相关性越大。
定义回归模型的VIF=max\left \{ x_1,x_2,\cdots,x_K \right \}

一个经验规则是:若VIF >10,则认为该回归方程存在严重的多重共线性

可以看出s1=59.203>10,s2=39.194>10,s3=15.4023>10可以认为该回归方程存在严重的多重共线性

#检验完全多重共线性
import pandas as pd
from statsmodels.stats.outliers_influence import variance_inflation_factor
import numpy as np
# 当VIF<10,说明不存在多重共线性;当10<=VIF<100,存在较强的多重共线性,当VIF>=100,存在严重多重共线性
vif = [variance_inflation_factor(df.values, df.columns.get_loc(i)) for i in df.columns]

探究单个变量与结果之间的可决系数,进行一元线性回归

plt.figure(figsize=(2*6, 5*5))  
for i, col in enumerate(df.columns): train_X = df.loc[:, col].values.reshape(-1, 1)# 每一次循环,都取出datafram中的一列数据,是一维Series数据格式,但是线性回归模型要求传入的是一个二维数据,因此利用reshape修改其形状train_Y = targetlinearmodel = linear_model.LinearRegression()  reg = linearmodel.fit(train_X, train_Y)  score = reg.score(train_X, train_Y) axes = plt.subplot(5, 2, i + 1)plt.scatter(train_X, train_Y)# 画出每一个特征训练模型得到的拟合直线 y= kx + bk = linearmodel.coef_  # 回归系数b = linearmodel.intercept_  # 截距x = np.linspace(train_X.min(), train_X.max(), 100)y = k * x + b# 作图plt.plot(x, y, c='red')axes.set_title(col + ' Coefficient of determination:' + str(score))
plt.show()

 

 从中可以看出,糖尿病数据集中10的特征,对target的影响大小,从大到小分别是:

 [[0.3439237602253803, 'bmi'], [0.32022405096453443, 's5'], [0.19490798886682947, 'bp'], [0.18528968598509687, 's4'], [0.1558585524453051, 's3'], [0.14629361572293453, 's6'], [0.04495353245556555, 's1'], [0.03530218264671636
(这个数据有些指标或多或少有点离谱)

2.5,多元线性回归模型

from sklearn.model_selection import train_test_split
from sklearn import datasets, linear_model
from sklearn.metrics import mean_squared_error, r2_scoretrain_X, test_X, train_Y, test_Y = train_test_split(data, target, train_size=0.8)model = linear_model.LinearRegression(copy_X=True, fit_intercept=True, normalize=False)#计算截距
# 3、训练数据
model.fit(train_X, train_Y)
# 4、评估模型
y_pred = model.predict(test_X)
# The coefficients
print("Coefficients: \n", model.coef_)
# The mean squared error
print("MSE:",mean_squared_error(test_Y, y_pred))
# The coefficient of determination: 1 is perfect prediction
print("R2:",r2_score(test_Y, y_pred))

R2的numpy计算方法:

from sklearn.metrics import r2_score
import numpy as np
def test(a,b):# a:numpy一维数组,形状是(n,),表示标签。# b:numpy一维数组,形状是(n,),表示预测结果。# print(r2_score(a,b))return R2(b,a)
def SST(y_tar):y_mean = np.mean(y_tar)sst = np.sum((y_tar-y_mean)**2)return sst
def SSE(y_hat, y_tar):sse = np.sum((y_hat-y_tar)**2)return sse
def R2(y_hat, y_tar):#y_hat为预测结果,y_tar为标签目标值sst = SST(y_tar)sse = SSE(y_hat,y_tar)rr = 1-sse/sstreturn rr

多元线性回归求解推导:

MSE:L=\displaystyle\sum^n_{i=1}\left[ y_i - \left( w_0+w_1x_i\right) \right]^2 

为了\left(y- X \beta \right)^T \left(y - X \beta \right)最小

。。。。一堆计算之后(没必要看)

\beta = \left(X^T X\right)^{-1} \left(X^T y\right)

#一些numpy操作
# 矩阵拼接
import numpy as np
#拼接
np.concatenate((a,b), axis=1)
# 矩阵乘法
a.dot(b)
# 矩阵转置
a.T
# 矩阵的逆
aa=np.linalg.inv(aa)
#求方差
np.var(a)
#均值
np.mean(a)

计算\beta:

ones = np.ones([X.shape[0], 1])
X=np.concatenate((X,ones),axis=1)
XT=X.T
XTX=X.T.dot(X)
XTX=XTX.dot(XTX.T)
XTX_1=np.linalg.inv(XTX)
XTY=XT.dot(y)
beta=XTX_1.dot(XTY)

2.6 利用岭回归解决多重共线性问题

from sklearn.linear_model import Ridgen_alphas = 100
alphas = np.logspace(-5, 0, n_alphas)coefs = []
for alpha in alphas:ridge = linear_model.Ridge(alpha=alpha)ridge.fit(train_X, train_Y)coefs.append(ridge.coef_)
y_reg_pred = ridge.predict(test_X)
# The coefficients
print("Coefficients: \n", ridge.coef_)
# The mean squared error
print("MSE:",mean_squared_error(test_Y, y_reg_pred))
# The coefficient of determination: 1 is perfect prediction
print("R2:",r2_score(test_Y, y_reg_pred))

ax = plt.gca()
ax.plot(alphas, coefs)
ax.set_xscale('log')
ax.set_xlim(ax.get_xlim())[::-1]
plt.xlabel('alpha')
plt.ylabel('weights')
plt.title('Ridge coefficients as a function of the regularization')
plt.show() 

从岭迹图可以看出那些指标对结果显著那些指标不显著

岭回归的数学原理:最小化目标从MSE变成MSE+系数平方和

新的目标是:\left(y- X \beta \right)^T \left(y - X \beta \right) + \alpha \left(\beta^T \beta \right)

新的结果是:\beta = \left( X^T X + \alpha I\right)^{-1}\left(X^T y\right)

beta = np.linalg.inv(X.T.dot(X) + alpha*I).dot(X.T.dot(y))

2.6,多项式回归

改变特征(变量)的表现形式吧:

eg:一元一次线性回归y=w_0+w_1x,变成一元二次线性回归y=w_0+w_1x+w_2x^2

from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(d)

d为多项式次数,这是一个改变特征的方法,可以解决多重共线性问题。虽然多项式的加入,对数据的拟合效果有所提高,但是容易出现过拟合或者(龙格现象),这时候给予模型正则化可适当缓解过拟合现象:

例子:进行一元线性回归,拟合sin

(随机数大一点导致过拟合嘿嘿)

import numpy as np
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression, Ridge
from sklearn.metrics import mean_squared_error# 用于训练的数据有20个
train_size = 20
# 用于测试的数据有15个
test_size = 15
# 生成用于训练的 X
train_X = np.random.uniform(low=0, high=1.2, size=train_size)
# 生成用于测试的 X
test_X = np.random.uniform(low=0.1, high=1.3, size=test_size)
# 生成用于训练的 y
train_y = np.sin(train_X * 2 * np.pi) + np.random.normal(0, 0.8, train_size)
# 生成用于测试的 y
test_y = np.sin(test_X * 2 * np.pi) + np.random.normal(0, 0.8, test_size)
plt.scatter(train_X, train_y, c="silver")
plt.scatter(test_X, test_y, c='black')

数据转换为多项式

poly = PolynomialFeatures(6) # 次数为6
# 训练数据进行转化
train_poly_X = poly.fit_transform(train_X.reshape(train_size, 1))
# 测试数据进行转换
test_poly_X = poly.transform(test_X.reshape(test_size, 1))

建立线性回归模型

# 1. 建立模型
model = LinearRegression()
# 2. 训练
model.fit(train_poly_X, train_y)
# 3. 预测
train_pred_y = model.predict(train_poly_X)
test_pred_y = model.predict(test_poly_X)
# 4. 评价
print(mean_squared_error(train_pred_y, train_y)) # MSE
print(mean_squared_error(test_pred_y, test_y))   # MSE

说明有些过拟合,那多项式就一个一个变试试:

polys = []   # 每次循环时要保存一个转换器,以便后面调用
models = []  # 每次循环时要保存一个模型,以便后面调用for n in range(1,7):# 0. 数据准备:转换为多项式polys.append(PolynomialFeatures(n))  # 次数为n的多项式转换train_poly_X = polys[n-1].fit_transform(train_X.reshape(train_size, 1))test_poly_X = polys[n-1].transform(test_X.reshape(test_size, 1))# 1. 建立模型models.append(LinearRegression())# 2. 训练models[n-1].fit(train_poly_X, train_y)# 3. 预测train_pred_y = models[n-1].predict(train_poly_X)test_pred_y = models[n-1].predict(test_poly_X)# 4. 评价MSE_train = mean_squared_error(train_pred_y, train_y)MSE_test  = mean_squared_error(test_pred_y, test_y)print(f"{n}\t{MSE_train:.3f}\t{MSE_test:.3f}")

 可以看见多项式为三次时最好

plt.scatter(train_X, train_y, c="silver")
plt.scatter(test_X, test_y, c='black')n = 3   # 使用6次方模型展示拟合结果# 准备拟合曲线,先从x入手,得到一系列的x
xR = np.linspace(-0.05, 1.4, 100)# 将 x 扩展到 n 次多项式
xR_poly = polys[n-1].transform(xR.reshape(100, 1))# n次方模型保存在models[n-1]处。用它预测得到拟合结果
yR = models[n-1].predict(xR_poly)print(models[n-1].intercept_)      # n次方模型的参数
print(models[n-1].coef_)           # n次方模型的参数
plt.plot(xR, yR, 'r-')

 加入岭回归:

polys2 = []   # 每次循环时要保存一个转换器,以便后面调用
models2 = []  # 每次循环时要保存一个模型,以便后面调用for n in range(1,7):# 0. 数据准备:转换为多项式polys2.append(PolynomialFeatures(n))  # 次数为n的多项式转换train_poly_X = polys2[n-1].fit_transform(train_X.reshape(train_size, 1))test_poly_X = polys2[n-1].transform(test_X.reshape(test_size, 1))# 1. 建立模型models2.append(Ridge(alpha=0.1))# 2. 训练models2[n-1].fit(train_poly_X, train_y)# 3. 预测train_pred_y = models2[n-1].predict(train_poly_X)test_pred_y = models2[n-1].predict(test_poly_X)# 4. 评价MSE_train = mean_squared_error(train_pred_y, train_y)MSE_test  = mean_squared_error(test_pred_y, test_y)print(f"{n}\t{MSE_train:.3f}\t{MSE_test:.3f}")

 画出多项式6次的拟合曲线

多元线性回归的多项式:

如果一个n元线性回归模型还要进行PolynomialFeatures(d)的变换,最终会得到C_{n+d}^d(含常数项)

例如,一元线性回归模型经过PolynomialFeatures(6)的变换,会得到7项特征;二元线性回归模型经过PolynomialFeatures(2)的变换,会得到6项特征。

糖尿病数据进行多项式多元线性回归

from sklearn.preprocessing import PolynomialFeaturespolys2 = []   
models2 = []  
for n in range(1,7):poly = PolynomialFeatures(n) # 次数为6train_poly_X = poly.fit_transform(train_X)test_poly_X = poly.transform(test_X)models2.append(Ridge(alpha=0.1))# 2. 训练models2[n-1].fit(train_poly_X, train_Y)# 3. 预测train_pred_y = models2[n-1].predict(train_poly_X)test_pred_y = models2[n-1].predict(test_poly_X)# 4. 评价MSE_train = mean_squared_error(train_pred_y, train_Y)MSE_test  = mean_squared_error(test_pred_y, test_Y)R2=r2_score(test_Y, test_pred_y)print(f"{n}\t{MSE_train:.3f}\t{MSE_test:.3f}\t{R2:.3f}")


 pipeline:将一件需要重复做的事情切割成各个不同的阶段,每一个阶段由独立的单元负责。所有待执行的对象依次进入作业队列。

from sklearn.pipeline import Pipeline
# 1. 建立模型
p = Pipeline([('ppp', PolynomialFeatures(6)),('mm',  Ridge(alpha=0.1)),
])
# 2. 训练
p.fit(train_X, train_Y)
# 3. 预测
train_pred_y = p.predict(train_X)
test_pred_y  = p.predict(test_X)
# 4. 评价
MSE_train = mean_squared_error(train_pred_y, train_Y)
MSE_test  = mean_squared_error(test_pred_y, test_Y)print(f"{MSE_train:.3f}\t{MSE_test:.3f}")

 

总结

多重共线性还是用逐步回归好一些,用lasso会比用Ridge好(自己感觉)


http://chatgpt.dhexx.cn/article/vyMQZsrb.shtml

相关文章

VC2015运行库安装失败

VC2015安装失败&#xff0c;0x80240017-未指定的错误。 32位操作系统 64位操作系统 依次安装即可。 网盘链接&#xff1a;https://pan.baidu.com/s/1FGSAbpPuxTwszrQGMblPRg 提取码&#xff1a;z6ah 如遇到缺少什么.dll&#xff0c;可以通过增加某dll至环境变量中。

VC运行库修复安装一键安装

VC.RedistInstaller1.6.rar: http://u1.share.orcy.net.cn/file/12559096-413098201 如果上述安装不成功可尝试下载&#xff1a; Visual C AIO v2019.05.21&#xff08;自动强制安装谨慎双击&#xff09;.zip: http://u1.share.orcy.net.cn/file/12559096-413098413 ------…

phpstudy没有安装VC11、VC14运行库

文章目录 出现问题解决方案安装步骤安装VC11安装VC14验证结果出现问题 phpstudy2018–>切换版本php-5.5.36时—>提示错误 解决方案

Windows 技术篇-通过注册表查找vc运行库所在位置实战演示,通过ProductCode查看vc++运行库安装位置

vc 运行库各个版本的位置安装位置不尽相同&#xff0c;而且根据安装方式不同也有一定区别&#xff0c;总结了一套自己的方法&#xff0c;我们自己来探索&#xff1a; 我用 vc2015 举例&#xff0c;2015 有很多版本&#xff0c;每个版本对应的产品代码是不一样的&#xff0c;我…

vc2005运行库彻底卸载_VC运行库安装卸载工具-Visual C ++ AIO(VC运行库安装卸载工具)下载 v2019.05.21官方版--pc6下载站...

VisualCAIOVC运行库安装卸载工具包含了所有VisualC最新版&#xff0c;可以通过命令行静默安装&#xff0c;可以卸载所有已安装版本及更新为最新版&#xff0c;总之这是一个不错的VisualC运行库安装卸载程序。。 相关软件软件大小版本说明下载地址 Visual C AIO(VC运行库安装卸…

c语言 运行库 下载,Visual C++运行库合集

Visual C++运行库合集是基于Windows操作系统打造的可视化集成开发环境,能够为用户提供C、标准C++、ATL、MFC、OpenMP以及MSDIA等类库的运行支持,助广大用户能够更好在自己的电脑上运行VisualC++ 开发的应用程序。 Visual C++运行库具有集成开发环境,可提供编辑C语言,C++以及…

win10自带vc运行库吗?

运行库是系统中非常重要的组件&#xff0c;像一些绿化版的软件如果电脑没有运行库就无法运行&#xff0c;但是也不一定就要安装VC运行库一般而言&#xff0c;将相关的.dll文件复制出来&#xff0c;放在相关程序所在目录中就可以了。比如小编从网上下载了一款破解版的QQ&#xf…

phpStudy启动失败提示:缺少VC9运行库

镜像是官方2008 64位中文版 按照提示安装了VC9以后 软件依旧无法运行阿帕奇&#xff0c;提示缺少VC9运行库这是因为&#xff1a;64位系统除了要装64位的运行库也要装32位的运行库32位的VC9运行库下载&#xff1a;http://www.microsoft.com/zh-CN/download/details.aspx?id5582…

php程序检测不到vc9,XAMPP2016中文精简版启动失败 缺少运行库解决办法

[摘要] XAMPP是一款强大的建站集成软件包&#xff0c;但XAMPP2016 中文精简版在启动的时候会出现“缺少运行库”“程序检测不到VC9运行库”等问题&#xff0c;其实只需要正确安装vc9库就能解决问题了。 XAMPP是一款强大的建站集成软件包&#xff0c;对于经常折腾WordPress的博主…

请自行检查是否安装VC9运行库??

phpStudy是一款PHP调试环境的程序集成包&#xff0c;该程序包集成最新的ApachePHPMySQLphpMyAdminZendOptimizer&#xff0c;一次性安装&#xff0c;无须配置即可使用&#xff0c;是非常方便、好用的PHP调试环境。 1、程序自带FTP服务器&#xff0c;支持多用户&#xff0c;无需…

phpStudy启动失败时的解决方法 提示缺vc9运行库

php5.3、5.4和apache都是用vc9编译&#xff0c;电脑必须安装vc9运行库才能运行。 php5.5、5.6是vc11编译&#xff0c;如用php5.5、5.6必须安装vc11运行库。 php7.0、7.1是vc14编译&#xff0c;如用php7.0、7.1必须安装vc14运行库。 vc9和vc11运行库下载&#xff1a;http://www.…

django2.0调用银联支付接口实现银联支付

准备工作&#xff1a; 1.银联技术开放平台注册&#xff1a;https://open.unionpay.com/tjweb/acproduct/list?apiservId448 2.点击网关支付 --> 我要测试 &#xff08;按照提示下载密钥&#xff09; 3.安装需要的模块 pip install pyOpenSSL 代码实现&#xff1a; 目录结…

小程序调银联支付接口

这几天接了一个需求&#xff0c;将之前的项目支付接口改成银联的支付接口&#xff0c;简单说一下&#xff0c;对于没有接触过支付的小伙伴可能会有那么一丢丢启发… 环境&#xff1a;微信小程序银联支付 文档&#xff1a;公司提供的开发文档银联官方文档 框架&#xff1a;Dub…

【java支付一 】java整合银联支付

1.注册银联账号后进入测试地址 传送门 2.下载源码 银联源码地址 3.根据需求&#xff08;这里我们肯定使用JAVA&#xff09;选择不同的开发包&#xff0c;导入到项目中 4.修改 Java Version SDK (通用版)\ACPSample_B2C\src 文件中acp_sdk.propertites 证书以及配置回调的地址…

银联网关支付demo

对接银联支付接口&#xff0c;通过一个例子向商家支付金额。 1.首先在银联开放平台下载支付Demo&#xff0c;点击链接 或者直接拿我修改好的demo,链接: https://pan.baidu.com/s/1FywgOf5j_EYj5NQYHPeGqg 提取码: d2hp 建议拿我的现成版demo(修改了一些问题),解压后按照下面…

银联支付流程

本文的前提是你已经申请好了银联的相关资料&#xff0c;即将进入集成阶段或者遇到坑了&#xff08;没错。我踩了 吐槽下 这东西真是渣&#xff09;&#xff0c;不bb了&#xff0c;直接开始吧 照着文档把相关的so jar data.bin文件拷贝到相应的文件夹&#xff0c;权限&#xff…

java银联支付

貌似最近银联出了什么活动,公司急需接入银联支付, 作为写代码的我们 , 只能服从命令,特地记录下接入银联的过程 ,后续还会说接入支付宝和微信的亲自体验历程.................................................................... 1.申请商户 首先得去银联那里开通商户,这个…

谈谈银联 js 支付

业务场景&#xff1a;银联 JS 支付指二维码为收单机构订单的 URL&#xff0c;用户扫描二维码后在 APP 浏览器中打开收单机构的 H5 页面&#xff0c;收单机构在确认支付后调用银联统一网关&#xff0c;由银联调用 APP 完成支付的场景。 银联 JS 支付为丰富 APP 受理范围&#x…

springboot整合银联支付B2C

springboot整合银联支付B2C 前期准备 需要注册银联&#xff0c;登录&#xff0c;下载相关的sdk 这里是整合B2C 注册&#xff0c;登录 注册登录地址 https://open.unionpay.com/tjweb/login 下载sdk sdk下载地址: https://open.unionpay.com/tjweb/acproduct/list?apiSvc…

银联支付接口申请流程-傲付宝

公司的业务主要是帮企业申请各种支付接口&#xff0c;申请得多就慢慢熟悉了一些门道&#xff0c;其实银联支付申请还是比较简单的&#xff08;不用上传app截图什么的&#xff09;&#xff0c;只是申请比较难&#xff0c;还有填写的资料比较多。下面我给大家介绍下银联支付接口中…