如何在 weka 中为 svm (smo) 使用字符串数据

how to use string data for svm (smo) in weka

我有一个包含一些句子(波斯语)和每个句子前面的单词的 arff 文件,它在@data 部分显示它的 class。我需要使用 smo 进行 class 化。问题:

1) 有必要把句子改成向量吗?

2) 我选择了 "string to word vector",但是 smo 处于非活动状态并且仍然无法正常工作。 (当然还有其他算法,如朴素贝叶斯)。

如何将此文本数据与 smo 一起使用?

上图是一个非常小的示例文件。

文件样本: https://www.dropbox.com/s/ohpyortve8jbwhe/shoor.arff?dl=0

首先,您需要应用 "string to word vector" 过滤器。之后,在 classify 选项卡上,您需要将目标 class 更改为“(Nom) class”。这足以启用朴素贝叶斯和 SVM 算法。我下载了数据集,效果很好。

您可以按照本教程进行操作: https://www.youtube.com/watch?v=zlVJ2_N_Olo

希望对您有所帮助

from sklearn.feature_extraction.text import TfidfVectorizer
import arff
from sklearn import svm
import numpy as np
from sklearn.model_selection import train_test_split

data=list(arff.load('shoor.arff'))

text=[]
label=[]
for r in data:
    if (len(r)>1):
        text.append(r[0])
        label.append(r[1])
tfidf = TfidfVectorizer().fit_transform(text)
features = (tfidf * tfidf.T).A


X_train, X_test, y_train, y_test = train_test_split(features, label, test_size=0.5, random_state=0)
clf = svm.SVC(kernel='linear', C=1).fit(X_train, y_train)
clf.score(X_test, y_test)

1.0