我想知道是否有人可以帮助我解决我面临的这个问题。
首先:我正在使用 Visual Studio Code。Pandas、matplotlib(可能甚至不需要)、statsmodels、numpy 和 sklearn 都与代码一起安装pip install *
,其中 * 是各种库之一。
我有一个 .csv 文件,我从中获取一个 X 矩阵和一个 Y 向量。我正在使用反向消除算法来评估在我的变量(X 的每一列)和 Y 中的结果之间存在的多元线性回归。这是我的代码:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import statsmodels.regression.linear_model as sm
from sklearn import linear_model
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
regr = linear_model.LinearRegression()
dataset = pd.read_csv('file.CSV', sep=";")
features = list(dataset.iloc[:, 0:-1].columns)
features= ["const"]+features
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:,-1]
X = np.append(arr = np.ones((X.shape[0], 1)), values = X, axis = 1)
def backwardElimination(x, y):
numVars = len(x[0])
temp = np.zeros((len(x[0]),len(x[1]))).astype(int)
for i in range(0, numVars):
regressor_OLS = sm.OLS(y, x).fit()
maxVar = max(regressor_OLS.pvalues).astype(float)
adjR_before = regressor_OLS.rsquared_adj.astype(float)
if maxVar > SL:
for j in range(0, numVars - i):
if (regressor_OLS.pvalues[j].astype(float) == maxVar):
temp[:,j] = x[:, j]
x = np.delete(x, j, 1)
tmp_regressor = sm.OLS(y, x).fit()
adjR_after = tmp_regressor.rsquared_adj.astype(float)
if (adjR_before >= adjR_after):
x_rollback = np.hstack((x, temp[:,[0,j]]))
x_rollback = np.delete(x_rollback, j, 1)
print (regressor_OLS.summary())
return x_rollback
else:
continue
regressor_OLS.summary()
return x
SL = 0.005
X_opt = X
X_Modeled = backwardElimination(X_opt, SL)
我所知道的是,当我使用 print(X_opt)
, print(y)
并且 print(features)
一切正常(所有值都正确加载和可视化)。
但是当我运行我的代码时,会弹出这个错误(带 * 表示文件位置根):
File "*\multiple_linear_regression.py", line 76, in <module>
X_Modeled = backwardElimination(X_opt, SL)
File "*\multiple_linear_regression.py", line 49, in backwardElimination
regressor_OLS = sm.OLS(y, x).fit()
File "*\linear_model.py", line 892, in __init__
super(OLS, self).__init__(endog, exog, missing=missing,
File "*\Programs\Python\Python39\lib\site-packages\statsmodels\regression\linear_model.py", line 713, in __init__
weights = np.repeat(weights, len(endog))
TypeError: object of type 'float' has no len()
有人能帮助我吗?我在任何地方都找不到解决方案。
谢谢!