如何在 Python 中使用 statsmodels.api.OLS
How to use statsmodels.api.OLS in Python
我已经开始学习机器学习,并且正在尝试实施线性回归反向消除。
这是代码:
import statsmodels.api as sm
x = sm.add_constant(x)
x_opt = x[:,[0,1,2,3,4,5]]
regressor_OLS = sm.OLS(endog=y,exog=x_opt)
这是错误:
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "C:\Users\ewasy\AppData\Local\Programs\Python\Python37\lib\site-packages\statsmodels\regression\linear_model.py", line 859, in __init__
hasconst=hasconst, **kwargs)
File "C:\Users\ewasy\AppData\Local\Programs\Python\Python37\lib\site-packages\statsmodels\regression\linear_model.py", line 702, in __init__
weights=weights, hasconst=hasconst, **kwargs)
File "C:\Users\ewasy\AppData\Local\Programs\Python\Python37\lib\site-packages\statsmodels\regression\linear_model.py", line 190, in __init__
super(RegressionModel, self).__init__(endog, exog, **kwargs)
File "C:\Users\ewasy\AppData\Local\Programs\Python\Python37\lib\site-packages\statsmodels\base\model.py", line 236, in __init__
super(LikelihoodModel, self).__init__(endog, exog, **kwargs)
File "C:\Users\ewasy\AppData\Local\Programs\Python\Python37\lib\site-packages\statsmodels\base\model.py", line 77, in __init__
**kwargs)
File "C:\Users\ewasy\AppData\Local\Programs\Python\Python37\lib\site-packages\statsmodels\base\model.py", line 100, in _handle_data
data = handle_data(endog, exog, missing, hasconst, **kwargs)
File "C:\Users\ewasy\AppData\Local\Programs\Python\Python37\lib\site-packages\statsmodels\base\data.py", line 672, in handle_data
**kwargs)
File "C:\Users\ewasy\AppData\Local\Programs\Python\Python37\lib\site-packages\statsmodels\base\data.py", line 87, in __init__
self._handle_constant(hasconst)
File "C:\Users\ewasy\AppData\Local\Programs\Python\Python37\lib\site-packages\statsmodels\base\data.py", line 132, in _handle_constant
if not np.isfinite(exog_max).all():
TypeError: ufunc 'isfinite' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
这是来自变量 x 的 2 行:
array([[1.0, 0.0, 1.0, 2.016411493158463, 0.560752914530775,2.153943088571744],
[1.0, 0.0, 0.0, 1.9558603364325031, 1.0828065830760816,1.9236003956421444]], dtype=object)
这是来自变量 y 的 2 行:
array([[2.01120333],[1.99942997]])
问题是在您的代码中 x
有 dtype=object
而不是 dtype=float
,即 x
不是数字变量,因此不能用作回归量。一旦 x
转换为 float
,您的代码就可以工作了。
import statsmodels.api as sm
def model(X,y):
X=sm.add_constant(X)
lm_model=sm.OLS(y,X).fit()
print(lm_model.summary())
return X
X_train1=model(X_train_rfe,y_train)
我已经开始学习机器学习,并且正在尝试实施线性回归反向消除。 这是代码:
import statsmodels.api as sm
x = sm.add_constant(x)
x_opt = x[:,[0,1,2,3,4,5]]
regressor_OLS = sm.OLS(endog=y,exog=x_opt)
这是错误:
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "C:\Users\ewasy\AppData\Local\Programs\Python\Python37\lib\site-packages\statsmodels\regression\linear_model.py", line 859, in __init__
hasconst=hasconst, **kwargs)
File "C:\Users\ewasy\AppData\Local\Programs\Python\Python37\lib\site-packages\statsmodels\regression\linear_model.py", line 702, in __init__
weights=weights, hasconst=hasconst, **kwargs)
File "C:\Users\ewasy\AppData\Local\Programs\Python\Python37\lib\site-packages\statsmodels\regression\linear_model.py", line 190, in __init__
super(RegressionModel, self).__init__(endog, exog, **kwargs)
File "C:\Users\ewasy\AppData\Local\Programs\Python\Python37\lib\site-packages\statsmodels\base\model.py", line 236, in __init__
super(LikelihoodModel, self).__init__(endog, exog, **kwargs)
File "C:\Users\ewasy\AppData\Local\Programs\Python\Python37\lib\site-packages\statsmodels\base\model.py", line 77, in __init__
**kwargs)
File "C:\Users\ewasy\AppData\Local\Programs\Python\Python37\lib\site-packages\statsmodels\base\model.py", line 100, in _handle_data
data = handle_data(endog, exog, missing, hasconst, **kwargs)
File "C:\Users\ewasy\AppData\Local\Programs\Python\Python37\lib\site-packages\statsmodels\base\data.py", line 672, in handle_data
**kwargs)
File "C:\Users\ewasy\AppData\Local\Programs\Python\Python37\lib\site-packages\statsmodels\base\data.py", line 87, in __init__
self._handle_constant(hasconst)
File "C:\Users\ewasy\AppData\Local\Programs\Python\Python37\lib\site-packages\statsmodels\base\data.py", line 132, in _handle_constant
if not np.isfinite(exog_max).all():
TypeError: ufunc 'isfinite' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
这是来自变量 x 的 2 行:
array([[1.0, 0.0, 1.0, 2.016411493158463, 0.560752914530775,2.153943088571744],
[1.0, 0.0, 0.0, 1.9558603364325031, 1.0828065830760816,1.9236003956421444]], dtype=object)
这是来自变量 y 的 2 行:
array([[2.01120333],[1.99942997]])
问题是在您的代码中 x
有 dtype=object
而不是 dtype=float
,即 x
不是数字变量,因此不能用作回归量。一旦 x
转换为 float
,您的代码就可以工作了。
import statsmodels.api as sm
def model(X,y):
X=sm.add_constant(X)
lm_model=sm.OLS(y,X).fit()
print(lm_model.summary())
return X
X_train1=model(X_train_rfe,y_train)