如何在 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
我有一个包含一些句子(波斯语)和每个句子前面的单词的 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