自定义SVM多项式核函数 sklearn

我被分配了一个任务,要开发一个自定义的多项式(阶数为3、4、5)核函数用于SVM,并将其准确性与sklearn内置的多项式核函数进行比较(应该几乎相同)。我试图按照多项式核函数的定义来实现,但我的结果似乎不太相似,这是我的代码:

def poly_kernel_fn(X, Y):# 实现一个多项式核函数#  - 参数:两个形状为[n_samples, n_features]的numpy数组#  - 返回:计算后的核矩阵,形状为[n_samples, n_samples]K = np.zeros((X.shape[0],Y.shape[0]))K = (X.dot(Y.T) + 1)**4return Kclfpoly = svm.SVC(kernel='poly', degree=4)clfpoly.fit(X_train, y_train)zpoly = clfpoly.predict(X_test)print("内置3D多项式核函数的准确率为: ",accuracy_score(y_test, zpoly)*100,"%")clf = svm.SVC(kernel=poly_kernel_fn)clf.fit(X_train, y_train)z = clf.predict(X_test)print("自定义rbf核函数的准确率为: ",accuracy_score(y_test, z)*100,"%")

准确率结果如下:

  • 内置4D多项式核函数的准确率为: 56.99999999999999 %
  • 自定义核函数的准确率为: 59.0 %

如果我将多项式的阶数改为3或5,准确率变化会更大,所以我不知道是我做错了什么,还是根本不可能匹配内置的准确率。

感谢您的帮助


回答:

你需要查看多项式情况的定义,网址为

https://scikit-learn.org/stable/modules/svm.html#svm-kernels

enter image description herecoef = 0 和 gamma = 1/(n_features*.var())然后你就能得到相同的结果

from sklearn.datasets import make_classificationfrom sklearn import svmimport numpy as npgamma = None   def poly_kernel_fn(X, Y):      K = np.zeros((X.shape[0],Y.shape[0]))   K = (gamma*X.dot(Y.T))**4   return K      if __name__=="__main__":        X, Y = make_classification(10, 5)  # 随机数据        clf1 = svm.SVC(kernel='poly', degree=4) # 内置函数        clf1.fit(X, Y)    print("内置函数得分 = ", clf1.score(X,Y))        gamma = 1/(5*X.var())        clf2 = svm.SVC(kernel=poly_kernel_fn)        clf2.fit(X, Y)    print("自定义函数得分 = ", clf2.score(X,Y))
In [9]: run main.py内置函数得分 =  0.8自定义函数得分 =  0.8

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注