Python SVM SCIKIT学习的标准化或标准化数据输入

Python SVM SCIKIT学习的标准化或标准化数据输入,python,scikit-learn,svm,Python,Scikit Learn,Svm,正如主题所说,我在正常化和 scikitlearn中支持向量机回归数据集的标准化 我的问题是: 当我想搜索SVM的参数时(C和gamma 例如)我使用以下代码: param_grid = [ {'C': [1, 10, 100, 1000], 'kernel': ['linear']}, {'C': [1, 10, 100, 1000], 'gamma': [0.001, 0.0001], 'kernel': ['rbf']}, ] svr = svm.SVC() clf = gri

正如主题所说,我在正常化和 scikitlearn中支持向量机回归数据集的标准化

我的问题是:

  • 当我想搜索SVM的参数时(
    C
    gamma
    例如)我使用以下代码:

    param_grid = [
      {'C': [1, 10, 100, 1000], 'kernel': ['linear']},
      {'C': [1, 10, 100, 1000], 'gamma': [0.001, 0.0001], 'kernel': ['rbf']},
     ]
    
    svr = svm.SVC()
    clf = grid_search.GridSearchCV(svr, param_grid)
    clf.fit(X_train,TargetT)
    
    我是否应该标准化
    fit
    功能中的
    X\u列
    TargetT
    向量

    X\u列
    包含介于-1和1之间的值,
    TargetT
    是0的向量 平均值不等于0,标准值不等于1

  • 我尝试在上使用
    预处理.StandardScaler()
    函数
    InputTraining
    InputValidation
    数据集,但当我检查 每个特征的平均值I的值不等于0(平均值 订单号为e-14),std约为1.00000985。是吗 正常还是我做错了什么?我想用天平 数据集作为SVM的输入,代码如下:

    scalerI = preprocessing.StandardScaler()
    X_train = scalerI.fit_transform(InputT)
    X_test = scalerI.transform(InputCross)
    svr = SVR(kernel='rbf', epsilon=0.01, C=100, gamma = 0.01)
    y_rbf = svr.fit(X_train,TargetT)
    y_hat=svr.predict(X_test)
    
  • 多谢各位

  • 只有输入功能
    X\u train
    需要标准化,而不是目标变量,该变量应该是分类任务的整数值(例如二进制分类的0和1数组)或字符串标签(例如
    'spam'
    vs
    'ham'
    )。对于回归任务(预测连续变量,如以摄氏度为单位的温度或以美元为单位的价格),它有时有助于标准化目标,但这通常不如标准化输入特性那样有用

  • 1e-14接近0.0,1.00000985接近1.0

  • 另一方面,您可以使用管道缩短代码:

    from sklearn.pipeline import make_pipeline
    pipeline = make_pipeline(
        preprocessing.StandardScaler(),
        SVR(kernel='rbf', epsilon=0.01, C=100, gamma = 0.01),
    )
    pipeline.fit(X_train, TargetT)
    y_hat = pipeline.predict(X_test)
    

    要网格搜索这样一个管道的内部模型的参数,您必须使用小写版本的类名作为前缀:例如
    'svr\uu C'
    'svr\uu gamma'
    'svr\uu epsilon'

    好的,谢谢!关于第二点,我认为由于它们足够接近0和1,它们仍然可以作为SVM的输入,但我不完全确定。谢谢你的建议