Поддержка векторной регрессии (SVR) не отображает граф в Ubuntu 18.04 LTS

1

Я использую Python 2.7.15rc1 в Ubuntu 18.04 LTS. Я пытался построить график поддержки векторной регрессии, но я получаю любой результат.

import matplotlib
matplotlib.use("Agg")
import numpy as np
from sklearn.svm import SVR
import matplotlib.pyplot as plt

#Generate Sample data
x = np.sort(5 * np.random.rand(40, 1), axis = 0)
y = np.sin(x).ravel()

#Add noise to targets
y[::5] += 3 * (0.5 - np.random.rand(8))

#create classifier regression model
svr_rbf = SVR(kernel="rbf", C=1000, gamma=0.1)
svr_lin = SVR(kernel="linear", C=1000, gamma=0.1)
svr_poly = SVR(kernel="poly", C=1000, gamma=0.1)

#Fit regression model
y_rbf = svr_rbf.fit(x,y).predict(x)
y_lin = svr_lin.fit(x,y).predict(x)
y_poly = svr_poly.fit(x,y).predict(x)

#Plotting of results
lw = 2
plt.scatter(x, y, color="darkorange", label="data")
plt.plot(x, y_rbf, color="navy", lw=lw, label="RBF Model")
plt.plot(x, y_lin, color="c", lw=lw, label="Linear Model")
plt.plot(x, y_poly, color="cornflowerblue", lw=lw, label="Polynomial Model")
plt.xlabel("data")
plt.ylabel("target")
plt.title("Support Vector Regression")
plt.legend()
plt.show()

python svm.py ничего не выводит. Я что-то пропустил для импорта? или мы не можем построить график этого? Я новичок в машинном обучении

Теги:
machine-learning
matplotlib
scikit-learn
svm

2 ответа

0
Лучший ответ

Вам просто нужно добавить %matplotlib inline вверху вашего кода, если вы работаете на ноутбуке Jupyter Ipython. Вы можете прочитать об этом здесь и здесь.

В противном случае я скопировал ваш код и удалил matplotlib.use("Agg"), он работает для меня на Ubuntu 18.04, matplotlib версии 2.2.2. Можете ли вы указать, какую версию вы используете?

Также здесь приведен код,

import matplotlib
import numpy as np
from sklearn.svm import SVR
import matplotlib.pyplot as plt

#Generate Sample data
x = np.sort(5 * np.random.rand(40, 1), axis = 0)
y = np.sin(x).ravel()

#Add noise to targets
y[::5] += 3 * (0.5 - np.random.rand(8))

#create classifier regression model
svr_rbf = SVR(kernel="rbf", C=1000, gamma=0.1)
svr_lin = SVR(kernel="linear", C=1000, gamma=0.1)
svr_poly = SVR(kernel="poly", C=1000, gamma=0.1)

#Fit regression model
y_rbf = svr_rbf.fit(x,y).predict(x)
y_lin = svr_lin.fit(x,y).predict(x)
y_poly = svr_poly.fit(x,y).predict(x)

#Plotting of results
lw = 2
plt.scatter(x, y, color="darkorange", label="data")
plt.plot(x, y_rbf, color="navy", lw=lw, label="RBF Model")
plt.plot(x, y_lin, color="c", lw=lw, label="Linear Model")
plt.plot(x, y_poly, color="cornflowerblue", lw=lw, label="Polynomial Model")
plt.xlabel("data")
plt.ylabel("target")
plt.title("Support Vector Regression")
plt.legend()
plt.show()

Изображение 174551

  • 0
    Python 2.7.15rc1, Ubuntu 18.04 LTS и matplotlib: 2.2.2. Я попытался удалить matplotlib.use("Agg") но получил ошибку _tkinter.TclError: нет отображаемого имени и нет переменной окружения $ DISPLAY. Я использую замазку для подключения моей машины и запуска Python svm.py. Это верно?
  • 0
    В вашем случае было бы лучше, чтобы сохранить вашу фигуру, я думаю. Я не уверен, но некоторые переменные среды должны быть установлены для просмотра сгенерированного png.
Показать ещё 9 комментариев
0

Matplotlib может использовать один из нескольких "бэкэндов" для создания графиков. Эти бэкэнды делают разные вещи. В вашем случае вы указали Agg backend, который используется для записи файлов PNG:

matplotlib.use("Agg")

Поэтому решение состоит в том, чтобы удалить эту строку, чтобы использовать бэкэнд по умолчанию для вашей системы или выбрать бэкэнд, который создает графики на экране. Вы могли бы сначала:

matplotlib.use("GTK3Agg")
matplotlib.use("WXAgg")
matplotlib.use("TkAgg")
matplotlib.use("Qt5Agg")

См. Https://matplotlib.org/faq/usage_faq.html#what-is-a-backend для полного списка бэкэндов.

  • 0
    Я пробовал выше бэкэнды, но они получали разные ошибки от matplotlib. @Sergey
  • 0
    Ну, попробуй все бэкэнды. По крайней мере, некоторые должны работать.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню