【问题标题】:Does more training data change the accuracy comparatively between models?更多的训练数据是否会相对改变模型之间的准确性?
【发布时间】:2022-06-13 03:20:24
【问题描述】:

在建模阶段处理我的机器学习项目时,我想首先尝试所有可能的模型,然后选择最佳模型并对其进行微调。最后我想我会得到最好的数据库模型,但一路走来,我发现了一个有趣的结果。

为了节省时间,我想在多模型训练阶段使用大约 3500 行,而在整个 70692 中,这仅占数据的 4.9%。然后当训练最终完成时,这是我对所有模型得到的结果:

=================================== Accuracy ===================================
                      name  accuracy
3  Support Vector Machines  0.752571
0      Logistic Regression  0.751429
9       Bagging Classifier  0.746857
1            Random Forest  0.742857
2                 LightGBM  0.742857
6    Bernoulli Naive Bayes  0.726857
4                  XGBoost  0.724571
5     Gaussian Naive Bayes  0.721143
7                      KNN  0.674857
8            Decision Tree  0.661143

================================== Precision ===================================
                      name precision
0      Logistic Regression  0.761427
9       Bagging Classifier  0.747583
3  Support Vector Machines  0.745568
6    Bernoulli Naive Bayes  0.743151
1            Random Forest  0.743041
2                 LightGBM  0.739451
5     Gaussian Naive Bayes  0.737986
4                  XGBoost  0.728355
7                      KNN   0.69409
8            Decision Tree  0.677714

============================== True Positive Rate ==============================
                      name true_positive_rate
3  Support Vector Machines           0.790929
2                 LightGBM           0.775442
9       Bagging Classifier           0.769912
1            Random Forest           0.767699
0      Logistic Regression           0.755531
4                  XGBoost           0.744469
6    Bernoulli Naive Bayes           0.720133
5     Gaussian Naive Bayes           0.713496
7                      KNN           0.662611
8            Decision Tree           0.655973

================================= Specificity ==================================
                      name specificity
3  Support Vector Machines    0.790929
2                 LightGBM    0.775442
9       Bagging Classifier    0.769912
1            Random Forest    0.767699
0      Logistic Regression    0.755531
4                  XGBoost    0.744469
6    Bernoulli Naive Bayes    0.720133
5     Gaussian Naive Bayes    0.713496
7                      KNN    0.662611
8            Decision Tree    0.655973

=================================== F1 Score ===================================
                      name     score
3  Support Vector Machines  0.767579
9       Bagging Classifier  0.758583
0      Logistic Regression  0.758468
2                 LightGBM  0.757019
1            Random Forest  0.755169
4                  XGBoost  0.736324
6    Bernoulli Naive Bayes  0.731461
5     Gaussian Naive Bayes  0.725534
7                      KNN  0.677985
8            Decision Tree  0.666667

现在,我不知道要使用什么模型,所以我决定尝试将 7000 行几乎翻倍。起初,我教导结果将保持不变,只是准确性会提高,但你瞧,顺序发生了变化,这是我的 7000 行结果:

=================================== Accuracy ===================================
                      name  accuracy
9       Bagging Classifier  0.736571
2                 LightGBM  0.735429
3  Support Vector Machines     0.734
0      Logistic Regression  0.732857
1            Random Forest  0.730571
4                  XGBoost  0.721714
6    Bernoulli Naive Bayes      0.72
5     Gaussian Naive Bayes  0.711429
7                      KNN     0.674
8            Decision Tree  0.625429

================================== Precision ===================================
                      name precision
0      Logistic Regression  0.727174
6    Bernoulli Naive Bayes  0.726908
5     Gaussian Naive Bayes  0.725281
9       Bagging Classifier  0.719153
1            Random Forest  0.717895
3  Support Vector Machines  0.716049
2                 LightGBM  0.714576
4                  XGBoost  0.712533
7                      KNN  0.674612
8            Decision Tree   0.63009

============================== True Positive Rate ==============================
                      name true_positive_rate
2                 LightGBM           0.794466
9       Bagging Classifier           0.786561
3  Support Vector Machines           0.785997
1            Random Forest           0.770186
0      Logistic Regression           0.755505
4                  XGBoost           0.754376
6    Bernoulli Naive Bayes           0.715415
5     Gaussian Naive Bayes             0.6917
7                      KNN           0.687182
8            Decision Tree           0.629023

================================= Specificity ==================================
                      name specificity
2                 LightGBM    0.794466
9       Bagging Classifier    0.786561
3  Support Vector Machines    0.785997
1            Random Forest    0.770186
0      Logistic Regression    0.755505
4                  XGBoost    0.754376
6    Bernoulli Naive Bayes    0.715415
5     Gaussian Naive Bayes      0.6917
7                      KNN    0.687182
8            Decision Tree    0.629023

=================================== F1 Score ===================================
                      name     score
