[英]Use RBF Kernel with Chi-squared distance metric in SVM
如何實現標題提到的任務。 我們在RBF內核中是否有任何參數可以將距離量度設置為卡方距離量度。 我可以在sk-learn庫中看到chi2_kernel。
以下是我編寫的代碼。
import numpy as np
from sklearn import datasets
from sklearn import svm
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, f1_score, precision_score, recall_score, classification_report, confusion_matrix
from sklearn.preprocessing import Imputer
from numpy import genfromtxt
from sklearn.metrics.pairwise import chi2_kernel
file_csv = 'dermatology.data.csv'
dataset = genfromtxt(file_csv, delimiter=',')
imp = Imputer(missing_values='NaN', strategy='most_frequent', axis=1)
dataset = imp.fit_transform(dataset)
target = dataset[:, [34]].flatten()
data = dataset[:, range(0,34)]
X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=0.3)
# TODO : willing to set chi-squared distance metric instead. How to do that ?
clf = svm.SVC(kernel='rbf', C=1)
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
print(f1_score(y_test, y_pred, average="macro"))
print(precision_score(y_test, y_pred, average="macro"))
print(recall_score(y_test, y_pred, average="macro"))
您確定要組成 rbf和chi2嗎? Chi2本身定義了一個有效的內核,您要做的就是
clf = svm.SVC(kernel=chi2_kernel, C=1)
因為sklearn接受函數作為內核(但是這將需要O(N ^ 2)內存和時間)。 如果您想將這兩者組合在一起,則要復雜一些,您將必須實現自己的內核。 為了獲得更多控制權(和其他內核),您還可以嘗試pykernels ,但是尚不支持編寫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.