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

这里的精度相当低,但是当精度那么低时,精度有多高呢?精度公式不是 TP/(TP + FP) 吗?如果是,那么高精度分类器需要生成高真阳性,这将导致高精度,但是 K-nn 如何在真阳性率太低的情况下生成高精度?
我使用下面的代码通过 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().
问题 :
加载 kmeans pickle 对象并应用的方法是否
kmean_fit.predict()允许我根据现有集群的质心将新观察值分配给现有集群?这种方法是否只是从头开始对新数据进行重新聚类?
如果此方法不起作用,鉴于我已经使用高效的 python 代码保存了集群质心,如何将新观察值分配给现有集群?
PS:我知道使用现有集群作为因变量构建分类器是另一种方法,但由于时间紧迫,我不想这样做。
python cluster-analysis k-means scikit-learn text-classification
我目前有一个 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
我正在尝试使用 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) 问题标题说明了一切:如何使词袋模型更小?我使用随机森林和词袋功能集。我的模型大小达到 30 GB,并且我确信特征集中的大多数单词对整体性能没有贡献。
如何在不损失(太多)性能的情况下缩小大词袋模型?
nlp classification random-forest scikit-learn text-classification
我想使用预先训练的 BERT 模型,以便将其用于文本分类任务(我正在使用 Huggingface 库)。然而,预训练模型是在与我的不同的领域进行训练的,并且我有一个大型未注释的数据集,可用于对其进行微调。如果我仅使用标记的示例并在特定任务(BertForSequenceClassification)训练时“随时”对其进行微调,则数据集太小,无法适应特定领域的语言模型。这样做的最好方法是什么?谢谢!
nlp text-classification bert-language-model huggingface-transformers pytorch-lightning
我使用SciKit作为库来处理分类算法,如:NB,SVM.
这是" SPAM和HAM " 电子邮件的一个非常好的和精细的二进制分类实现:
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以及所有类的平均值.
我有用户评论数据集
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
作为练习,我只需要使用密集层来执行文本分类。我想利用词嵌入,问题是数据集是 3D 的(样本、句子的词、嵌入维度)。我可以将 3D 数据集输入密集层吗?
谢谢
text-classification keras word-embedding keras-layer natural-language-processing
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
scikit-learn ×5
python ×3
keras ×2
nlp ×2
k-means ×1
keras-layer ×1
lstm ×1
naivebayes ×1
natural-language-processing ×1
nltk ×1
svm ×1
weka ×1
word-count ×1