Отрисовка графика работы алгоритма SVM для задачи классификации

Решал задачу по классификации спама(ноутбук), используя разные методы классификации. Запустил алгоритм SVM, зафиттил, отрисовал работоспособность алгоритма через t-SNE. Еще решил нарисовать подобный график: введите сюда описание изображения

Использовал код отсюда:

plt.figure(figsize=(10, 8))
sns.scatterplot(x=X_train_scaled[:, 0], y=X_train_scaled[:, 1], hue=Y_train, s=8)

# Constructing a hyperplane using a formula.
w = model2.coef_[0]  # w consists of 2 elements
b = model2.intercept_[0]  # b consists of 1 element
x_points = np.linspace(X_train_scaled[:, 0].min(), X_train_scaled[:, 0].max())  # generating x-points
y_points = -(w[0] / w[1]) * x_points - b / w[1]  # getting corresponding y-points
plt.plot(x_points, y_points, c='r')
plt.show()

в итоге появилась ошибка <__array_function__ internals>:200: SparseEfficiencyWarning: Comparing a sparse matrix with 0 using == is inefficient, try using != instead..
Никак не пойму в чем ошибка. Или с векторизованными данными такой рисунок не получится?


Ответы (1 шт):

Автор решения: CrazyElf

Судя по ноутбуку по ссылке, скорее всего ошибка в этой строке:

sns.scatterplot(x=X_train_scaled[:, 0], y=X_train_scaled[:, 1], hue=Y_train, s=8)

А сама ошибка идёт из Pandas, которым внутри пользуется Seaborn - про разреженную матрицу, что она не хэшируемая:

TypeError: unhashable type: 'csr_matrix'

Какая-то из матриц X_train_scaled и Y_train разреженная (а может и обе, но скорее всё-таки это X), а Seaborn с таким неправильно работает. Попробуйте привести разреженную матрицу к обычной через метод .todense().

Update Да, судя по всему X_train_scaled - это разреженная матрица большой размерности, не зря для её отрисовки вы выше использовали t-SNE. Продолжайте и тут использовать t-SNE, чтобы получить две координаты для отрисовки вместо 100500+ координат. Просто взять координаты 0 и 1 из 100500+ координат вам вряд ли что даст интересного для отрисовки, даже если вы сделаете обычные матрицы из разреженных.

→ Ссылка