测试精度比实际输出高。如何提高实际输出精度?
Posted
技术标签:
【中文标题】测试精度比实际输出高。如何提高实际输出精度?【英文标题】:Testing Accuracy is high compared actual output. How to increase the actual output accuracy? 【发布时间】:2020-06-01 16:49:33 【问题描述】:我的逻辑预测模型为我提供了 80% 的训练准确度和 79% 的测试准确度。
训练模型准确率:0.8039535210772422 测试模型精度:0.7937496044721021
我的混淆矩阵给了我这些值:
使用超参数调整并打印我的分类报告:
precision recall f1-score support
0 0.87 0.88 0.87 172299
1 0.77 0.70 0.74 17321
micro avg 0.85 0.85 0.85 189620
macro avg 0.77 0.74 0.76 189620
weighted avg 0.85 0.85 0.85 189620
当我将结果与实际数据进行比较时,我仅在 40% 的数据匹配上测试了预测模型。我怎样才能提高我的实际输出。
这是我的代码,任何建议都会很有帮助。
# Create the hyperparameter grid
c_space = np.logspace(-5, 8, 15)
log_param_grid = 'C': c_space, 'penalty': ['l1', 'l2']
# Setup the GridSearchCV object: logReg_cv
logReg=LogisticRegression()
logReg_cv = GridSearchCV(logReg,log_param_grid,cv=5)
y=predict_pi.P_I
X=pd.get_dummies(X)
test=pd.get_dummies(test)
extra_cols_train = [i for i in list(test) if i not in list(X)]
extra_cols_test = [i for i in list(X) if i not in list(test)]
X = X.reindex(columns=X.columns.tolist() + extra_cols_train)
X[extra_cols_train] = 0
test = test.reindex(columns=test.columns.tolist() + extra_cols_test)
test[extra_cols_test] = 0
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.4,random_state=42)
logReg_cv.fit(X_train,y_train)
pred_pi=logReg_cv.predict(X_test)
test_pi=logReg_cv.predict(X_train)
print("Training Model Accuracy:".format(accuracy_score(y_train,test_pi)))
print("Testing Model Accuracy:".format(accuracy_score(y_test,pred_pi)))
print(confusion_matrix(y_test, pred_pi))
print(classification_report(y_test, pred_pi))
print("Tuned Logistic Regression Parameter: ".format(logReg_cv.best_params_))
print("Tuned Logistic Regression Accuracy: ".format(logReg_cv.best_score_))
【问题讨论】:
【参考方案1】:这可能意味着您的模型过度拟合了您的训练数据。您是否对实际数据进行过 EDA,以查看其行为是否符合您的预期,以及您的训练/测试数据是否真正代表您的实际数据。
您的训练集是实际数据的子集吗?我建议完全根据您的实际数据训练您的模型,使用您拥有的每一点数据进行训练。
当您测试您的模型时,我建议您使用交叉验证。当您确实喜欢对数据进行 5 倍或 10 倍的训练/测试时,您应该有一个不错的模型。
【讨论】:
以上是关于测试精度比实际输出高。如何提高实际输出精度?的主要内容,如果未能解决你的问题,请参考以下文章