我在问维度等。我正在尝试用随机森林来实现这个惊人的工作 https://www.kaggle.com/allunia/how-to-attack-a-machine-learning-model/notebook
逻辑回归和随机森林都来自 sklearn 但是当我从随机森林模型中获得权重时,它的 (784,) 而逻辑回归返回 (10,784)
我的大多数问题主要是维度和 NaN、无穷大或对于攻击方法的 dtype 错误而言太大的值。使用逻辑回归的权重是 (10,784) 但使用随机森林 (784,) 可能会导致问题吗?或者您能建议对攻击方法进行一些修改吗?我为 NaN 值错误尝试了 Imputer,但它希望我重塑,所以我得到了这个。我尝试将 np.mat 应用于我得到的尺寸错误,但它们没有用。
def non_targeted_gradient(target, output, w):
target = target.reshape(1, -1)
output = output.reshape(1, -1)
w = w.reshape(1,-1)
target = imp.fit_transform(target)
output = imp.fit_transform(output)
w = imp.fit_transform(w)
ww = calc_output_weighted_weights(output, w)
for k in range(len(target)):
if k == 0:
gradient = np.mat((1-target[k])) * np.mat((w[k]-ww))
else:
gradient += np.mat((1-target[k])) * np.mat((w[k]-ww))
return gradient
我可能做错了很多事情,但TL;DR是我试图在上面的链接中应用随机森林而不是逻辑回归。
编辑:
我为 randomforestclassifier 添加了一个包装器:
class RandomForestWrapper(RandomForestClassifier):
def fit(self, *args, **kwargs):
super(RandomForestClassifierWithCoef, self).fit(*args, **kwargs)
self.coef_ = self.feature_importances_