首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用感知器sklearn.ensemble.AdaBoostClassifier()给出了一个错误

使用感知器sklearn.ensemble.AdaBoostClassifier()给出了一个错误
EN

Stack Overflow用户
提问于 2021-01-23 06:33:33
回答 1查看 239关注 0票数 0

我在AdaBoost分类器中使用感知器存在问题。

在最后一列(“扑克手”)中,将这里的训练和测试数据转换为0和1(原为1~9),然后在数据中实现总共15个弱感知器的决策树分类器和AdaBoost分类器。我尝试使用scikit-学习库,但是当我的决策树分类器提供了很好的结果时,AdaBoost分类器抛出了错误:

ValueError: BaseClassifier in AdaBoostClassifier ensemble is worse than random, ensemble can not be fit.

在这里,代码的关键部分。

代码语言:javascript
复制
import pandas as pd
from sklearn.ensemble import AdaBoostClassifier
from sklearn.linear_model import Perceptron
from sklearn import metrics

if __name__ == "__main__":
   
    data_train = pd.read_csv("poker-hand-testing.data",header=None)
    data_test = pd.read_csv("poker-hand-training-true.data",header=None)
    

    for value in range(0, len(data_train)):
        if data_train[10][value] != 0:
            data_train[10][value] = 1
    
    for value in range(0, len(data_test)):
        if data_test[10][value] != 0:
            data_test[10][value] = 1

    col=['Suit of card #1','Rank of card #1',
     'Suit of card #2','Rank of card #2',
     'Suit of card #3','Rank of card #3',
     'Suit of card #4','Rank of card #4',
     'Suit of card #5','Rank of card #5',
     'Poker Hand']
    
    data_train.columns=col
    data_test.columns=col
    
    y_train=data_train['Poker Hand']
    y_test=data_test['Poker Hand']
    
    x_train=data_train.drop('Poker Hand',axis=1)
    x_test=data_test.drop('Poker Hand',axis=1)
    
#The problematic part
    classifier = AdaBoostClassifier(base_estimator=Perceptron(), n_estimators=15, algorithm='SAMME')
    classifier = classifier.fit(x_train, y_train)
    y_pred = classifier.predict(x_test)
    
    print("Accuracy of AdaBoost:", metrics.accuracy_score(y_test, y_pred))

奇怪的是,当我不将值更改为二进制值时,此错误每9-10次只发生一次,而二进制值几乎总是会出现错误。此外,将Perceptron()更改为SGDClassifier(loss="perceptron", eta0=1, learning_rate="constant", penalty=None)也会引发此类错误。

我的问题是:

  1. 什么是使用的解决方案-学习库?
  2. 有没有办法处理这样的例外呢?例如,如果它给出错误,再次执行它,直到想要的结果?
  3. 如果不能在scikit-learn库中解决,我还可以在Perceptron中同时使用决策树和AdaBoost吗?
EN

回答 1

Stack Overflow用户

发布于 2021-01-23 17:58:24

问题部分可以通过尝试-捕捉块来解决。例如,

代码语言:javascript
复制
#The problematic part solution
AdaBoost_accuracy = 0

while AdaBoost_accuracy == 0:
    try:
        classifier = AdaBoostClassifier(base_estimator=Perceptron(), n_estimators=15, algorithm='SAMME')
        classifier = classifier.fit(x_train, y_train)
        y_pred = classifier.predict(x_test)
        AdaBoost_accuracy = metrics.accuracy_score(y_test, y_pred)
    except:
        print("Let me reclassify AdaBoost again")

print("Accuracy of AdaBoost:", AdaBoost_accuracy)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65856432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档