2                 LightGBM  0.752406
9       Bagging Classifier  0.751348
3  Support Vector Machines  0.749394
1            Random Forest  0.743122
0      Logistic Regression  0.741069
4                  XGBoost  0.732858
6    Bernoulli Naive Bayes  0.721116
5     Gaussian Naive Bayes  0.708092
7                      KNN  0.680839
8            Decision Tree  0.629556

顺序改变了,这让我很惊讶,所以我的问题是更多的训练数据会改变模型与其他模型的比较准确度吗?或者以我自己的理解,为什么会发生上述模型排名的变化?

另外,我还有一个问题是。有没有办法绘制所有这些数据,以便更容易找到全面的最佳模型?现在,我将所有这些数据放在 3 个不同的 panda Dataframe 中进行绘图,我只是不知道该做什么/要制作哪个情节,甚至不知道如何制作情节。

否则,仅此而已,在此先感谢您。 :)

请注意,当我说 3500 和 7000 时,我的意思是我使用的总行数,包括训练和测试。我将整体分成 75% 和 25% 的部分,其中 75% 用于训练,25% 用于测试

【问题讨论】:

  • 我投票结束这个问题,因为它缺乏焦点。另外,培训问题属于StackExchange: Data Science
  • @TrentonMcKinney 我很抱歉这个问题缺乏焦点。我实际上尝试搜索并找不到答案。您是否有任何提示或建议可以使我的问题变得更好?而且我尝试在堆栈交换上搜索无济于事,您是否可以给我问题的链接。谢谢你:)
  • 我的意思是您关于培训的问题应该发布在数据科学上。一般来说,SO 是针对与修复损坏的代码相关的问题。
  • Stack Overflow 是编程题,这不是编程题。

标签: python machine-learning scikit-learn seaborn


【解决方案1】:

第一季度。数据大小结果模型与其他模型的比较准确性会发生变化吗?
A. 有时是,有时不是
是的可能性

  1. 如果数据大小的变化很大,则模型性能指标顺序改组的可能性更高,除非添加的数据没有随机性。
  2. 添加更多数据意味着添加更多异常值,包括具有更多随机独立值的样本、存在于第三和第四标准差中的样本数量增加以及数据分布的变化。
  3. 在此场景中,您已将 100% 的数据添加到之前的数据中(3500 是 3500 的 100%)让我们假设它有 100 个异常值,并将数据集加倍,如您提到的。并且模型还执行了额外 100% 的数据。
  4. 前 50% 的数据可能适合支持向量机、Logistic 回归,并且由于数据随机性的增加和数据分布发生变化的机会更高,数据可能最适合 Bagging 分类器、LightGBM。

没有的可能性

  1. 如果数据大小的变化很小,那么模型性能指标顺序的改组机会就会降低,除非添加的数据有很大的随机性。
  2. 添加更少的数据意味着添加更少的异常值(100 的 5%(如上所述)是 5),向现有数据添加更少的未知特征值。
  3. 如果您已将 5% 的数据添加到可能包含(5 个异常值)的先前数据(3500 个样本为 175 个)。并且模型仅在 5% 的数据上进行了额外的执行。
  4. 前 95% 的数据可能适合支持向量机、Logistic 回归,第二个 5% 可能适合任何其他模型,但平均而言,因为 95% 的数据最适合 SVM,LR 有更多的机会 100 % 的数据也适用于 SVM 和 LR。

注意:同样在您的情况下,前 50% 的 SVM、LR、BC 和 LightGBM 的准确度没有太大差异,因此通过添加另外 50% 的数据,在排行榜中洗牌的机会更大。

【讨论】:

  • 非常感谢这是我需要的答案。我也很好奇你是否也知道第二个问题的答案。但除此之外非常感谢
【解决方案2】:

不仅更多的训练数据会改变准确性。 如果您将更多特征添加到您的训练数据集,您将获得更高的准确性。

有一个名为 upgini 的 python 库,内部带有 autoML 引擎,可以做出高质量的预测并为 ML 提供智能数据丰富。

我的数据丰富的典型代码如下:

%pip install -Uq upgini
from upgini import SearchKey, FeaturesEnricher
from upgini.metadata import CVType, RuntimeParameters

## define search keys
search_keys = {
    "Date": SearchKey.DATE, 
    "country": SearchKey.COUNTRY,
    "postal_code": SearchKey.POSTAL_CODE
}

## define X_train / y_train
X_train=df_prices.drop(columns=['Target'])
y_train = df_prices.Target

## define Features Enricher
features_enricher = FeaturesEnricher(
search_keys = search_keys,
cv = CVType.time_series
)

X_enriched=features_enricher.fit_transform(X_train, y_train, calculate_metrics=True)

我建议你尝试一下。

网站:https://upgini.com GitHub:https://github.com/upgini

【讨论】:

    猜你喜欢
    • 2021-12-22
    • 1970-01-01
    • 2020-12-12
    • 2019-06-10
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多