Регрессионный дисплей для данных Matplotlib - PullRequest
0 голосов
/ 22 февраля 2019

Вот мой набор данных: t.csv
Я ищу такой дисплей:
enter image description here Красная точка для отрицательного значения, серая для0 и синий для положительного.
Я попытался сослаться на пример из: Логистическая регрессия

def plot_decision_boundary(pred_func):
    # Set min and max values and give it some padding
    x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5
    y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5
    h = 0.01
    # Generate a grid of points with distance h between them
    xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
    # Predict the function value for the whole gid
    Z = pred_func(np.c_[xx.ravel(), yy.ravel()])
    Z = Z.reshape(xx.shape)
    # Plot the contour and training examples
    plt.contourf(xx, yy, Z, cmap=plt.cm.Spectral)
    plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Spectral)

Получил вышеуказанную функцию для построения, но не понял ее.
Я хочу выглядеть как на картинке выше.Как я могу это сделать?Пожалуйста, дайте мне знать.

1 Ответ

0 голосов
/ 22 февраля 2019

Хорошо, давайте начнем с загрузки ваших данных

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

df = pd.read_csv('/home/b2003864/t.csv', header=0)

Далее достаточно просто получить желаемые точки разброса, используя ax.scatter

fig, ax = plt.subplots(1, 1)

# Plot positive values in red (C3)
ax.scatter(np.argwhere(df['real'] > 0), df.loc[df['real'] > 0, 'real'], color='C3', edgecolors='k')
# Plot negative values in blue (C0)
ax.scatter(np.argwhere(df['real'] < 0), df.loc[df['real'] < 0, 'real'], color='C0', edgecolors='k')
# Plot neutral value in grey (C7)
ax.scatter(np.argwhere(df['real'] == 0), df.loc[df['real'] == 0, 'real'], color='C7', edgecolors='k')

Наконец, мы можем использовать ax.fill_between, чтобы построить заштрихованные области, как вы хотели:

ax.fill_between([-5, 35], -0.002, 0, color='C0', zorder=-1, alpha=0.7)
ax.fill_between([-5, 35], 0, 0.002, color='C3', zorder=-1, alpha=0.7)

ax.set_ylim([-0.00015, 0.00015])
ax.set_xlim([-5, 35])

Все это вместе дало мне:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...