我有兴趣使用引导方法计算特征权重的置信区间。
scipy.stats.bootstrap
能做到吗?将此分类任务作为示例(但回归任务的想法相同)。我们可以得到 coefficients
,它将返回特征权重向量。
import numpy as np
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
y = np.array([1, 1, 1, 2, 2, 2])
clf = LinearDiscriminantAnalysis()
clf.fit(X, y)
coefficients = clf.coef_
这个想法是从
X
和y
中抽取样本(带替换)n次,在这些批次上拟合分类器,获取系数,最后使用所有重采样试验的系数计算置信区间。
是的,从某种意义上说,
bootstrap
支持向量值statistic
。例如,这是有效的代码:
import numpy as np
from scipy import stats
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
y = np.array([1, 1, 1, 2, 2, 2])
def f(*XT):
X = np.asarray(XT).T
clf = LinearDiscriminantAnalysis()
clf.fit(X, y)
return clf.coef_
res = stats.bootstrap(X.T, statistic=f, paired=True)
LinearDiscriminantAnalysis
似乎在某些重新采样方面遇到问题,但您可以通过将 clf
行替换为 return X[:, 0].mean(), X[:, 1].var()
之类的内容(即第一个特征和方差的均值的自举置信区间)来看到代码是有效的同时具有第二个功能)。