Python 3.x 如何正确地使用for循环实现决策树袋装方法的投票?

Python 3.x 如何正确地使用for循环实现决策树袋装方法的投票?,python-3.x,machine-learning,decision-tree,ensemble-learning,Python 3.x,Machine Learning,Decision Tree,Ensemble Learning,我是python和机器学习的新手,我试着看了一下sklear的投票分类器文档,但作为一个非常诚实的人,我完全迷路了 我已经为for循环中的决策树执行了打包,但是我被困在了必须执行投票才能做出最终决策的地方 每个数据样本,然后计算最终结果的准确性 我得到TypeError:zip参数#1必须支持迭代 下面是我的代码 from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_sc

我是python和机器学习的新手,我试着看了一下sklear的投票分类器文档,但作为一个非常诚实的人,我完全迷路了

我已经为for循环中的决策树执行了打包,但是我被困在了必须执行投票才能做出最终决策的地方 每个数据样本,然后计算最终结果的准确性

我得到
TypeError:zip参数#1必须支持迭代

下面是我的代码

from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.utils import resample


X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.35, random_state=3)

predictions = []

for i in range(1,20):
bootstrap_size = int(0.8*len(X_train))
x_bag, y_bag = resample(X_train,y_train, n_samples = bootstrap_size , random_state=i , replace = True) 
Base_DecisionTree = DecisionTreeClassifier(random_state=3)
Base_DecisionTree.fit(x_bag, y_bag)
y_predict = Base_DecisionTree.predict(X_test)
accuracy = accuracy_score(y_test, y_predict)
predictions.append(accuracy)


from sklearn.ensemble import RandomForestClassifier, VotingClassifier
votingClass = VotingClassifier(predictions)
#print(votingClass)
votingClass.fit(X_train, y_train)
confidence = votingClass.score(X_test, y_test)
print('accuracy:',confidence)

从我的理解来看,VotingClassifier函数接受一组分类器,而在您的例子中,您给出了一个精度列表。请从sklearn()的文档中查找示例代码

编辑

因此,我认为函数VotingClassifier不是解决任务的正确途径

你要做的是从for循环中收集所有的y_预测。 这将为您提供每个样本的预测

一旦每个样本(例如)都有了所有的预测(例如),你就可以计算选票了。结果将是预测的最终标签(=投票()


通过将投票预测的标签与基本事实进行比较,给出了准确度

您可以指定生成错误的代码行吗?我不熟悉sklearn的决策树库,但您确定在函数Base_DecisionTree.fit(bag,y_train)中传递了正确的标签集吗?据我所知,包是原始训练集的子集,而y_训练集是原始训练集的标签。我希望y_train也是与样本匹配的标签的子集。@Roberto很抱歉我粘贴了旧代码,很抱歉我更新了它。告诉我错误的那行是votingClass.fit(X\u train,y\u train)别担心,谢谢你更新它。我已经发布了一个答案,要求我做的事情似乎与文档不符。完成“for”循环后,测试集中的每个样本应该有19个不同的预测。然后,根据所有19个分类器的投票,对每个`数据样本进行投票以做出最终决定。最后,计算并报告装袋(投票)方法的最终准确性。注意:您不需要计算每轮循环中每个基本分类器的精度!您只需对每个数据样本进行投票以做出最终决定,然后计算最终结果的准确度,但在for循环内的代码中,您有:ln12:accurity=accurity_score(y_test,y_predict)ln13:predictions。append(accurity)Thais根据您的规范计算每个循环的准确度:“注意:您不需要计算每轮循环中每个基本分类器的精度!您只需进行投票,对每个数据样本做出最终决定,然后计算最终结果的准确性”。
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import GaussianNB
from sklearn.ensemble import RandomForestClassifier, VotingClassifier

clf1 = LogisticRegression(solver='lbfgs', multi_class='multinomial',random_state=1)
clf2 = RandomForestClassifier(n_estimators=50, random_state=1)
clf3 = GaussianNB()

X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
y = np.array([1, 1, 1, 2, 2, 2])
eclf1 = VotingClassifier(estimators=[('lr', clf1), ('rf', clf2), ('gnb', clf3)], voting='hard')
eclf1 = eclf1.fit(X, y)
print(eclf1.predict(X))
#[1 1 1 2 2 2]
np.array_equal(eclf1.named_estimators_.lr.predict(X), eclf1.named_estimators_['lr'].predict(X))
#True
eclf2 = VotingClassifier(estimators=[ ('lr', clf1), ('rf', clf2), ('gnb', clf3)], voting='soft')
eclf2 = eclf2.fit(X, y)
print(eclf2.predict(X))
#[1 1 1 2 2 2]
 eclf3 = VotingClassifier(estimators=[ ('lr', clf1), ('rf', clf2), ('gnb', clf3)], voting='soft', weights=[2,1,1], flatten_transform=True)
eclf3 = eclf3.fit(X, y)
print(eclf3.predict(X))
#[1 1 1 2 2 2]
print(eclf3.transform(X).shape)
#(6, 6)