大家好,我是python新手,多元回归模型中的多重共线性有问题。
我有两条传送带的日期,一条接一条,每小时“负荷”“速度”“能量”等等。我想了解能源性能。首先,我尝试了一个普通的最小二乘模型来得到系数。但我也可以看到,不同的输送机之间的系数是不同的。关键是其中一条皮带要小几米,它有一个将负载向上提升几米的方法。我计算出坡度为0.09。现在我想了解一下。所以,我在每一条皮带上都放了一个单独的列,并附加它们。我做了一个岭回归,当alpha为零时,我又得到了OLS回归。但我现在得到的系数令人惊讶。像以前一样对负载有很大的影响,甚至新的坡度如预期,但是现在皮带的速度对能量性能有负面影响。当发动机转速提高时,能量就会减少,这是很好的,但不可能的
在我看来,这可能是多重共线性的结果。所以我用了一个相关矩阵,但是斜率和速度之间没有相关性。所以我试着做一个偏最小二乘法,但是我得到的系数接近于零,但是另一方面,PLS模型给我返回X和Y,加载我期望的值,就像我的系数一样。你知道吗
我知道PLS通过y = x*coef +ERR
估计Coefs。你知道吗
我想知道是否有可能得到错误值?是不是一个ERR值太大而不能得到“好”的系数? PLS是否有可能得到比OLS低得多的系数?PLS模型中的yœu载荷值是多少? 有没有其他模型可以用来检查能源性能? 谢谢你的帮助。你知道吗
########## Partial Least Square Regression ######
PLSRegr = PLSRegression(n_components=2)
pls = PLSRegr.fit(X_train, Y_train)
pls_pred = pls.predict(X_test)
pls_meanSquaredError = mean_squared_error(Y_test, pls_pred)
print("PLS MSE:", pls_meanSquaredError)
pls_rootMeanSquaredError = sqrt(pls_meanSquaredError)
print("PLS RMSE:", pls_rootMeanSquaredError)
pls_mean = mean_absolute_error(Y_test, pls_pred)
print("PLS Mean_absolute Error:",pls_mean)
pls_r2 = r2_score(Y_test,pls_pred)
print("PLS R²", pls_r2)
print('PLS Coefficients: \n', PLSRegr.coef_)
print('PLS loadings: \n', PLSRegr.y_loadings_)
print('PLS loadings: \n', PLSRegr.x_loadings_)
##### Ridge Regression
n_alphas = 10
alphas = np.logspace(-1.5, 2.5, n_alphas)
coefs = []
errors = []
error_pred = []
Rsquared = []
Rsquared_pred = []
scores = []
p = 6 # Number of Predictors
N = 14266 # Total sample Size
for a in alphas:
ridge = KernelRidge(alpha=a, kernel='linear', coef0=0)
ridge.fit(X_train, Y_train)
KRR_pred = ridge.predict(X_train) # Prediction Train
rgr_pred = ridge.predict(X_test) # Prediction Test
print(KRR_pred)
print(ridge.dual_coef_)
print(np.dot(X_train.transpose(),ridge.dual_coef_))
coefs.append(np.dot(X_train.transpose(),ridge.dual_coef_))
Rsquared.append(ridge.score(X_train, Y_train))
print("R² of Trainset:",Rsquared)
Rsquared_pred.append(r2_score(Y_test,rgr_pred))
print("R² of Prediction:", Rsquared_pred)
Rsquaredadj = 1 - (((1-(r2_score(Y_test,rgr_pred)))*(N-1))/(N-p-1))
print("Adj R²",Rsquaredadj)
errors.append(mean_squared_error(ridge.dual_coef_,KRR_pred))
errors2.append(mean_squared_error(ridge.dual_coef_,rgr_pred))
print('MSE of bias:', errors)
error_pred.append(mean_squared_error(Y_test, rgr_pred))
print("RGR MSE:", error_pred)
mse = np.mean((rgr_pred - Y_test) ** 2)
print("MSE check", mse)
coefs = np.array(coefs)
coefs = coefs.reshape(n_alphas, 6)
print('Coefficients: \n', coefs)
print('Alphas: \n',alphas)
print(KRR_pred)
print(ridge.dual_coef_)
Temp, Load, Tension, speed, Slope
PLS Results : 0.00, 0.11, -0.01, 0.02, 0.04
OLS/Ridge(Alpha=Zero) Results: -0.038,1.37,-0.067,-0.11,0.33
OLS Result without slope: -0.011, 1.11, -0.33, 0.40
我期望像without slope
这样的值,但是在speed
系数为正的脊线中“更小”,在PLS中结果更高
目前没有回答
相关问题 更多 >
编程相关推荐