过度拟合总是不好的吗?

数据挖掘 神经网络 分类 过拟合
2021-09-14 19:52:22

我有一个总共 8000 个声音样本的数据集。这些是我的多层神经网络二元分类器的结果:

Precision: [0.95 0.96]
Recall: [0.96 0.95]
F-Score: [0.95 0.95]
S: [1217. 1254.]
Accuracy training 1.0
Accuracy Test 0.95

我对测试的准确性、精度和召回率感到满意。但是 1.0 的准确度让我感到困扰,因为它对训练集的过度拟合。即使测试集的准确性令人满意,这是一件坏事吗?

下面我从磁盘加载汽车声音特征(1)和其他类型的声音特征(0)并分配标签。我仔细检查了,在处理和提取音频特征时,我没有添加标签作为特征。集合被削减为每个等于 4100 个样本

car_features =np.load('car_features_final.npy')
car_labels =np.ones(len(car_features),dtype=int)
shuffle(car_features, random_state=12)

other_features = np.load('other_features.npy')
other_features=list(islice(shuffle(other_features, random_state=12),4100))
other_labels = np.zeros(len(other_features),dtype=int)
shuffle(other_features, random_state=12)

all_features = np.append(car_features, other_features, axis=0)
all_labels = np.append(car_labels,other_labels, axis=0)

X_train, X_test, y_train, y_test = train_test_split(all_features, all_labels, test_size=0.30, random_state=42)

clf = MLPClassifier(activation='relu', solver='adam', alpha= 0.1, hidden_layer_sizes=(300, 300, 300, 100), random_state=1, max_iter=500)
clf.fit(X_train, y_train)

y_predicted_test = clf.predict(X_test)
y_predicted_train = clf.predict(X_train)
p,r,f,s = precision_recall_fscore_support(y_test, y_predicted_test)
3个回答

如果您的训练准确度为 100%,则为过拟合,但测试准确度为 5%。那是过拟合。

在您的情况下,训练和测试准确性之间存在很好的匹配。要检查任何抽样偏差,请使用相同的超参数进行 K 折交叉验证。

一个很好的替代方法是从其余数据(所以不是从你的前 8000 个声音数据)中选择另一个随机样本(可能使用不同的选择方法),然后查看新的(看不见的)数据的准确性. 如果你有太多的过度拟合,你的表现就会很差。

简单的答案是否定的。过度拟合是一个数据现实不可能完美拟合的问题,因此在构建模型时考虑了一些未经训练的东西。

另一方面,可以确保某些数据与其样本相符且准确。例如,如果您有公式 y = x^3 的结果数据并且您的模型正确(找到了这个公式)。在这种情况下,您的准确率必须是 100%!

因此,总而言之,您的模型准确性应该与数据现实的性质有关。