python - LogitBoost 要求基估计量是回归量
问题描述
我有一个数据集,每个特征的所有值都是数字,甚至是类/标签列。在用 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(支持向量回归),这不是我想要的。谁能解释为什么会发生这种情况以及我该如何解决?为了比较公平起见,我需要为每个算法使用相同的基本估计器......
谢谢。
解决方案
这就是 LogitBoost(和 GBM)的工作原理。每个额外的弱学习器都适合残差,因此需要成为回归器。(对于所有样本,LogitBoost 中的初始预测似乎仅为 0.5。我认为其他实现可能会采用平均响应。)
从文档中:
base_estimator:object, optional
构建 LogitBoost 分类器的基本估计器。这应该是一个回归器。如果没有base_estimator
指定,则使用决策树桩。
Adaboost 不同,它改变了错误分类样本的权重,但每个新的弱学习器仍然适合原始数据,分类器也是如此。
推荐阅读
- reactjs - 如何在我的应用程序中调试我的反应库?
- angular - 删除 @types/jest 后如何使用 jest.mock (^jest@24)
- java - 这个“R”在 Java 调试器中是什么意思?
- c# - 使用 c# 在远程 ssh 服务器上启动脚本
- python - CNN 的量化:选择范围
- java - 如何在java中读取安装在windows mmc控制台中的ssl证书
- python - #python 2.7 如何运行长度解码(RLE 到字符串)
- vue.js - 验证是否选中了复选框,具体取决于 vuelidate 中的另一个验证
- powershell - 在 Powershell 上的 .txt 文件中写入输出
- javascript - 以流的形式读取文件的内容