如何使用 python 多次训练 SVM 分类器?
How to train SVM classifier multiple times using python?
是否可以多次训练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))
我的建议是创建您希望测试的参数列表,然后 运行 通过 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 循环完成一样。
如果有帮助请告诉我!
是否可以多次训练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))
我的建议是创建您希望测试的参数列表,然后 运行 通过 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 循环完成一样。
如果有帮助请告诉我!