Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow 从机器学习看混淆矩阵的价值_Tensorflow_Machine Learning_Keras - Fatal编程技术网

Tensorflow 从机器学习看混淆矩阵的价值

Tensorflow 从机器学习看混淆矩阵的价值,tensorflow,machine-learning,keras,Tensorflow,Machine Learning,Keras,我使用confusion_matrix()来评估经过训练以检测DDoS攻击的模型。 混淆矩阵的结果与我的测试数据集如下所示。 我认为,如果False neg值正确检测到非DDoS的攻击,则该值不应为0 下面是我实现ML模型的代码。你能给我一个建议,让模型正确地检查良性攻击吗 model.add(Dense(units=64, activation='relu', input_dim=7)) # Input Layer model.add(Dropout(0.5)) model.add(De

我使用confusion_matrix()来评估经过训练以检测DDoS攻击的模型。 混淆矩阵的结果与我的测试数据集如下所示。 我认为,如果False neg值正确检测到非DDoS的攻击,则该值不应为0

下面是我实现ML模型的代码。你能给我一个建议,让模型正确地检查良性攻击吗

model.add(Dense(units=64, activation='relu', input_dim=7))  # Input Layer
model.add(Dropout(0.5))

model.add(Dense(units=128, activation='relu'))   # hidden Layer
model.add(Dropout(0.2))

model.add(Dense(units=64, activation='relu'))   # hidden Layer
model.add(Dropout(0.2))

model.add(Dense(units=1, activation='sigmoid'))     # Last Layer for output


model.compile(loss='binary_crossentropy',
              optimizer=Adam(learning_rate=0.0001),
              metrics=['accuracy'])

CSV_FILE = "ddos.csv"
df = pd.read_csv(CSV_FILE)
df.loc[(df.Label == "ddos"), "Label"] = 1.0
df.loc[(df.Label == "Benign"), "Label"] = 0.0

# Data set
x_train = np.array(df[["Flow Duration", "Tot Fwd Pkts", "TotLen Fwd Pkts",
                       "Flow IAT Mean","Flow IAT Std" ,"Flow IAT Max", "Flow IAT Min"]])

x_train = x_train.astype(float)
normalized_x = preprocessing.normalize(x_train)

y_train = np.array(df[["Label"]])
y_train = np.array(y_train, dtype = 'float')
normalized_y = preprocessing.normalize(y_train)

hist = model.fit(normalized_x, normalized_y, epochs=3, batch_size=128)

y_pred = model.predict(x_train)
y_pred = preprocessing.normalize(y_pred)

cf_matrix = confusion_matrix(y_test, np.rint(y_pred))

请注意,我的数据集不是不平衡的,即它正好有50%的DDoS和50%的正常流量信息。

尽管这些问题实际上无法得到任何程度的肯定回答,但您的代码确实存在一些严重问题

首先,你应该不要规范你的标签
y_train
;这是一个二进制分类问题,标签应该精确地
0/1
删除以下行:

normalized_y = preprocessing.normalize(y_train)
y_pred = preprocessing.normalize(y_pred)
将标签更改为整数(非浮点数),即:

您的模型适合:

hist = model.fit(normalized_x, y_train, epochs=3, batch_size=128)
第二次,虽然您使用
标准化的x
进行训练,但随后您使用
x\u训练
请求预测,这同样是错误的;你的预测应该是:

y_pred = model.predict(normalized_x)
第三,默认情况下不应使用辍学,但前提是我们有过度拟合的迹象——但要做到这一点,我们的模型首先必须能够开始学习一些东西,这里的情况并非如此注释掉所有退出层,只有在过度拟合的情况下才开始将它们放回模型中

最后,您应该从Adam的默认设置开始,这通常(而且据说)是开箱即用的,即:

optimizer=Adam()

当然,你应该考虑运行这个模型多于<代码> EPOCHS=3 < /代码> ./P>

optimizer=Adam()