簡體   English   中英

在SVM中將RBF內核與卡方距離度量結合使用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM