Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scikit learn 支持向量机(SVM)的特征_Scikit Learn_Classification_Svm_Svd - Fatal编程技术网

Scikit learn 支持向量机(SVM)的特征

Scikit learn 支持向量机(SVM)的特征,scikit-learn,classification,svm,svd,Scikit Learn,Classification,Svm,Svd,我必须用支持向量机对一些文本进行分类。在我的火车文件中,我有5个不同的类别。我必须先用“单词袋”特征进行分类,然后用SVD特征进行分类,保持总方差的90% 我正在使用python和sklearn,但我不知道如何创建上面的SVD特性 我的列车组用tab(\t)分隔,我的文本在“内容”列,类别在“类别”列 tf idf/PCA/SVM工作流的高级步骤如下: 加载数据(在您的情况下会有所不同): 预处理特征和训练分类器: from sklearn.feature_extraction.text imp

我必须用支持向量机对一些文本进行分类。在我的火车文件中,我有5个不同的类别。我必须先用“单词袋”特征进行分类,然后用SVD特征进行分类,保持总方差的90%

我正在使用python和sklearn,但我不知道如何创建上面的SVD特性


我的列车组用tab(\t)分隔,我的文本在“内容”列,类别在“类别”列

tf idf/PCA/SVM工作流的高级步骤如下:

加载数据(在您的情况下会有所不同):

预处理特征和训练分类器:

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.decomposition import PCA
from sklearn.svm import SVC

vectorizer = TfidfVectorizer()
X_tfidf = vectorizer.fit_transform(train_text)

pca = PCA(.8)
X = pca.fit_transform(X_tfidf.todense())

clf = SVC(kernel="linear")
clf.fit(X,y)
最后,对
test
dataset执行相同的预处理步骤并进行预测

PS

如果愿意,您可以将预处理步骤组合到
管道中

from sklearn.preprocessing import FunctionTransformer
from sklearn.pipeline import Pipeline
preproc = Pipeline([('tfidf',TfidfVectorizer())
                    ,('todense', FunctionTransformer(lambda x: x.todense(), validate=False))
                    ,('pca', PCA(.9))])
X = preproc.fit_transform(train_text)

然后再使用它来处理测试数据。

先做,然后只保留对90%方差负责的特性。最后,在TfidfVectorizer中,我只使用stop_words参数,可以吗?如何使用pca?todense()使我的程序太慢,我可以改用TruncatedSVD吗?可以,但在这种情况下,您需要手动调整组件的数量,而不是指定解释的方差百分比。这有帮助吗?如果是这样的话,你可以考虑接受并投票表决这个答案。我仍然试图通过使用TruncatedSVD使它工作,这是因为我还没有接受这个答案。当我找到解决问题所需的结果时,我会接受。
from sklearn.preprocessing import FunctionTransformer
from sklearn.pipeline import Pipeline
preproc = Pipeline([('tfidf',TfidfVectorizer())
                    ,('todense', FunctionTransformer(lambda x: x.todense(), validate=False))
                    ,('pca', PCA(.9))])
X = preproc.fit_transform(train_text)