支持向量回归:TypeError:必须为实数,而不是str

时间:2018-09-30 22:50:41

标签: python scikit-learn

我正在尝试将sklearn SVR用于小型数据集。尝试拟合()数据时出现错误

  

TypeError:必须为实数,而不是str

这是我的数据和代码:

     Revenue   Units      Rev_per_unit
0    147754.0  8333629.0  17.73
1    126146.0  7601824.0  16.59
2    152385.0  8487163.0  17.95
3    138703.0  8170619.0  16.98
4    157860.0  8589258.0  18.38
5    159981.0  8634245.0  18.53
6    160006.0  9063836.0  17.65
7    143556.0  9315878.0  15.41
8    129380.0  9012887.0  14.35
9    135771.0  9370077.0  14.49
10   129593.0  9018405.0  14.37
11   123941.0  9410973.0  13.17

from sklearn.svm import SVR
df = pd.read_csv('revenue.csv')
X = df[['Revenue', 'Unit']]
y = df['Rev_per_unit']
X_train, X_test, y_train, y_test = train_test_split(X, y)
svr_reg = SVR(gamma='scale', C=1.0, epsilon=0.2)
svr_reg.fit(X_train, y_train)

我理解错误,但是当我为LinearRegression()使用相同的数据时,对于相同的X_train y_train我没有得到任何错误。

3 个答案:

答案 0 :(得分:14)

参数gamma需要一个浮点值,但是您正在传递"scale"。我知道documentation在这一点上有些误导。

因此只需将gamma更改为如下所示的浮点值:

X_train, X_test, y_train, y_test = train_test_split(X, y)
svr_reg = SVR(gamma=0.001, C=1.0, epsilon=0.2)
svr_reg.fit(X_train, y_train)

或仅删除gamma参数。

答案 1 :(得分:3)

通过scikit-learn.org网站时遇到相同的问题:

>>> clf.set_params(kernel='rbf', gamma='scale').fit(X,y)

输出(缩小):

...
File "sklearn/svm/libsvm.pyx", line 58, in sklearn.svm.libsvm.fit
TypeError: must be real number, not str

必须检查伽玛的“类型”

>>> type(clf.gamma)
<class 'float'>

无论如何,传递字符串('scale')都行不通。

最好的选择是为其传递浮点值(gamma = 0.001)

答案 2 :(得分:0)

最近更新为scikit-learn v0.20.3,该问题似乎已解决。
下面的行没有问题:

clf.set_params(kernel='rbf', gamma='scale').fit(X,y)

使用以下方法再次检查了它:

>>> type(clf.gamma)
<class 'str'>

类型不再是“ float”,而是“ str”。