多元回归,平均绝对误差高

我正在尝试使用Phyton中的多元回归来计算X1 ^ 2 + X2 ^ 2 = Y。在CSV文件中,我有2列X1和X2,它们是1到60之间的随机数。我想预测测试数据的y值。但是我的模型的误差太大。

 df = pd.read_csv("C:/Users/Büşra/Desktop/bitirme1/square-test.csv",sep=';')
 x = df[['X1','X2']]
 y = df[['Y']
 x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3,random_state=1)
 x_train.shape,x_test.shape,y_train.shape,y_test.shape
 model1 = linear_model.LinearRegression()
 model1.fit(x_train,y_train)
 print('Intercept: \n',model1.intercept_)
 print('Coefficients: \n',model1.coef_)
 print("accuracy: %f" % model1.score(x_train,y_train)) 
 y_pred = abs(model1.predict(x_test))    
 print('Mean Absolute  Error:',(mean_absolute_error(y_test.to_numpy(),y_pred)))  
 print('Mean Squared Error:',(metrics.mean_squared_error(y_test.to_numpy(),y_pred)) ) 
 print('Root Mean Squared Error:',np.sqrt(metrics.mean_squared_error(y_test.to_numpy(),y_pred)))

平均绝对错误:297.7286734942946

均方误差:129653.26345373654

均方根误差:360.0739694198076

pan1955 回答:多元回归,平均绝对误差高

模型的预测能力正是我所描述的根据随机数据训练的线性回归所期望的。

下面,我对10,000对随机x1x2的{​​{1}}和0 <= x <= 60进行了普通最小二乘线性回归训练。然后,我在100个随机对上对其进行测试。

y = x1**2 + x2**2

它给我的错误与给你的错误完全相同。

import numpy as np
import sklearn.linear_model

X_train = np.random.rand(20000).reshape(10000,2)*60
y_train = (X_train[:,0]**2)+(X_train[:,1]**2)
X_test = np.random.rand(200).reshape(100,2)*60
y_test = (X_test[:,0]**2)+(X_test[:,1]**2)

model = sklearn.linear_model.LinearRegression()
model.fit(X_train,y_train)
y_pred = model.predict(X_test)

print("MAE: {}".format(np.abs(y_test-y_pred).mean()))
print("RMSE: {}".format(np.sqrt(((y_test-y_pred)**2).mean())))

以下是说明为什么回归无法获得比此更好的结果的图。特征(>>> python .\regression.py MAE: 301.35977152696194 RMSE: 363.663670758086 x1)在x和y轴上,目标(x1)在z轴上。红点是训练样本,蓝点是回归产生的函数。

线性回归只能产生形式为y的函数,其中y = w1·x1 + w2·x2 + w3w1w2是通过回归优化的权重。这种功能会生成一个平面,如图所示。在这种情况下,方程式的拟合度为w3。显然,这与生成样本的函数类型不同,后者遵循的是良好的曲面。

3D plot of regression

如果您run the code yourself,效果会更加清晰,以便您可以移动3D图并更容易看到形状。

,

据我了解,您正在寻找y = a*x_1 + b*x_2 + c形式的模型,以通过线性回归近似函数y = x_1**2 + x_2**2。如果您的变量x_1x_2在0-60范围内随机均匀绘制,则该范围内的均方误差恰好是

double integral

当a = 60,b = 60和c = -1200时,这被最小化,因此,这是理论上最好的线性模型,并且在训练更多数据时,您的模型应收敛于该模型。该模型的MSE为144,000,RMSE为 379.473 。这大约与您的模型匹配,因此结果似乎没有问题。

您的RMSE可能会比“理论上最好的RMSE”略低,因为它是根据样本而不是整个均匀分布进行测量的。如果范围是1-60,或者您的数据仅包含整数,则结果也应该稍有不同。

本文链接:https://www.f2er.com/3149813.html

大家都在问