【发布时间】: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