【问题标题】:SKLearn Stacking Classifier giving bad resultsSKLearn 堆叠分类器给出不好的结果
【发布时间】:2021-12-14 19:32:45
【问题描述】:

我正在使用 scikit learn 制作一个混合集成模型。我尝试使用堆叠分类器来集成模型,其中我使用随机森林、SVM 和朴素贝叶斯以及逻辑回归作为元估计器。我正在使用kaggle 上的心脏病数据集。问题是独奏技术比混合技术表现更好。我的混合模型使用具有 5 倍验证和其他最佳参数的 gridsearchCV 技术。虽然我将模型与之比较的独奏技术具有默认参数。我做错了什么。

逻辑回归:

C = [0.01,0.1, 1, 5, 10]

Log = LogisticRegression()

parameters = {'C': [.1 ,2, 5, 10, 15, 20]}

log_regressor = GridSearchCV(Log, parameters,cv =5)
log_regressor.fit(X_train, y_train)
log_regressor.best_params_
log_regressor.fit(X_train,y_train)
accuracy89 = log_regressor.score(X_test,y_test)

print('Logistic Regression Accuracy -->',((accuracy89)*100))

朴素贝叶斯:

params_NB = {'var_smoothing': np.logspace(0,-9, num=100)}
NB = GaussianNB()
nb_regressor = GridSearchCV(NB, params_NB,n_jobs = -1 ,cv =5)
nb_regressor.fit(X_train,y_train)
accuracy76 = nb_regressor.score(X_test,y_test)
print('Naive Bayes Accuracy -->',((accuracy76)*100))
nb_regressor.best_params_

同样,训练了 SVC 和随机森林。然后这里使用了最好的参数模型来堆叠分类器:

estimators = [
    ('knn',model3_grid),
    ('svc',svm_regressor),
    ('nb',nb_regressor),
    ('rf',rf_classifier),
]

stackingCLF = StackingClassifier(estimators = estimators, verbose = 2 ,final_estimator = log_regressor, cv=5)
stackingCLF.fit(X_train, y_train)
StackedScore = stackingCLF.score(X_test, y_test)*100
print(StackedScore)

它给了我 85% 的准确率,但它是单独的技术。结果是:

'DT': 0.7166666666666667,
 'KNN': 0.7833333333333333,
 'Logistic Regression': 0.8666666666666667,
 'NB': 0.5,
 'RF': 0.8166666666666667,
 'SVC': 0.8

【问题讨论】:

    标签: python machine-learning scikit-learn


    【解决方案1】:
    1. 无法保证一个集成可以胜过其所有组件。
    2. 性能不佳的基础模型可能会损害集成的性能:尽管元估计​​器可以为不良基础模型的预测分配很少的权重,但它可能会因一些噪声而误入歧途。尝试相同的方法,但不要使用 NB,也可以使用 DT 模型。
    3. 准确度并不是一个特别好的指标,而且您的测试规模相对较小,因此 0.85 和 0.8667 之间的差异可能并不显着。
    4. 你提到了超参数调优的不同;确保在搜索空间中包含默认超参数。

    【讨论】:

    • 好的,那我怎样才能建立一个比其他任何独奏技术更好的混合模型。我到处看到的都是堆叠、装袋或投票!!有什么办法可以建立吗?正如我看到各种提到混合 ML 模型的研究论文,但除了这些提到的技术之外,我无法在互联网上找到如何制作它们的任何地方!
    • @GautamGoyal 请不要在 cmets 中提出后续问题,特别是如果与现有问题几乎没有关系,或者如果他们需要自己进行全新的展览(如这里)。由于这里的回复可以说解决了您的问题,请参阅What should I do when someone answers my question?
    • 我只是要求另一种方法。我觉得可以接受
    • @GautamGoyal 我没有说这是不可接受的,我说这是一个与原始问题完全不同的问题。为什么你从two different accounts发帖?
    猜你喜欢
    • 2021-03-23
    • 2022-12-19
    • 2016-02-13
    • 2020-05-26
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    • 2018-11-28
    相关资源
    最近更新 更多