import statsmodels.api as sm
import math
import numpy as np
import pylab as pl
idx = np.where(cols=="velocity_bin9")
x = X[:,idx]
y_sv = shap_values[:,idx]
lowess = sm.nonparametric.lowess(y_sv, x, frac=.3,it=3, delta=0.0)
_,ax = plt.subplots()
ax.plot(*list(zip(*lowess)), color="red", )
shap.dependence_plot('velocity_bin9', SHAP, Xdata[cols], interaction_index=None,ax=ax, show=False)
###### 运行结果及报错内容 :
ValueError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_31660/1709026442.py in <module>
7 x = X[:,idx]
8 y_sv = shap_values[:,idx]
----> 9 lowess = sm.nonparametric.lowess(y_sv, x, frac=.3,it=3, delta=0.0)
10 _,ax = plt.subplots()
11 ax.plot(*list(zip(*lowess)), color="red", )
D:\anaconda3\lib\site-packages\statsmodels\nonparametric\smoothers_lowess.py in lowess(endog, exog, frac, it, delta, xvals, is_sorted, missing, return_sorted)
145 # same length.
146 if exog.ndim != 1:
--> 147 raise ValueError('exog must be a vector')
148 if endog.ndim != 1:
149 raise ValueError('endog must be a vector')
ValueError: exog must be a vector
请指教!!谢谢!!
(1)建议你查看一下 y_sv, x 的 type 和 shape,从程序代码无法判断 y_sv, x 的具体数据结构
(2)另一个办法,先自己生成一个 y, x,跑一下程序,用于检查程序是否正确
import numpy as np
import pylab as plt
import statsmodels.api as sm
x = np.linspace(0,2*np.pi,100)
y = np.sin(x) + np.random.random(100) * 0.2
lowess = sm.nonparametric.lowess(y, x, frac=0.1)
plt.plot(x, y, '+')
plt.plot(lowess[:, 0], lowess[:, 1])
plt.show()