这是数据:
square AP-00 AP-01 AP-02 AP-03 AP-04 AP-05 AP-06 AP-07 AP-08 s-01 -30 -28 -40 -44 -62 -60 -78 -60 -62 s-01 -30 -52 -38 -44 -62 -60 -78 -60 -68 s-01 -30 -17 -36 -40 -62 -58 -66 -60 -68 s-01 -28 -19 -36 -36 -62 -56 -36 -52 -68 s-01 -28 -17 -36 -40 -54 -56 -36 -52 -64 ... ... ... ... ... ... ... ... ... ...
-数据形状: 15071行 × 10列-目标变量(y)是square列
-特征(X)是AP-00 AP-01 AP-02 AP-03 AP-04 AP-05 AP-06 AP-07 AP-08
X的值是RSSI值,根据收集的RSSI值应将其分类到所需的square列,square列是多类别(s-01, s-02, s-03)
我使用随机森林分类器进行拟合
clf = RandomForestClassifier()x_train,x_test,y_train,y_test = train_test_split(X,y,test_size = 0.30,random_state = 42)clf.fit(x_train,y_train)y_hat = clf.predict(x_test)accuracy_score(y_hat,y_test)
0.9838746309334545
-注意: 数据是平衡的,所以我认为这是过拟合
我决定对X_train和Y_train进行交叉验证
model = RandomForestClassifier()scores1 = cross_val_score(model,x_train,y_train, cv = 5)print(scores1)array([0.98199513, 0.98199513, 0.98442822, 0.97955209, 0.98344693])
再对X_test和Y_test进行:
scores2 = cross_val_score(model,x_test,y_test, cv = 10)print(scores2)array([0.98637911, 0.97048808, 0.97616345, 0.975 , 0.96931818])
那么,这是否意味着我的模型没有过拟合?或者能解释一下发生了什么?并且在没有调整超参数的情况下也能达到这种准确度吗?
回答:
你没有过拟合,所以你的模型是正确的。
如你所说,如果你在训练数据和测试数据上获得了相似的准确度值,你就没有过拟合。可能你的问题使用这些特征很容易解决(运气好哈哈)。
我建议你绘制哪些特征对你的模型最重要,这将帮助你更好地理解哪些特征使你达到了如此高的准确度:
feat_importances = pd.Series(clf.feature_importances_, index=X.columns)feat_importances.nlargest(10).plot(kind='barh')
此外,是的,你可以在不调整超参数的情况下获得如此高的准确度。默认超参数通常工作得相当好,显然你可以通过更改一些字段来稍微提高准确度。调整超参数对于避免过拟合非常有用,但这不是你的情况。