Python 多元线性回归。系数don';不匹配

Python 多元线性回归。系数don';不匹配,python,numpy,scipy,linear-regression,sklearn-pandas,Python,Numpy,Scipy,Linear Regression,Sklearn Pandas,我有一个小数据集,我想对它进行多元线性回归 首先,我删除了deliveries列,因为它与miles高度相关。虽然gasprice应该被删除,但我删除它并不是为了执行多重线性回归,而不是简单的线性回归。 最后,我删除了异常值,并执行了以下操作: 代码到此结束。每次打印出来时,我都会发现不同的系数。我做错了什么,有哪一个是正确的?我看到您在尝试3种不同的方法,所以让我总结一下: sklearn.linear\u model.LinearRegression()带有训练测试分割(X,Y,测试大小=

我有一个小数据集,我想对它进行多元线性回归

首先,我删除了deliveries列,因为它与miles高度相关。虽然gasprice应该被删除,但我删除它并不是为了执行多重线性回归,而不是简单的线性回归。 最后,我删除了异常值,并执行了以下操作:


代码到此结束。每次打印出来时,我都会发现不同的系数。我做错了什么,有哪一个是正确的?

我看到您在尝试3种不同的方法,所以让我总结一下:

  • sklearn.linear\u model.LinearRegression()
    带有
    训练测试分割(X,Y,测试大小=0.2,随机状态=1)
    ,因此仅使用80%的数据(但由于修复了随机状态,每次运行分割时都应该相同)
  • statsmodels.api.OLS
    和完整的数据集(您通过的是
    X2
    Y
    ,这两个数据集未被分解为列车测试)
  • sklearn.linear\u model.LinearRegression()
    使用完整的数据集,如n2中所示
  • 我试图用
    iris
    数据集进行复制,对于案例2和案例3(根据相同的精确数据进行训练),我得到了相同的结果,但对于案例1,系数略有不同


    为了评估其中任何一项是否“正确”,您需要根据看不见的数据评估模型,并查看调整后的R^2分数等(因此您需要保持(测试)集)。如果要进一步改进模型,可以尝试更好地理解线性模型中特征的交互作用。Statsmodels有一个简洁的“类似R”的公式来指定您的模型:

    我看到您在这里尝试了3种不同的方法,所以让我总结一下:

  • sklearn.linear\u model.LinearRegression()
    带有
    训练测试分割(X,Y,测试大小=0.2,随机状态=1)
    ,因此仅使用80%的数据(但由于修复了随机状态,每次运行分割时都应该相同)
  • statsmodels.api.OLS
    和完整的数据集(您通过的是
    X2
    Y
    ,这两个数据集未被分解为列车测试)
  • sklearn.linear\u model.LinearRegression()
    使用完整的数据集,如n2中所示
  • 我试图用
    iris
    数据集进行复制,对于案例2和案例3(根据相同的精确数据进行训练),我得到了相同的结果,但对于案例1,系数略有不同


    为了评估其中任何一项是否“正确”,您需要根据看不见的数据评估模型,并查看调整后的R^2分数等(因此您需要保持(测试)集)。如果要进一步改进模型,可以尝试更好地理解线性模型中特征的交互作用。Statsmodels有一个简洁的“类似R”的公式来指定您的模型:

    训练/测试分割是随机的,所以您希望得到稍微不同的系数。差异大吗?首先,我得到这个:英里的系数是-1.4845301880029536e-17加斯普里斯的系数是-4.0497050150261694e-16,后来这个:英里:0加斯普里斯:1.554,最后我得到这个:0.04137042和-0.21912293总是提供一个,带有代码、数据、错误、当前输出和预期输出,作为文本,而不是屏幕截图,因为。这个问题很可能会被否决并结束。您不希望获得帮助,因为没有人想重新键入您的数据或代码,而且屏幕截图通常难以辨认。提问并添加文本。我不希望你重写数据。我正在等待解释,它将告诉我sm.OLS和linear_model.LinearRegression()返回不同系数的原因。所以答案不应该取决于我使用的数据。谢谢你的提示。嘿,我们需要以某种方式在我们的机器上输入数据来重现你的错误,并确保解决方案是正确的。当然,您可以提供数据而不是图像?列车/测试分割是随机的,因此您预计会得到稍微不同的系数。差异大吗?首先,我得到这个:英里的系数是-1.4845301880029536e-17加斯普里斯的系数是-4.0497050150261694e-16,后来这个:英里:0加斯普里斯:1.554,最后我得到这个:0.04137042和-0.21912293总是提供一个,带有代码、数据、错误、当前输出和预期输出,作为文本,而不是屏幕截图,因为。这个问题很可能会被否决并结束。您不希望获得帮助,因为没有人想重新键入您的数据或代码,而且屏幕截图通常难以辨认。提问并添加文本。我不希望你重写数据。我正在等待解释,它将告诉我sm.OLS和linear_model.LinearRegression()返回不同系数的原因。所以答案不应该取决于我使用的数据。谢谢你的提示。嘿,我们需要以某种方式在我们的机器上输入数据来重现你的错误,并确保解决方案是正确的。当然你可以提供数据而不是图像吗?
    import math
    import numpy as np
    import pandas as pd
    import seaborn as sns
    from scipy import stats
    import matplotlib.pyplot as plt
    
    import statsmodels.api as sm
    from statsmodels.stats import diagnostic as diag
    from statsmodels.stats.outliers_influence import variance_inflation_factor
    
    from sklearn.linear_model import LinearRegression
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import mean_squared_error, r2_score, mean_absolute_error
    from sklearn import linear_model
    
    %matplotlib inline
    
    X = dfafter
    Y = dfafter[['hours']]
    
    # Split X and y into X_
    X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.2, random_state=1)
    
    # create a Linear Regression model object
    regression_model = LinearRegression()
    
    # pass through the X_train & y_train data set
    regression_model.fit(X_train, y_train)
    y_predict = regression_model.predict(X_train) 
    
    
    #lets find out what are our coeffs of the multiple linear regression and olso find intercept
    intercept = regression_model.intercept_[0]
    coefficent = regression_model.coef_[0][0]
    
    print("The intercept for our model is {}".format(intercept))
    print('-'*100)
    
    # loop through the dictionary and print the data
    for coef in zip(X.columns, regression_model.coef_[0]):
    print("The Coefficient for {} is {}".format(coef[0],coef[1]))
    #Coeffs here don't match the ones that will appear later 
    
    #Rebuild the model using Statsmodel for easier analysis
    X2 = sm.add_constant(X)
    
    # create a OLS model
    model = sm.OLS(Y, X2)
    
    # fit the data
    est = model.fit()
    
    
    
    # calculate the mean squared error
    odel_mse = mean_squared_error(y_train, y_predict)
    
    # calculate the mean absolute error
    model_mae = mean_absolute_error(y_train, y_predict)
    
    # calulcate the root mean squared error
    model_rmse =  math.sqrt(model_mse)
    
    # display the output
    print("MSE {:.3}".format(model_mse))
    print("MAE {:.3}".format(model_mae))
    print("RMSE {:.3}".format(model_rmse))
    
    
    print(est.summary())
    #????????? something is wrong
    
    
    
    X = df[['miles', 'gasprice']]
    y = df['hours']
    
    regr = linear_model.LinearRegression()
    regr.fit(X, y)
    
    print(regr.coef_)