我在示例乳腺癌数据集上训练了一个基本的 FFNN。对于结果,该precision_recall_curve函数提供了 416 个不同阈值的数据点。我的数据包含 569 个独特的预测值,据我了解 Precision Recall Curve 我可以应用 568 个不同的阈值并检查结果 Precision 和 Recall。
但是我该怎么做呢?有没有办法设置要测试的阈值数量sklearn?或者至少解释一下如何sklearn选择这些阈值?
我的意思是 417 应该足够了,即使对于更大的数据集,我只是好奇它们是如何被选中的。
# necessary packages
from sklearn.datasets import load_breast_cancer
import pandas as pd
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Dropout
# load data
sk_data = load_breast_cancer(return_X_y=False)
# safe data in pandas
data = sk_data['data']
target = sk_data['target']
target_names = sk_data['target_names']
feature_names = sk_data['feature_names']
data = pd.DataFrame(data=data, columns=feature_names)
# …Run Code Online (Sandbox Code Playgroud) 我正在使用一个名为的包shap,它具有集成的绘图功能。不过我想调整一些东西,比如标签、图例、颜色、大小等。
显然是由于开发人员可以通过使用 plt.gcf() 实现这一点。
我这样称呼该图,这将给出一个图形对象,但我不确定如何使用它:
fig = shap.summary_plot(shap_values_DT, data_train,color=plt.get_cmap("tab10"), show=False)
ax = plt.subplot()
Run Code Online (Sandbox Code Playgroud)
更新/解决方案 最后,我通过执行以下操作将所有内容调整为我想要的:
shap.summary_plot(shap_values_DT, data_train, color=plt.get_cmap("tab10"), show=False)
fig = plt.gcf()
fig.set_figheight(12)
fig.set_figwidth(14)
ax = plt.gca()
ax.set_xlabel(r'durchschnittliche SHAP Werte $\vert\sigma_{ij}\vert$', fontsize=16)
ax.set_ylabel('Inputparameter', fontsize=16)
ylabels = string_latexer([tick.get_text() for tick in ax.get_yticklabels()])
ax.set_yticklabels(ylabels)
leg = ax.legend()
for l in leg.get_texts(): l.set_text(l.get_text().replace('Class', 'Klasse'))
plt.show()
Run Code Online (Sandbox Code Playgroud)
我目前正在使用rmarkdown编写报告,因此我想在ar代码块中创建部分.我发现在cat()和results ="asis"的帮助下这是可能的.我的解决方案的问题是,我的R代码结果和代码没有像往常一样正确显示.
例如
---
title: "test"
output: pdf_document
---
```{r, results='asis'}
for (i in 1:10) {
cat("\\section{Part:", i, "}")
summary(X)
$\alpha = `r X[1,i]`$
}
```
Run Code Online (Sandbox Code Playgroud)
几乎可以解决问题,但这里仍有两个问题:
有人知道某些问题的解决方案,还是有一个解决方法来在循环中创建部分并在本节中包含R代码,R输出和LaTeX公式?或者至少其中一个是这样的?
我非常感谢各种建议
我正在 PyTorch 中实现一个简单的前馈神经 newtork。但是我想知道是否有更好的方法来向网络添加灵活的层数?也许通过在循环中命名它们,但我听说那是不可能的?
目前我正在这样做
import torch
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
def __init__(self, input_dim, output_dim, hidden_dim):
super(Net, self).__init__()
self.input_dim = input_dim
self.output_dim = output_dim
self.hidden_dim = hidden_dim
self.layer_dim = len(hidden_dim)
self.fc1 = nn.Linear(self.input_dim, self.hidden_dim[0])
i = 1
if self.layer_dim > i:
self.fc2 = nn.Linear(self.hidden_dim[i-1], self.hidden_dim[i])
i += 1
if self.layer_dim > i:
self.fc3 = nn.Linear(self.hidden_dim[i-1], self.hidden_dim[i])
i += 1
if self.layer_dim > i:
self.fc4 = nn.Linear(self.hidden_dim[i-1], self.hidden_dim[i])
i += 1
if self.layer_dim > i: …Run Code Online (Sandbox Code Playgroud) 在寻找在 PyTorch 模型中实现 L1 正则化的方法时,我遇到了这个问题,现在已经有 2 年历史了,所以我想知道这个主题是否有任何新内容?
我还发现了这种处理缺少的 l1 函数的最新方法。但是我不明白如何将它用于基本的神经网络,如下所示。
class FFNNModel(nn.Module):
def __init__(self, input_dim, output_dim, hidden_dim, dropout_rate):
super(FFNNModel, self).__init__()
self.input_dim = input_dim
self.output_dim = output_dim
self.hidden_dim = hidden_dim
self.dropout_rate = dropout_rate
self.drop_layer = nn.Dropout(p=self.dropout_rate)
self.fully = nn.ModuleList()
current_dim = input_dim
for h_dim in hidden_dim:
self.fully.append(nn.Linear(current_dim, h_dim))
current_dim = h_dim
self.fully.append(nn.Linear(current_dim, output_dim))
def forward(self, x):
for layer in self.fully[:-1]:
x = self.drop_layer(F.relu(layer(x)))
x = F.softmax(self.fully[-1](x), dim=0)
return x
Run Code Online (Sandbox Code Playgroud)
我希望在训练前简单地把它放在一边:
model = FFNNModel(30,5,[100,200,300,100],0.2)
regularizer = …Run Code Online (Sandbox Code Playgroud) 我目前正在使用 rmarkdown 编写报告,因此我想在 ar 代码块中创建部分。我发现在cat()和results="asis"的帮助下这是可能的。我对这个解决方案的问题是,我的 R 代码结果和代码没有像往常一样正确显示。
例如
---
title: "test"
output: pdf_document
---
```{r, results='asis'}
for (i in 1:10) {
cat("\\section{Part:", i, "}")
print(summary(lm(data=X, X1~X2))
$\alpha = `r X[1,i]`$
}
```
Run Code Online (Sandbox Code Playgroud)
几乎可以解决问题,但这里仍然存在两个问题:
有人知道对此的解决方案,或者甚至有一种解决方法可以在循环中创建部分并在本部分中包含 R 代码、R 输出和 LaTeX 公式?
我非常感谢各种建议:)
我知道当用作损失函数时,不需要nn.Softmax()在神经网络的输出层中使用函数。nn.CrossEntropyLoss
但是我需要这样做,有没有办法抑制 softmax 的实现使用nn.CrossEntropyLoss,而是nn.Softmax()在神经网络本身的输出层上使用?
动机:我使用shap包来分析之后的特征影响,我只能将我训练过的模型作为输入。然而,输出没有任何意义,因为我正在查看未绑定的值而不是概率。
示例:我想要的不是 -69.36 作为模型一类的输出值,而是 0 到 1 之间的值,所有类的总和为 1。由于事后我无法更改它,因此输出在训练期间就必须是这样的。
关于芯片shap封装的论文给出了(4)中的 Shapley 值和(8)中显然的 SHAP 值的公式
我仍然不明白 Shapley 和 SHAP 值之间的区别。据我了解,对于 Shapley,我需要在每个可能的参数子集上重新训练我的模型,而对于 SHAP,我只是使用在所有参数上训练的基本模型。是这样吗?所以SHAP在计算上更容易?
python ×4
pytorch ×3
knitr ×2
pdf ×2
r ×2
r-markdown ×2
shap ×2
latex ×1
matplotlib ×1
plot ×1
precision ×1
scikit-learn ×1
softmax ×1
torch ×1