如何让我的支持向量回归来绘制我的多项式图

时间:2016-09-09 12:15:34

标签: python machine-learning scikit-learn svm

我已编译了多项式图的代码,但它没有绘图。我正在使用scikit学习的SVR(支持向量回归),我的代码如下。它没有显示任何错误消息,它只是显示我的数据。我不知道发生了什么。有没有人?它甚至没有在描述我的数据的变量控制台上显示任何内容。

import pandas as pd
import numpy as np
from sklearn.svm import SVR
from sklearn import cross_validation
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt



df = pd.read_csv('coffee.csv')
print(df)

df = df[['Date','Amount_prod','Beverage_index']]

x = np.array(df.Amount_prod)
y = np.array(df.Beverage_index)

x_train, x_test, y_train, y_test = cross_validation.train_test_split(
x, y, test_size=0.2)

x_train = np.pad(x, [(0,0)], mode='constant')
x_train.reshape((26,1))

y_train = np.pad(y, [(0,0)], mode='constant')
y_train.reshape((26,1))

x_train = np.arange(26).reshape((26, 1))
x_train = x.reshape((26, 1))
c = x.T
np.all(x_train == c)

x_test = np.arange(6).reshape((-1,1))
x_test = x.reshape((-1,1))
c2 = x.T
np.all(x_test == c2)

y_test = np.arange(6).reshape((-1,1))
y_test = y.reshape((-1,1))
c2 = y.T
np.all(y_test ==c2)

svr_poly = SVR(kernel='poly', C=1e3, degree=2)
y_poly = svr_poly.fit(x_train,y_train).predict(x_train)




plt.scatter(x_train, y_train, color='black')
plt.plot(x_train,  y_poly)

plt.show()

数据样本:

 Date   Amount_prod Beverage_index
    1990    83000         78
    1991    102000        78
    1992    94567         86
    1993    101340        88
    1994    96909         123
    1995    92987         101
    1996    103489        99
    1997    99650         109
    1998    107849        110
    1999    123467        90
    2000    112586        67
    2001    113485        67
    2002    108765        90

2 个答案:

答案 0 :(得分:2)

尝试以下代码。支持向量机期望他们的输入具有零均值和单位方差。这不是情节,而是封锁。这是对fit的调用。

from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler

svr_poly = make_pipeline(StandardScaler(), SVR(kernel='poly', C=1e3, degree=2))
y_poly = svr_poly.fit(x_train,y_train).predict(x_train)

答案 1 :(得分:0)

只是建立马特的答案。你的阴谋没有任何错误。当你以不合理的方式打电话给svr_poly.fit时#39;大数字没有错误抛出(但我仍然必须杀死我的内核)。通过修改此代码中的指数值,我估计在中断之前你可以达到1e5,但不会更多。因此你的问题。正如Matt所说,应用StandardScaler可以解决您的问题。

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



x_train = np.random.rand(10,1)      # between 0 and 1
y_train = np.random.rand(10,)       # between 0 and 1
x_train = np.multiply(x_train,1e5)  #scaling up to 1e5
svr_poly = SVR(kernel='poly', C=1e3, degree=1)
svr_poly.fit(x_train,y_train)#.predict(x_train)
y_poly = svr_poly.predict(x_train)

plt.scatter(x_train, y_train, color='black')
plt.plot(x_train,  y_poly)

plt.show()
相关问题