объект list 'не может быть интерпретирован как целое число в коде RandomForest - PullRequest
1 голос
/ 25 марта 2020

я использовал следующий код из учебника машинного обучения

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
import mglearn
X,y =make_moons(n_samples=100,noise=0.25,random_state=3)
X_train,X_test,y_train,y_test =train_test_split(X,y,stratify=y,random_state=42)
#sketch random forest
forest =RandomForestClassifier(n_estimators=5,random_state=2)
forest.fit(X_train,y_train)

#draw random forest
fix, axes =plt.subplots(2,3,figsize=(20,10))
for i,(ax,tree) in enumerate(list(zip(axes.ravel())),forest.estimators_):
    ax.set_title("tree{}".format(i))
    mglearn.plots.plot_tree_partition(X_train,y_train,tree,ax=ax)
mglearn.plots.plot_2d_separator(forest, X_train, fill=True, ax=axes[-1, -1],alpha=.4)
axes[-1, -1].set_title("Random Forest")
mglearn.discrete_scatter(X_train[:, 0], X_train[:, 1], y_train)

там написано следующее сообщение об ошибке:

TypeError: 'list' object cannot be interpreted as an integer

я знаю, что в python3 для zip есть необходимая команда списка , поэтому в книге изначально было написано

for i, (ax, tree) in enumerate(zip(axes.ravel(), forest.estimators_)):

, и я добавил команду списка, но все же она показывает мне эту ошибку, можете ли вы помочь мне выяснить, что не так?

1 Ответ

1 голос
/ 25 марта 2020

In

enumerate(list(zip(axes.ravel())),forest.estimators_)

forest.estimators_ находится за пределами вашего вызова list(zip()) и рассматривается как второй аргумент для enumerate, который, из документов , представляет начало индекс. Поскольку forest.estimators_ является списком, произойдет сбой, так как требуется целое число.

Что вы хотите написать:

enumerate(list(zip(axes.ravel(), forest.estimators_)))
...