支持向量回归 (SVR) 在 Ubuntu 18.04 LTS 中不绘制图形

Posted

技术标签:

【中文标题】支持向量回归 (SVR) 在 Ubuntu 18.04 LTS 中不绘制图形【英文标题】:Support Vector Regression (SVR) plots no graph in Ubuntu 18.04 LTS 【发布时间】:2018-11-25 22:33:11 【问题描述】:

我在 Ubuntu 18.04 LTS 中使用 Python 2.7.15rc1。我试图绘制支持向量回归图,但我没有得到任何输出。

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 什么也不输出。 我错过了要导入的东西吗?或者我们不能绘制这个图表? 我是机器学习新手

【问题讨论】:

【参考方案1】:

如果您在 Jupyter Ipython notebook 上运行,您只需在代码顶部添加 %matplotlib inline。你可以阅读更多关于它的信息here 和here。

否则,我复制了您的代码并删除了 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()

【讨论】:

Python 2.7.15rc1、Ubuntu 18.04 LTS 和 matplotlib:2.2.2。我尝试删除 matplotlib.use("Agg"),但出现错误 _tkinter.TclError: no display name and no $DISPLAY environment variable。 我正在使用 putty 连接我的机器并运行 python svm.py我>。这是正确的吗? 在你的情况下,我认为最好保存你的数字。我不确定,但需要设置一些环境变量才能查看生成的 png。 /etc/matplotlibrc backend : TkAgg 中仅启用,其余所有行均已注释。可以吗? 我认为您需要使用带有 -X 参数的 ssh 来启用显示转发。类似 ssh -X system-id 我认为您必须使用 matplotlib.org/api/_as_gen/matplotlib.pyplot.savefig.html 保存绘图【参考方案2】:

Matplotlib 可以使用多个“后端”之一来生成图形。这些后端做不同的事情。在您的情况下,您指定了用于编写 PNG 文件的 Agg 后端:

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。

【讨论】:

我在后端尝试过,但是这些后端从 matplotlib 中得到了不同的错误。 @Sergey 好吧,试试所有的后端。至少有些应该可以工作。 我尝试过其他类似 Qt 的方法,但没有运气。我安装了依赖库,但还是一样。

以上是关于支持向量回归 (SVR) 在 Ubuntu 18.04 LTS 中不绘制图形的主要内容,如果未能解决你的问题,请参考以下文章

support vector regression(SVR)支持向量回归

支持向量机回归预测SVR——MATLAB超详细代码实现过程

在 Scikit Learn 中使用网格搜索 (GridSearchCV) 和管道的支持向量回归 (SVR) 中的系数

机器学习二十二:支持向量机回归SVR

ML-9-4支持向量机--SVM回归模型(SVR)

SVR预测基于混沌灰狼优化支持向量机回归预测SVR模型matlab源码