SVM的数据输入的归一化或标准化

2024-10-01 15:28:52 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我的问题是:

  1. 当我想搜索支持向量机的参数时(Cgamma 例如)我使用以下代码:

    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)
    

    我是否应该标准化X_trainTargetT函数中的向量?在

    X_train包含介于-1和1之间的值,TargetT是0的向量 和1,平均值不等于0,std不等于1。

  2. 我试图在上使用preprocessing.StandardScaler()函数 InputTraining和{}数据集,但是当我检查 每个特征值的平均值不等于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)
    

非常感谢。在


Tags: 数据函数paramtrainkernel向量gridfit
1条回答
网友
1楼 · 发布于 2024-10-01 15:28:52
  1. 只有输入特性X_train需要标准化,而不是目标变量,它应该是分类任务的整数值(例如,二进制分类的0和1数组)或字符串标签(例如'spam'vs'ham')。对于回归任务(预测连续变量,如以摄氏度表示的温度或以美元表示的价格),它有时可以帮助标准化目标,但这通常不如标准化输入特性有用。

  2. 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)

要网格化搜索这样一个管道的innner模型的参数,您必须使用类名的小写版本作为前缀:例如'svr__C''svr__gamma'和{}。在

相关问题 更多 >

    热门问题