测试精度比实际输出高。如何提高实际输出精度?

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 倍的训练/测试时,您应该有一个不错的模型。

【讨论】:

以上是关于测试精度比实际输出高。如何提高实际输出精度?的主要内容,如果未能解决你的问题,请参考以下文章

实验二

单精度小数点后面有几位?

通过FPGA内部锁相环对恒温晶振的输出(32.768MHz)进行2倍频,输出的时钟精度会很低吗?误差大吗?谢谢~~

高精度模板(未完待续)

C语言float类型储存和printf输出问题

通过mem32函数来提高MM32 MicroPython 输出PWM 频率的精度