我如何让我的支持向量回归来绘制我的多项式图
How do i get my support vector regression to work to plot my polynomial graph
我已经为多项式图编译了我的代码,但它没有绘图。我正在使用 scikit learn 的 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
试试下面的代码。支持向量机期望它们的输入具有零均值和单位方差。不是剧情,是堵。这是对 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)
只是以马特的回答为基础。你的策划没有任何错误。当你用 'unreasonably' 大数调用 svr_poly.fit 时,不会抛出任何错误(但我仍然不得不杀死我的内核)。通过修改此代码中的指数值,我估计您可以在它中断之前达到 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()
我已经为多项式图编译了我的代码,但它没有绘图。我正在使用 scikit learn 的 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
试试下面的代码。支持向量机期望它们的输入具有零均值和单位方差。不是剧情,是堵。这是对 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)
只是以马特的回答为基础。你的策划没有任何错误。当你用 'unreasonably' 大数调用 svr_poly.fit 时,不会抛出任何错误(但我仍然不得不杀死我的内核)。通过修改此代码中的指数值,我估计您可以在它中断之前达到 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()