我在AdaBoost分类器中使用感知器存在问题。
在最后一列(“扑克手”)中,将这里的训练和测试数据转换为0和1(原为1~9),然后在数据中实现总共15个弱感知器的决策树分类器和AdaBoost分类器。我尝试使用scikit-学习库,但是当我的决策树分类器提供了很好的结果时,AdaBoost分类器抛出了错误:
ValueError: BaseClassifier in AdaBoostClassifier ensemble is worse than random, ensemble can not be fit.
在这里,代码的关键部分。
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)也会引发此类错误。
我的问题是:
发布于 2021-01-23 17:58:24
问题部分可以通过尝试-捕捉块来解决。例如,
#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)https://stackoverflow.com/questions/65856432
复制相似问题