【问题标题】:Support Vector Regression: TypeError: must be real number, not str支持向量回归:TypeError:必须是实数,而不是 str
【发布时间】:2019-03-06 01:44:27
【问题描述】:

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

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,我没有收到任何错误。

【问题讨论】:

    标签: python scikit-learn


    【解决方案1】:

    参数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 参数。

    【讨论】:

    • 链接现在无效。其实到目前为止,除了SVR,sklearn中的libsvm也有同样的问题。
    • @Tengerye 我已经更新了链接。现在它应该又可以工作了
    【解决方案2】:

    浏览 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)

    【讨论】:

      【解决方案3】:

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

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

      双重检查使用:

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

      类型不再是 'float' 而是 'str'。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多