Построение графика логистической регрессии для векторизованных данных
Всем привет. Решал задачу по распознаванию спама, используя разные методы классификации, такие как Naive Bayes, Log regression, тем самым тестируя что работает лучше.
Проблема: Никак не получается отрисовать график для логистической регрессии.
Полный код. Датасет взят из Kaggle.
Ход работы:
- Прочитал файл и сделал data cleaning.
- Так как данные в виде текста, проделал векторизацию текста и LabelEncoding.
- Применил функцию лог регрессии.
- Отрисовал график таким образом:
y_pred = y_pred.squeeze()
y_prob = model.predict_proba(X_test_vectorized)
# Plot scatter plot
sns.scatterplot(x= range(len(y_pred)), y=y_pred, hue= Y_test)
plt.figure()
sns.scatterplot(x = range(len(y_pred)), y = y_prob[:,1], hue = Y_test)
plt.xlabel('Text Feature')
plt.ylabel('Predicted')
plt.legend()
plt.show()
Ответы (1 шт):
Построить график логистической регрессии в привычном виде в данном случае не получится, т.к в этом коде проводится векторизация текста, которая приводит к тому, что количество признаков (фич) резко возрастает. В результате, вместо нескольких переменных у нас получается большое количество признаков
В данном случае разумно использовать метод уменьшения размерности t-SNE,которая помогает визуализировать данные, уменьшив их до двух или трех измерений, что делает результаты работы алгоритма более наглядными.
- Сначало выбираем 1000 точек из данных. Для целей визуализации достаточно меньшего подмножества данных. Даже 1000 точек часто достаточно, чтобы получить представление о структуре данных и различиях между классами.
- Выбираем модель, в данном случае логрег
- Объявляем и фитим t-SNE
- Создаем датафрейм для результатов
- Отрисовка графика
data_1000 = X_train_scaled[0:1000, :]
labels_1000 = labels[0:1000]
model = LogisticRegression(random_state = 42)
model.fit(data_1000, labels_1000)
transformed_data = model.predict_proba(data_1000)
tsne_model = TSNE(n_components=2, random_state=0, init='random')
tsne_data = tsne_model.fit_transform(transformed_data)
tsne_data = np.vstack((tsne_data.T, labels_1000)).T
tsne_df = pd.DataFrame(data=tsne_data, columns=("Dim_1", "Dim_2", "label"))
plt.figure(figsize=(8, 6))
sns.scatterplot(data=tsne_df, x='Dim_1', y='Dim_2', hue='label', palette="bright")
plt.xlabel("Component 1")
plt.ylabel("Component 2")
plt.title("Scatter plot of t-SNE results after applying Logistic Regression")
plt.legend()
plt.show()