我正在尝试将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我没有得到任何错误。
答案 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”。