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)
Вам нужно добавить одну функцию наполнителя для каждой функции, которая у вас есть.