如何正确计算SVM的最佳C和gamma?

时间:2017-09-26 13:05:48

标签: python scikit-learn

我正在尝试为我的SVM计算最佳C和Gamma。尝试运行我的脚本时出现此错误:

ValueError: Invalid parameter max_features for estimator SVC. Check the list of available parameters with estimator.get_params()。键().

我经历了the docs以了解n_estimators实际意味着什么,以便我知道应该填写哪些值。但这对我来说并不完全清楚。有人能告诉我这个值应该是什么,以便我可以运行我的脚本以找到最佳的C和gamma吗?

我的代码:

if __name__=='__main__':

    fname = "/home/John/labels.csv"
    labels = pd.read_csv(fname, header=None).as_matrix()[:, 1]
    labels = map(itemgetter(1),
                 map(os.path.split,
                     map(os.path.dirname, labels))) 

    fname = "/home/John/reps.csv" 
    embeddings = pd.read_csv(fname, header=None).as_matrix()
    le = LabelEncoder().fit(labels)
    labelsNum = le.transform(labels)
    nClasses = len(le.classes_)


    svcClassifier = SVC(kernel='rbf', probability=True, C=10, gamma=10)
    #classifier = OneVsRestClassifier(svcClassifier).fit(embeddings, labelsNum)
    param_grid = { 
        'n_estimators': [200, 700],
        'max_features': ['auto', 'sqrt', 'log2']
    }

    CV_rfc = GridSearchCV(estimator=svcClassifier, param_grid=param_grid, cv= 5)
    CV_rfc.fit(embeddings, labelsNum)
    print CV_rfc.best_params_

尝试后,我手动发现在我的情况下C=10gamma=10会给出最佳效果。但是,我想使用此函数来找出最佳值应该是什么。

我的代码由以下帖子撰写:How to get Best Estimator on GridSearchCV (Random Forest Classifier Scikit)

1 个答案:

答案 0 :(得分:0)

SVC类没有参数max_featuresn_estimators,因为这些是您用作代码基础的RandomForest的参数。如果您想优化有关Cgamma的模型,可以尝试使用:

param_grid = { 
    'C': [0.1, 0.5, 1.0],
    'gamma': [0.1, 0.5, 1.0]
}

此外,我还建议您在kernel框架中搜索最佳rbflinearpolysklearn。< / p>

编辑:这里的值只是一个仲裁,用于说明一般方法。您应该在这里添加许多不同的值,这取决于您的情况。其范围也取决于您的情况。