gpt4 book ai didi

python - SVM scikit learn 的归一化或标准化数据输入

转载 作者:行者123 更新时间:2023-11-30 23:12:26 29 4
gpt4 key购买 nike

正如题主所说,我在规范化方面遇到了一些麻烦,scikitlearn 中 SVM 回归数据集的标准化。

我的问题是:

  1. 当我想搜索 SVM 的参数时(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)

    我应该标准化 fit 函数中的 X_trainTargetT 向量吗?

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

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

非常感谢。

最佳答案

  1. 只有输入特征X_train需要标准化,而不是目标变量,目标变量应该是分类任务的整数值(例如,用于二元分类的 0 和 1 数组)或字符串标签(例如 'spam''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)

要网格搜索此类管道的内部模型的参数,您必须使用类名的小写版本作为前缀:例如'svr__C''svr__gamma''svr__epsilon'

关于python - SVM scikit learn 的归一化或标准化数据输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29819428/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com