如何测试线性回归是不是适合预测 [关闭]
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 时,它可能会引发错误。 还要记住范围。这也可能引发未定义的错误。
【讨论】:
我更新了我的问题。感谢您的反馈以上是关于如何测试线性回归是不是适合预测 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章