Numpy: dsTypeError: 输入类型不支持 ufunc 'isfinite',并且无法根据转换规则 ''safe'' 将输入安全地强制转换为任何受支持的类型

创建于 2019-12-27  ·  6评论  ·  资料来源: numpy/numpy

我正在 Python 上运行一个程序,并尝试从数组生成统计输出。
代码行:
regressor_OLS = sm.OLS(y,X_opt).fit()
给出了一个精心设计的错误。

这是代码

多元线性回归

导入库

将 numpy 导入为 np
导入 matplotlib.pyplot 作为 plt
将熊猫导入为 pd

导入数据集

数据集 = pd.read_csv('50_Startups.csv')

获取自变量

X = dataset.iloc[:,:-1].values
y = dataset.iloc[:,4].values
打印(数据集)

编码分类数据

编码自变量

从 sklearn.preprocessing 导入 OneHotEncoder
从 sklearn.compose 导入 ColumnTransformer
ct = ColumnTransformer([("Country", OneHotEncoder(), [3])], 余数 = 'passthrough')
X = ct.fit_transform(X)

避免虚拟变量陷阱

X = X[:, 1:]

将数据集拆分为训练集和测试集

从 sklearn.model_selection 导入 train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state =0)

将多元线性回归模型拟合到训练集

从 sklearn.linear_model 导入 LinearRegression
回归器 = LinearRegression()
regressor.fit(X_train, y_train)

预测测试集结果

y_pred = regressor.predict(X_test)

使用后向消除法构建最优模型

将 statsmodels.api 导入为 sm

添加 1 列

X= np.append(arr = np.ones((50,1)).astype(int), values = X,axis =1)
X_opt = X[:,[0,1,2,3,4,5]]

多元线性回归模型 --- OLS

regressor_OLS = sm.OLS(y,X_opt).fit()
regressor_OLS.summary()

重现代码示例:

```蟒蛇
将 numpy 导入为 np

错误信息:

输入类型不支持 ufunc 'isfinite',并且无法根据转换规则 ''safe'' 将输入安全地强制转换为任何受支持的类型

文件“C:UsersmoranaDocumentsAIUDEMYMachine Learning A-ZPart 2 - RegressionSection 5 - Multiple Linear Regressionmultiple linear regression.py”,第 46 行,在
regressor_OLS = sm.OLS(y,X_opt).fit()

文件“C:UsersmoranaAppDataLocalContinuumanaconda3libsite-packagesstatsmodelsregressionlinear_model.py”,第 838 行,在 __init__ 中
hasconst=hasconst, **kwargs)

文件“C:UsersmoranaAppDataLocalContinuumanaconda3libsite-packagesstatsmodelsregressionlinear_model.py”,第684行,在__init__
权重=权重,hasconst=hasconst,**kwargs)

文件“C:UsersmoranaAppDataLocalContinuumanaconda3libsite-packagesstatsmodelsregressionlinear_model.py”,第 196 行,在 __init__ 中
super(RegressionModel, self).__init__(endog, exog, **kwargs)

文件“C:UsersmoranaAppDataLocalContinuumanaconda3libsite-packagesstatsmodelsbasemodel.py”,第 216 行,在 __init__ 中
super(LikelihoodModel, self).__init__(endog, exog, **kwargs)

文件“C:UsersmoranaAppDataLocalContinuumanaconda3libsite-packagesstatsmodelsbasemodel.py”,第 68 行,在 __init__ 中
**夸格)

文件“C:UsersmoranaAppDataLocalContinuumanaconda3libsite-packagesstatsmodelsbasemodel.py”,第 91 行,在 _handle_data 中
数据 = 句柄数据(endog,exog,缺失,hasconst,**kwargs)

文件“C:UsersmoranaAppDataLocalContinuumanaconda3libsite-packagesstatsmodelsbasedata.py”,第 635 行,在 handle_data
**夸格)

文件“C:UsersmoranaAppDataLocalContinuumanaconda3libsite-packagesstatsmodelsbasedata.py”,第 80 行,在 __init__ 中
self._handle_constant(hasconst)

_handle_constant 中的文件“C:UsersmoranaAppDataLocalContinuumanaconda3libsite-packagesstatsmodelsbasedata.py”,第 125 行
如果不是 np.isfinite(ptp_).all():

类型错误:输入类型不支持 ufunc 'isfinite',并且无法根据转换规则 ''safe'' 将输入安全地强制转换为任何受支持的类型

Numpy/Python 版本信息:

间谍 4.0.0
1.17.4 3.7.3(默认,2019 年 4 月 24 日,15:29:51)[MSC v.1915 64 位 (AMD64)]

最有用的评论

嘿!
您的 X_opt 数组具有 object 的 dtype,这可能会导致错误。 尝试将其更改为浮动。 例如你可以使用这个:
X= np.append(arr = np.ones((50,1)).astype(int), values = X,axis =1)
X_opt = X[:,[0,1,2,3,4,5]]
X_opt = np.array(X_opt, dtype=float)

玩得开心:D

所有6条评论

嘿!
您的 X_opt 数组具有 object 的 dtype,这可能会导致错误。 尝试将其更改为浮动。 例如你可以使用这个:
X= np.append(arr = np.ones((50,1)).astype(int), values = X,axis =1)
X_opt = X[:,[0,1,2,3,4,5]]
X_opt = np.array(X_opt, dtype=float)

玩得开心:D

感谢@filip-stolinski 的解决方案

@filip-stolinski 非常感谢您的解决方案。 它绝对有效

关闭。 如果需要,请重新打开或打开一个新问题。

谢谢@filip-stolinski

谢谢

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

ghost picture ghost  ·  4评论

manuels picture manuels  ·  3评论

inducer picture inducer  ·  3评论

Kreol64 picture Kreol64  ·  3评论

qualiaa picture qualiaa  ·  3评论