首页 > 解决方案 > 在 Python 中尝试 BackwardElimination 算法时出现“'float' 类型的错误没有 len()”

问题描述

我想知道是否有人可以帮助我解决我面临的这个问题。

首先:我正在使用 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()

有人能帮助我吗?我在任何地方都找不到解决方案。

谢谢!

标签: pythonlinear-regressionolsmultiplelinearregression

解决方案


推荐阅读