使用 TfidfVectorizer 和 Scikit-learn 的 TF-IDF 与 SVM 的低准确度
Posted
技术标签:
【中文标题】使用 TfidfVectorizer 和 Scikit-learn 的 TF-IDF 与 SVM 的低准确度【英文标题】:Low accuracy for TF-IDF with SVM using TfidfVectorizer and Scikit-learn 【发布时间】:2016-10-11 06:13:17 【问题描述】:我正在尝试使用 TF-IDF 和 SVM 将文档分类为欺骗性或真实性。我知道这之前已经完成,但我不太确定我是否正确实施。我有一个文本语料库,并且正在构建 TF-IDF,例如
vectorizer = TfidfVectorizer(min_df=1, binary=0, use_idf=1, smooth_idf=0, sublinear_tf=1)
tf_idf_model = vectorizer.fit_transform(corpus)
features = tf_idf_model.toarray()
对于分类:
seed = random.random()
random.seed(seed)
random.shuffle(features)
random.seed(seed)
random.shuffle(labels)
features_folds = np.array_split(features, folds)
labels_folds = np.array_split(labels, folds)
for C_power in C_powers:
scores = []
start_time = time.time()
svc = svm.SVC(C=2**C_power, kernel='linear')
for k in range(folds):
features_train = list(features_folds)
features_test = features_train.pop(k)
features_train = np.concatenate(features_train)
labels_train = list(labels_folds)
labels_test = labels_train.pop(k)
labels_train = np.concatenate(labels_train)
scores.append(svc.fit(features_train, labels_train).score(features_test, labels_test))
print(scores)
但我收到的准确率约为 50%。我的语料库是 1600 条文本。
【问题讨论】:
您可能想要发布混淆矩阵或更多指标,而不仅仅是准确性。 我也是............考虑到当使用一些聚类算法时它非常正确地选择组关键字这一事实,这真是令人难以置信的低 【参考方案1】:我认为您可能希望在将 TF-IDF 矩阵输入 SVM 之前对其进行缩减,因为 SVM 不太擅长处理大型稀疏矩阵。我建议使用 TruncatedSVD 来降低 TF-IDF 矩阵的维数。
vectorizer = TfidfVectorizer(min_df=1, binary=0, use_idf=1, smooth_idf=0, sublinear_tf=1)
svd = TruncatedSVD(n_components=20)
pipeline = Pipeline([
('tfidf', vectorizer),
('svd', svd)])
features = pipeline.fit_transform(corpus)
当然,您需要调整 n_components
以找到要保留的最佳组件数量。
【讨论】:
我无法让它工作,出现错误TypeError: unbound method fit_transform() must be called with Pipeline instance as first argument (got list instance instead)
@Knokkelgeddon,您是否将fit_transform
作为Pipeline
的方法调用?您能告诉我发生此错误的脚本行吗?
当我添加 TruncatedSVD 时,它的准确率从 50% 降低到 30% :)以上是关于使用 TfidfVectorizer 和 Scikit-learn 的 TF-IDF 与 SVM 的低准确度的主要内容,如果未能解决你的问题,请参考以下文章
在实践中如何使用 TfidfVectorizer 和元数据进行分类?
NotFittedError:TfidfVectorizer - 未安装词汇