首页 > 解决方案 > 如何使用python多次训练SVM分类器?

问题描述

是否可以多次训练 SVM 分类器?所以每当我再次运行它时,我都不会手动更改参数

这是我到目前为止训练模型的代码:

    dictionary = make_Dictionary(TRAIN_DIR)

    print("reading and processing emails from file.")

    features_matrix, labels = extract_features(TRAIN_DIR, dictionary)
    test_feature_matrix, test_labels = extract_features(TEST_DIR, dictionary)

    model = svm.SVC(kernel="poly", degree= 4, C = 0.9)



    print("Training Model")

    #train model
    model.fit(features_matrix, labels)

    predicted_labels = model.predict(test_feature_matrix)

    print("FINISHED classifying. accuracy score : ")

    print (accuracy_score(test_labels, predicted_labels))

标签: pythonmachine-learningscikit-learnsvm

解决方案


我的建议是创建您希望测试的参数列表,然后通过 for 循环运行它们。假设您想在四组不同的参数上测试所有内容(请原谅,如果值不是您希望的,可以更改它们,只是为了说明这一点而创建):

degreeArr = [3,4,5,6]
CArr = [0.7,0.8,0.9,1]

我假设这些是您希望弄乱的唯一两个参数。然后你可以编写你的 for 循环:

for x in range(len(degreeArr)): #This assumes degreeArr and CArr are the same length
  model = svm.SVC(kernel='poly', degree=degreeArr[x], C=CArr[x])

  print("Training Model")

  #train model
  model.fit(features_matrix, labels)

  predicted_labels = model.predict(test_feature_matrix)

  print("FINISHED classifying. accuracy score : ")

  print (accuracy_score(test_labels, predicted_labels))

请注意,所做的唯一更改是对模型的更改,因此其余代码保持不变(但必须包含在 for 循环中)。另一个注意事项是 CArr 和 degreeArr 将仅使用数组中的匹配索引进行测试,因为它不是通过双 for 循环完成的。如果您想测试这两个数组中所有可能的组合,只需添加另一个 for 循环并对您的模型进行一些小调整:

for x in range(len(degreeArr)):
  for i in range(len(CArr)):
    model = svm.SVC(kernel='poly', degree=degreeArr[x], C=CArr[i])

您的其余代码将保持不变,就像通过单个 for 循环完成一样。

让我知道这是否有帮助!


推荐阅读