如何测试线性回归是不是适合预测 [关闭]

Posted

技术标签:

【中文标题】如何测试线性回归是不是适合预测 [关闭]【英文标题】:How to test linear regression is suitable for prediction [closed]如何测试线性回归是否适合预测 [关闭] 【发布时间】:2022-01-21 04:58:17 【问题描述】:

我是 python 新手。我有一个复杂的数据集,线性回归不适合我的“预测”模型,但我发现高 R 平方值 0.658 它接近 1。我在我的代码中错过了为什么它很高,我的程序没有给出错误。我发现我的测试数据集的 R 平方值也没有训练。

R-squared:                       0.658
Model:                            OLS   
Adj. R-squared:                  0.647

#####我有数字和分类输入。我应用了一种热编码

我以为我那里有问题。应用线性回归。我计算 R 平方值以了解线性回归如何适合我的模型

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(x_train, y_train) 
regr_btu = linear_model.LinearRegression()
   
regr_btu.fit (x_train, y_train)
pred_out_btu = regr_btu.predict (x_test)

pred_out_btu_train = regr_btu.predict (x_train)  
rmse_test = sqrt(mean_squared_error(pred_out_btu,y_test))
rmse_train = sqrt(mean_squared_error(pred_out_btu_train,y_train))
print('train: ' + str(rmse_train))
print('test: ' + str(rmse_test))
print('mean: '+ str(y.mean()))
print('percentage mean: ' + str(rmse_test/(y.mean())*100) + '%')  

B = x[['education','rent','car_price','apple','banana','orange']]
C = y['salary']
model = sm.OLS(C,B).fit() 
predictions = model.predict(B) 
print_model = model.summary()
print(print_model)

【问题讨论】:

这是一个关于局部变量与全局变量的好教程:geeksforgeeks.org/global-local-variables-python 我有一个数据集,我在这段代码之前定义了 X 和 Y。 请附上minimal reproducible example 和错误消息。我们如何知道您在问题中未包含的代码中做了什么? 我更新了我的问题。感谢您的反馈 我的输入有不同的范围,这就是为什么我要对其进行归一化,x, y 是序列 X 和 Y 的归一化状态。我有分类数据,所以我应用了一种热编码 @MichaelSzczesny跨度> 【参考方案1】:

    您不需要在一次热编码之前对变量进行标签编码。您可以直接对其进行一次热编码。

    您收到错误 x is not defined 的原因是因为您从第二个函数返回 x 和 y 并在第三个函数中直接使用它们。您必须先将它们存储在变量中,然后才能使用它们。

    第三个函数有错别字。应该是return 而不是retunr

下面我已经纠正了错误,现在应该可以工作了。

def one_hot_encoding():
            
    data=['apple','banana','orange']
   
    onehot_data = OneHotEncoder(sparse=False)
    onehot_data = onehot_data.fit_transform(data)
    print("Categorical data encoded into integer values....\n")
    print(onehot_data)
one_hot_encoding()

def normalize_data(x,y):
              
    scaler = MinMaxScaler()
    x=pd.DataFrame(scaler.fit_transform(X),columns=X.columns, index=X.index) 
    y=pd.DataFrame(scaler.fit_transform(Y),columns=Y.columns, index=Y.index) 
      
    return x,y
x1, y1 = normalize_data(x,y)

def split_data():

    normalize_data()
    x_train, x_test, y_train, y_test = train_test_split(x1, y1, train_size=0.85)
    
    print(x_train.shape, x_test.shape, y_train.shape, y_test.shape) 
             
split_data()

【讨论】:

实际上,当我不使用标签编码器时,它会给我一个错误。 如果您的数据具有单个特征,则使用 array.reshape(-1, 1) 重塑您的数据,如果数据包含单个样本,则使用 array.reshape(1, -1)。 我修复了问题,而不是使用函数。【参考方案2】:

会帮助看到更多关于这个错误的细节。某处存在语法错误。确保您的参考资料正确。例如。小写 x 与大写 X 不同。如果您正在调用 normalise_data 函数,请确保根据定义为其提供参数。 如果您将 x, y 作为函数的参数,当您尝试在函数内重新定义 x 和 y 时,它可能会引发错误。 还要记住范围。这也可能引发未定义的错误。

【讨论】:

我更新了我的问题。感谢您的反馈

以上是关于如何测试线性回归是不是适合预测 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用线性回归模型进行预测?

azure Machine learing studio 使用示例之 - 使用线性回归算法完成预测评估

机器学习-简单线性回归

5.线性回归算法

线性回归完全关闭

使用 Sklearn 的简单线性回归。适合()不工作