0

我有一个数据集,每个特征的所有值都是数字,甚至是类/标签列。在用 python 实现的提升算法(如 logitboost、adaboost、gradientboosting)中,除了预设的基本估计器(或弱学习器,迭代我们的数据的模型)之外,我们可以指定一个分类算法,如 SVM 中的 SVC,如朴素贝叶斯等上。(一些算法/包,如在 python 中实现的 xgboost 和 catboost,除了包中实现的那些之外,不能接受任何其他基本估计器......也许是实现偏好?)

通过这个介绍,我提出了我的问题。此处的代码不起作用并给出此错误:LogitBoost requires the base estimator to be a regressor.

for j in range(1, 21):
for i in range(1, 11):
    X_train = pd.read_csv('{}-train{}-1.csv'.format(j, i))
    y_train = pd.read_csv('{}-train{}-2.csv'.format(j, i))
    X_test = pd.read_csv('{}-test{}-1.csv'.format(j, i))
    y_test = pd.read_csv('{}-test{}-2.csv'.format(j, i))
    model = logitboost.LogitBoost(base_estimator = svm.SVC())
    model.fit(X_train, y_train)
    y_predict = model.predict(X_test)
    accuracy = metrics.accuracy_score(y_test, y_predict)
    print('Accuracy for dataset {}, segment {} is: '.format(j, i), accuracy)
    print('Confusion Matrix for Datatset {}, segment {} is: '.format(j, i))
    print(metrics.confusion_matrix(y_test, y_predict))

请不要介意缩进。它在这里显示错误,但是,它在空闲时是正确的。我为此道歉。

该行:

model = logitboost.LogitBoost(base_estimator = svm.SVC())

不适用于 SVC,它应该这样做,因为 logitboost 是一种分类算法。但是,它确实适用于 SVR(支持向量回归),这不是我想要的。谁能解释为什么会发生这种情况以及我该如何解决?为了比较公平起见,我需要为每个算法使用相同的基本估计器......

谢谢。

4

1 回答 1

0

这就是 LogitBoost(和 GBM)的工作原理。每个额外的弱学习器都适合残差,因此需要成为回归器。(对于所有样本,LogitBoost 中的初始预测似乎仅为 0.5。我认为其他实现可能会采用平均响应。)

文档中:

base_estimator:object, optional
构建 LogitBoost 分类器的基本估计器。这应该是一个回归器。如果没有 base_estimator指定,则使用决策树桩。

Adaboost 不同,它改变了错误分类样本的权重,但每个新的弱学习器仍然适合原始数据,分类器也是如此。

于 2019-01-10T20:44:55.613 回答