Отрисовка графика работы алгоритма 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 шт):
Судя по ноутбуку по ссылке, скорее всего ошибка в этой строке:
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+ координат вам вряд ли что даст интересного для отрисовки, даже если вы сделаете обычные матрицы из разреженных.