标签: text-classification

为什么KNN精度低但精度高?

我使用 k-nn 对 20NG 数据集进行分类,每个类别有 200 个实例,并进行 80-20 次训练测试分割,其中我发现了以下结果

在此输入图像描述

这里的精度相当低,但是当精度那么低时,精度有多高呢?精度公式不是 TP/(TP + FP) 吗?如果是,那么高精度分类器需要生成高真阳性,这将导致高精度,但是 K-nn 如何在真阳性率太低的情况下生成高精度?

machine-learning nearest-neighbor weka text-classification

2
推荐指数
1
解决办法
4863
查看次数

如何根据Python中最近的聚类质心逻辑将新的观察值分配给现有的Kmeans聚类?

我使用下面的代码通过 Scikit learn 创建 k-means 集群。

kmean = KMeans(n_clusters=nclusters,n_jobs=-1,random_state=2376,max_iter=1000,n_init=1000,algorithm='full',init='k-means++')

kmean_fit = kmean.fit(clus_data)
Run Code Online (Sandbox Code Playgroud)

我还使用保存了质心kmean_fit.cluster_centers_

然后我腌制了 K 均值对象。

filename = pickle_path+'\\'+'_kmean_fit.sav'
pickle.dump(kmean_fit, open(filename, 'wb'))
Run Code Online (Sandbox Code Playgroud)

这样我就可以加载相同的 kmeans pickle 对象并在新数据出现时将其应用到新数据中,使用kmean_fit.predict().

问题 :

  1. 加载 kmeans pickle 对象并应用的方法是否 kmean_fit.predict()允许我根据现有集群的质心将新观察值分配给现有集群?这种方法是否只是从头开始对新数据进行重新聚类?

  2. 如果此方法不起作用,鉴于我已经使用高效的 p​​ython 代码保存了集群质心,如何将新观察值分配给现有集群?

PS:我知道使用现有集群作为因变量构建分类器是另一种方法,但由于时间紧迫,我不想这样做。

python cluster-analysis k-means scikit-learn text-classification

2
推荐指数
1
解决办法
9208
查看次数

我可以同时对测试数据和训练数据使用 CountVectorizer 还是需要将其分开?

我目前有一个 SVM 模型,可以将文本分为两个不同的类别。我目前正在使用 CountVectorizer 和 TfidfTransformer 来创建我的“词向量”。

问题是,当我首先转换所有文本然后将其拆分时,我认为我可能以错误的顺序进行操作。

我的问题是,如果我先执行train_test_split,然后仅对训练数据执行fit_transform,然后对测试数据进行转换,会有什么区别吗?

正确的做法是什么?

非常感谢,祝您编码愉快!

count_vect = CountVectorizer(stop_words='english')
X_counts = count_vect.fit_transform(textList)

tfidf_transformer = TfidfTransformer()
X_tfidf = tfidf_transformer.fit_transform(X_counts)

X_train, X_test, y_train, y_test = train_test_split(X_tfidf, correctLabels, test_size=.33, random_state=17)
Run Code Online (Sandbox Code Playgroud)

machine-learning word-count scikit-learn text-classification

2
推荐指数
1
解决办法
3642
查看次数

编译keras模型后“None”是什么意思?

我正在尝试使用 keras 层实现二进制文本分类模型。编译模型后,总而言之,我在底部得到None ,但我不完全明白它是什么意思?

这是我正在使用的代码。

max_words = 10000
max_len = 500
tok = Tokenizer(num_words=max_words)
tok.fit_on_texts(X_train)
sequences = tok.texts_to_sequences(X_train)
sequences_matrix = sequence.pad_sequences(sequences,maxlen=max_len)

