在tensorflow环境上用Python设计一个标准的LSTM模型,实现对NSL-KDD数据集进行网络入侵检测分类的代码
时间: 2023-06-12 22:06:27 浏览: 68
好的,以下是对NSL-KDD数据集进行网络入侵检测分类的代码:
首先,需要先加载和预处理数据集,这里使用TensorFlow的Keras API:
```python
import pandas as pd
import numpy as np
import tensorflow as tf
from tensorflow import keras
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder, StandardScaler
# 加载数据集
df = pd.read_csv('KDDTrain+.txt', header=None)
# 对标签进行编码
labelencoder = LabelEncoder()
df[41] = labelencoder.fit_transform(df[41])
# 将数据集分成特征和标签
X = df.iloc[:, :-1].values
y = df.iloc[:, -1].values
# 对特征进行标准化
sc = StandardScaler()
X = sc.fit_transform(X)
# 将标签进行one-hot编码
y = keras.utils.to_categorical(y)
# 将数据集分成训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
```
接下来,构建LSTM模型:
```python
# 构建LSTM模型
model = keras.Sequential([
keras.layers.LSTM(units=128, input_shape=(X_train.shape[1], 1)),
keras.layers.Dropout(rate=0.2),
keras.layers.Dense(units=128, activation='relu'),
keras.layers.Dropout(rate=0.2),
keras.layers.Dense(units=y_train.shape[1], activation='softmax')
])
# 编译模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
```
然后,训练和评估模型:
```python
# 将训练集和测试集reshape为3D张量
X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))
X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))
# 训练模型
history = model.fit(X_train, y_train, epochs=10, batch_size=128, validation_data=(X_test, y_test))
# 评估模型
scores = model.evaluate(X_test, y_test, verbose=0)
print("Accuracy: %.2f%%" % (scores[1]*100))
```
完整代码如下:
```python
import pandas as pd
import numpy as np
import tensorflow as tf
from tensorflow import keras
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder, StandardScaler
# 加载数据集
df = pd.read_csv('KDDTrain+.txt', header=None)
# 对标签进行编码
labelencoder = LabelEncoder()
df[41] = labelencoder.fit_transform(df[41])
# 将数据集分成特征和标签
X = df.iloc[:, :-1].values
y = df.iloc[:, -1].values
# 对特征进行标准化
sc = StandardScaler()
X = sc.fit_transform(X)
# 将标签进行one-hot编码
y = keras.utils.to_categorical(y)
# 将数据集分成训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# 构建LSTM模型
model = keras.Sequential([
keras.layers.LSTM(units=128, input_shape=(X_train.shape[1], 1)),
keras.layers.Dropout(rate=0.2),
keras.layers.Dense(units=128, activation='relu'),
keras.layers.Dropout(rate=0.2),
keras.layers.Dense(units=y_train.shape[1], activation='softmax')
])
# 编译模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# 将训练集和测试集reshape为3D张量
X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))
X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))
# 训练模型
history = model.fit(X_train, y_train, epochs=10, batch_size=128, validation_data=(X_test, y_test))
# 评估模型
scores = model.evaluate(X_test, y_test, verbose=0)
print("Accuracy: %.2f%%" % (scores[1]*100))
```