【发布时间】:2021-03-14 06:31:38
【问题描述】:
我正在使用 sklearn 和 SVC 在虹膜数据上测试带有 sigmoid 内核的 SVM。它的性能极差,准确率为 25%。我使用完全相同的代码并将功能标准化为https://towardsdatascience.com/a-guide-to-svm-parameter-tuning-8bfe6b8a452c(sigmoid 部分),这应该会大大提高性能。但是,我无法重现他的结果,准确率仅提高到 33 %。
使用其他内核(例如线性内核)会产生良好的结果(准确率为 82 %)。 SVC(kernel = 'sigmoid') 函数中是否存在问题?
重现问题的 Python 代码:
##sigmoid iris example
from sklearn import datasets
iris = datasets.load_iris()
from sklearn.svm import SVC
sepal_length = iris.data[:,0]
sepal_width = iris.data[:,1]
#assessing performance of sigmoid SVM
clf = SVC(kernel='sigmoid')
clf.fit(np.c_[sepal_length, sepal_width], iris.target)
pr=clf.predict(np.c_[sepal_length, sepal_width])
pd.DataFrame(classification_report(iris.target, pr, output_dict=True))
from sklearn.metrics.pairwise import sigmoid_kernel
sigmoid_kernel(np.c_[sepal_length, sepal_width])
#normalizing features
from sklearn.preprocessing import normalize
sepal_length_norm = normalize(sepal_length.reshape(1, -1))[0]
sepal_width_norm = normalize(sepal_width.reshape(1, -1))[0]
clf.fit(np.c_[sepal_length_norm, sepal_width_norm], iris.target)
sigmoid_kernel(np.c_[sepal_length_norm, sepal_width_norm])
#assessing perfomance of sigmoid SVM with normalized features
pr_norm=clf.predict(np.c_[sepal_length_norm, sepal_width_norm])
pd.DataFrame(classification_report(iris.target, pr_norm, output_dict=True))
【问题讨论】:
标签: python machine-learning scikit-learn svm