model = Sequential()
model.add(Embedding(max_words, 50, input_length=max_len))
model.add(LSTM(64))
model.add(Dense(256,name='FC1',activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='adam', loss='binary_crossentropy', metrics= 
             ['acc'])
print(model.summary())
Run Code Online (Sandbox Code Playgroud)

这是模型摘要,在底部显示None

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
embedding_1 (Embedding)      (None, 500, 50)           500000    
_________________________________________________________________
lstm_1 (LSTM)                (None, 64)                29440     
_________________________________________________________________
FC1 (Dense)                  (None, 256)               16640     
_________________________________________________________________
dropout_1 (Dropout)          (None, 256)               0         
_________________________________________________________________
dense_1 (Dense)              (None, 1)                 257       
================================================================= …
Run Code Online (Sandbox Code Playgroud)

python text-classification lstm keras

2
推荐指数
1
解决办法
1218
查看次数

如何缩小词袋模型?

问题标题说明了一切:如何使词袋模型更小?我使用随机森林和词袋功能集。我的模型大小达到 30 GB,并且我确信特征集中的大多数单词对整体性能没有贡献。

如何在不损失(太多)性能的情况下缩小大词袋模型?

nlp classification random-forest scikit-learn text-classification

2
推荐指数
1
解决办法
1469
查看次数

在特定领域继续训练预训练 BERT 模型的最简单方法是什么?

我想使用预先训练的 BERT 模型,以便将其用于文本分类任务(我正在使用 Huggingface 库)。然而,预训练模型是在与我的不同的领域进行训练的,并且我有一个大型未注释的数据集,可用于对其进行微调。如果我仅使用标记的示例并在特定任务(BertForSequenceClassification)训练时“随时”对其进行微调,则数据集太小,无法适应特定领域的语言模型。这样做的最好方法是什么?谢谢!

nlp text-classification bert-language-model huggingface-transformers pytorch-lightning

2
推荐指数
1
解决办法
1959
查看次数

如何在多类分类中为每个类计算F1度量?

我使用SciKit作为库来处理分类算法,如:NB,SVM.

这是" SPAMHAM " 电子邮件的一个非常好的和精细的二进制分类实现:

    confusion += confusion_matrix(test_y, predictions)
    score = f1_score(test_y, predictions, pos_label=SPAM)
   //note in my case 3-classes I do not need to set [pos_label]
Run Code Online (Sandbox Code Playgroud)

如果我有三个类,如{SPAM,HAM,NORMAL}而不是两个,那么:我如何调整该代码以找到每个类的F1-Score以及所有类的平均值.

computer-science machine-learning nltk text-classification

1
推荐指数
1
解决办法
548
查看次数

预测svm中的多类

我有用户评论数据集

review-1, 0,1,1,0,0
Run Code Online (Sandbox Code Playgroud)

review-1是用户审核,0,1,1,0,0是审核类别.一篇评论可以有多个类别.我想预测评论的类别.所以我实现了代码

transformer = TfidfVectorizer(lowercase=True, stop_words=stop, max_features=500)
X = transformer.fit_transform(df.Review)

X_train, X_test, y_train, y_test = train_test_split(X, df.iloc[:, 1:6],
                                                test_size=0.25, random_state=42)

SVM = svm.SVC()
SVM.fit(X_train, y_train)
Run Code Online (Sandbox Code Playgroud)

但我得到的错误就像

ValueError: bad input shape (75, 5)
Run Code Online (Sandbox Code Playgroud)

有谁能建议任何好的解决方案来解决这个问题

python machine-learning svm scikit-learn text-classification

1
推荐指数
1
解决办法
205
查看次数

我可以在 Keras 密集层上使用 3D 输入吗?

作为练习,我只需要使用密集层来执行文本分类。我想利用词嵌入,问题是数据集是 3D 的(样本、句子的词、嵌入维度)。我可以将 3D 数据集输入密集层吗?

谢谢

text-classification keras word-embedding keras-layer natural-language-processing

1
推荐指数
1
解决办法
3170
查看次数

如何使用 Tf-idf 特征来训练模型?

from sklearn.feature_extraction.text import TfidfVectorizer
tfidf = TfidfVectorizer(sublinear_tf= True, 
                       min_df = 5, 
                       norm= 'l2', 
                       ngram_range= (1,2), 
                       stop_words ='english')

feature1 = tfidf.fit_transform(df.Rejoined_Stem)
array_of_feature = feature1.toarray()
Run Code Online (Sandbox Code Playgroud)

我使用上面的代码来获取我的文本文档的功能。

from sklearn.naive_bayes import MultinomialNB # Multinomial Naive Bayes on Lemmatized Text
X_train, X_test, y_train, y_test = train_test_split(df['Rejoined_Lemmatize'], df['Product'], random_state = 0)
X_train_counts = tfidf.fit_transform(X_train)
clf = MultinomialNB().fit(X_train_counts, y_train)
y_pred = clf.predict(tfidf.transform(X_test))
Run Code Online (Sandbox Code Playgroud)

然后我使用这段代码来训练我的模型。有人可以解释一下在训练模型时如何使用上述特征,因为在训练时 feature1 变量没有在任何地方使用?

machine-learning scikit-learn text-classification naivebayes tfidfvectorizer

1
推荐指数
1
解决办法
4880
查看次数