SKLearn堆叠分类器给出不好的结果



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

Logistic回归:

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和Random forest也得到了训练。然后在这里使用最优参数模型用于堆叠分类器:

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
  1. 不能保证一个集成可以胜过它的所有组件。
  2. 表现不佳的基础模型可能会损害集成的性能:尽管元估计器可以为糟糕的基础模型的预测分配很少的权重,但它可能会被一些噪声引入歧途。尝试相同的,但没有NB和DT模型。
  3. 准确度不是一个特别好的度量,并且您的测试大小相对较小,因此0.85和0.8667之间的差异可能并不显著。
  4. 你提到了超参数调优的差异;请确保在搜索空间中包含了默认的超参数。

相关内容

  • 没有找到相关文章

最新更新