代码之家  ›  专栏  ›  技术社区  ›  Hannan

支持向量回归:类型错误:必须是实数,而不是str

  •  2
  • Hannan  · 技术社区  · 6 年前

    我正在尝试将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\u列,y\u列,我没有得到任何错误。

    2 回复  |  直到 6 年前
        1
  •  17
  •   Tim    6 年前

    gamma 需要一个浮点值,但您正在传递 "scale" documentation 在这一点上有点误导。

    所以只要改变 伽马 对于如下所示的浮点值:

    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)
    

    伽马 参数。

        2
  •  3
  •   Filnor    6 年前

    >>> 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
  •  0
  •   EnVs    6 年前


    下面这行没有问题:

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

    再次检查它使用:

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

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