Python实现后向消除算法时出现'type float has no len()'报错如何解决
问题根因
调用backwardElimination函数时参数顺序传错:
函数定义的参数顺序为def backwardElimination(x, y),第一个入参是自变量矩阵,第二个入参是因变量向量。但实际调用时写为X_Modeled = backwardElimination(X_opt, SL),第二个参数传入了值为0.005的浮点数SL,而非因变量y。
statsmodels的OLS构造时会对因变量取长度计算权重,传入浮点数自然触发object of type 'float' has no len()报错。
修复方案
修改函数调用的参数即可:
X_Modeled = backwardElimination(X_opt, y)
可选优化项
- 函数内部直接引用全局变量
SL易引发异常,建议调整为函数参数传入,修改函数定义为:
def backwardElimination(x, y, sl=0.005):
调用时传入对应参数即可:
X_Modeled = backwardElimination(X_opt, y, SL)
- 原代码中
temp = np.zeros((len(x[0]),len(x[1]))).astype(int)的初始化逻辑存在维度隐患,样本数小于特征数时会触发错误,建议修改为:
temp = np.zeros(x.shape).astype(int)
内容的提问来源于stack exchange,提问作者Angelj107
相关产品推荐
相关产品推荐

