首页 文章

查找python中线性回归的均方误差(使用scikit learn)

提问于
浏览
2

我试图在python中进行简单的线性回归,x变量是项目描述的字数,y值是以天为单位的资金速度 .

我有点困惑,因为测试的均方根误差(RMSE)为13.77,训练数据为13.88 . 首先,RMSE不应介于0和1之间?第二,测试数据的RMSE不应高于训练数据吗?所以我猜,我做错了但不确定错误在哪里 .

另外,我需要知道回归的权重系数,但遗憾的是不知道如何打印它,因为它隐藏在sklearn方法中 . 任何人都可以帮忙吗?

这是我到目前为止:

import numpy as np
import matplotlib.pyplot as plt
import sqlite3
from sklearn.model_selection import train_test_split
from sklearn import linear_model

con = sqlite3.connect('database.db')
cur = con.cursor()

# y-variable in regression is funding speed ("DAYS_NEEDED")    
cur.execute("SELECT DAYS_NEEDED FROM success")
y = cur.fetchall()                  # list of tuples
y = np.array([i[0] for i in y])     # list of int   # y.shape = (1324476,)

# x-variable in regression is the project description length ("WORD_COUNT")
cur.execute("SELECT WORD_COUNT FROM success")
x = cur.fetchall()
x = np.array([i[0] for i in x])     # list of int   # x.shape = (1324476,)

# Get the train and test data split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)

# Fit a model
lm = linear_model.LinearRegression()
x_train = x_train.reshape(-1, 1)    # new shape: (1059580, 1)
y_train = y_train.reshape(-1, 1)    # new shape: (1059580, 1)
model = lm.fit(x_train, y_train)
x_test = x_test.reshape(-1, 1)      # new shape: (264896, 1)
predictions_test = lm.predict(x_test)
predictions_train = lm.predict(x_train)

print("y_test[5]: ", y_test[5])     # 14
print("predictions[5]: ", predictions_test[5]) # [ 12.6254537]

# Calculate the root mean square error (RMSE) for test and training data
N = len(y_test)
rmse_test = np.sqrt(np.sum((np.array(y_test).flatten() - np.array(predictions_test).flatten())**2)/N)
print("RMSE TEST: ", rmse_test)     # 13.770731326

N = len(y_train)
rmse_train = np.sqrt(np.sum((np.array(y_train).flatten() - np.array(predictions_train).flatten())**2)/N)
print("RMSE train: ", rmse_train)   # 13.8817814595

任何帮助深表感谢!谢谢!

1 回答

  • 3
    • RMSE与因变量具有相同的单位 . 这意味着如果您尝试预测的变量在0到100之间变化,则99的RMSE非常糟糕!如果说数据的RMSE为5,范围从0到100,则RMSE为5非常壮观 . 但是,如果RMSE为5,数据范围从1到10,那么你有问题!我希望这能够把重点放在家里 .

    • 由于您的火车和测试的RMSE类似,请拍拍自己!你真的做得很好!如果测试RMSE>训练,你会略微过度训练 .

    根据Umang在评论中所说的,您使用 model.coef_model.intercept_ 来打印模型计算出的最佳权重 .

相关问题