我在问维数等问题。我正在尝试用随机森林实现这一惊人的工作 https://www.kaggle.com/allunia/how-to-attack-a-machine-learning-model/notebook
逻辑回归和随机森林都来自sklearn,但是当我从随机森林模型获得权重时(784,)而逻辑回归返回(10,784)
我最大的问题主要是维度和NaN,无穷大或对于攻击方法的dtype错误而言值太大。使用逻辑回归的权重是(10,784),但使用Random Forest的权重(784,)可能是造成此问题的原因吗?还是可以建议对攻击方法进行一些修改?我尝试使用Imputer来解决NaN值错误,但它希望我重塑形状,所以我已经做到了。 我尝试将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 是我正在尝试在上面的链接中应用随机森林而不是Logistic回归。
编辑:
我为randomforestclassifier添加了一个包装器:
class RandomForestWrapper(RandomForestClassifier):
def fit(self, *args, **kwargs):
super(RandomForestClassifierWithCoef, self).fit(*args, **kwargs)
self.coef_ = self.feature_importances_