plot_decision_regions с ошибкой "Значения заполнителя должны быть предоставлены, когда X имеет более 2 обучающих функций".

Я строю 2D-график для вывода SVC Bernoulli.

преобразуется в векторы из Avg word2vec и разбитые данные для разделения и обработки данных для обучения и тестирования. Через сетку поиска нашли лучшие C и GAMMA (RBF)

clf = SVC(C=100,gamma=0.0001)

clf.fit(X_train1,y_train)

from mlxtend.plotting import plot_decision_regions



plot_decision_regions(X_train, y_train, clf=clf, legend=2)


plt.xlabel(X.columns[0], size=14)
plt.ylabel(X.columns[1], size=14)
plt.title('SVM Decision Region Boundary', size=16)

Ошибка получения:- ValueError: y должен быть массивом NumPy. Найденный

также пытался преобразовать Y в NumPy. Затем он выдает ошибку ValueError: y должен быть целочисленным массивом. Найденный объект. Попробуйте передать массив как y.astype (np.integer)

наконец я преобразовал его в массив целых чисел. Теперь это ошибка. ValueError: Значения заполнителя должны быть предоставлены, когда X имеет более 2 обучающих функций.

2 ответа

Вы можете использовать PCA, чтобы уменьшить многомерные данные ваших данных до двумерных данных. Затем передайте полученный результат вplot_decision_region и не будет необходимости в значениях наполнителя.

from sklearn.decomposition import PCA
from mlxtend.plotting import plot_decision_regions

clf = SVC(C=100,gamma=0.0001)
pca = PCA(n_components = 2)
X_train2 = pca.fit_transform(X_train)
clf.fit(X_train2, y_train)
plot_decision_regions(X_train2, y_train, clf=clf, legend=2)

plt.xlabel(X.columns[0], size=14)
plt.ylabel(X.columns[1], size=14)
plt.title('SVM Decision Region Boundary', size=16)

Я провел некоторое время с этим, как plot_decision_regions потом жаловался ValueError: Column(s) [2] need to be accounted for in either feature_index or filler_feature_values и есть еще один параметр, необходимый, чтобы избежать этого.

Итак, скажем, у вас есть 4 функции, и они приходят без имени:

X_train_std.shape[1] = 4

Мы можем ссылаться на каждую функцию по их индексу 0, 1, 2, 3. Вы можете отображать только 2 объекта одновременно, скажем, хотите 0 а также 2,

Вам нужно будет указать один дополнительный параметр (к тому, который указан в ответе @sos.cott), feature_index, и заполнить остальные заполнителями:

value=1.5
width=0.75

fig = plot_decision_regions(X_train.values, y_train.values, clf=clf,
              feature_index=[0,2],                        #these one will be plotted  
              filler_feature_values={1: value, 3:value},  #these will be ignored
              filler_feature_ranges={1: width, 3: width})

Вы можете просто сделать (Предполагая, что X_train и y_train по-прежнему являются пандами данных) для проблемы с массивом numpy.

plot_decision_regions(X_train.values, y_train.values, clf=clf, legend=2)

Для проблемы filler_feature вы должны указать количество функций, чтобы сделать следующее:

value=1.5
width=0.75

fig = plot_decision_regions(X_train.values, y_train.values, clf=clf,
                  filler_feature_values={2: value, 3:value, 4:value},
                  filler_feature_ranges={2: width, 3: width, 4:width},
                  legend=2, ax=ax)

Вам нужно добавить одну функцию наполнителя для каждой функции, которая у вас есть.

Другие вопросы по тегам