我正在尝试使用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
答案 0 :(得分:2)
模型的预测能力正是我所描述的根据随机数据训练的线性回归所期望的。
下面,我对10,000对随机x1
和x2
的{{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 + w3
,w1
和w2
是通过回归优化的权重。这种功能会生成一个平面,如图所示。在这种情况下,方程式的拟合度为w3
。显然,这与生成样本的函数类型不同,后者遵循的是良好的曲面。
如果您run the code yourself,效果会更加清晰,以便您可以移动3D图并更容易看到形状。
答案 1 :(得分:1)
据我了解,您正在寻找y = a*x_1 + b*x_2 + c
形式的模型,以通过线性回归近似函数y = x_1**2 + x_2**2
。如果您的变量x_1
和x_2
在0-60范围内随机均匀绘制,则该范围内的均方误差恰好是
当a = 60,b = 60和c = -1200时,这被最小化,因此,这是理论上最好的线性模型,并且在训练更多数据时,您的模型应收敛于该模型。该模型的MSE为144,000,RMSE为 379.473 。这大约与您的模型匹配,因此结果似乎没有问题。
您的RMSE可能会比“理论上最好的RMSE”略低,因为它是根据样本而不是整个均匀分布进行测量的。如果范围是1-60,或者您的数据仅包含整数,则结果也应该稍有不同。