由于我的分类器在测试数据上的准确率大约为99%,我有点怀疑并希望深入了解我的NB分类器中最具信息性的功能,以了解它正在学习哪种功能.以下主题非常有用:如何获取scikit-learn分类器的大部分信息功能?
至于我的功能输入,我还在玩,目前我正在测试一个简单的unigram模型,使用CountVectorizer:
vectorizer = CountVectorizer(ngram_range=(1, 1), min_df=2, stop_words='english')
Run Code Online (Sandbox Code Playgroud)
在上述主题中,我发现了以下功能:
def show_most_informative_features(vectorizer, clf, n=20):
feature_names = vectorizer.get_feature_names()
coefs_with_fns = sorted(zip(clf.coef_[0], feature_names))
top = zip(coefs_with_fns[:n], coefs_with_fns[:-(n + 1):-1])
for (coef_1, fn_1), (coef_2, fn_2) in top:
print "\t%.4f\t%-15s\t\t%.4f\t%-15s" % (coef_1, fn_1, coef_2, fn_2)
Run Code Online (Sandbox Code Playgroud)
这给出了以下结果:
-16.2420 114th -4.0020 said
-16.2420 115 -4.6937 obama
-16.2420 136 -4.8614 house
-16.2420 14th -5.0194 president
-16.2420 15th -5.1236 state
-16.2420 1600 -5.1370 senate
-16.2420 16th -5.3868 new
-16.2420 1920 -5.4004 republicans
-16.2420 1961 -5.4262 republican
-16.2420 1981 …Run Code Online (Sandbox Code Playgroud) python classification machine-learning scikit-learn text-classification
最近维基百科故意破坏检测竞赛的获胜者建议通过" 检测考虑QWERTY键盘布局的随机键盘命中 "来改善检测.
例: woijf qoeoifwjf oiiwjf oiwj pfowjfoiwjfo oiwjfoewoh
是否有任何软件可以执行此操作(最好是免费和开源)?
如果没有,是否有一个活跃的FOSS项目,其目标是实现这一目标?
如果没有,您会如何建议实施此类软件?
我在多类设置中看到了关于类不平衡的几个问题.但是,我有一个多标签问题,所以在这种情况下你会怎么处理?
我有一组约300k文本示例.如标题中所述,每个示例至少有一个标签,并且只有100个可能的唯一标签.我已经通过利用命名空间将这个问题简化为Vowpal Wabbit的二进制分类,例如
从:
healthy fruit | bananas oranges jack fruit
evil monkey | bipedal organism family guy
...
Run Code Online (Sandbox Code Playgroud)
至:
1 |healthy bananas oranges jack fruit
1 |fruit bananas oranges jack fruit
0 |evil bananas oranges jack fruit
0 |monkey bananas oranges jack fruit
0 |healthy bipedal organism family guy
0 |fruit bipedal organism family guy
1 |evil bipedal organism family guy
1 |monkey bipedal organism family guy
...
Run Code Online (Sandbox Code Playgroud)
我正在使用大众提供的默认选项(我认为是在线SGD,具有平方损失功能).我正在使用平方损失,因为它非常类似汉明损失.
在训练之后,当我在相同的训练集上进行测试时,我注意到所有的例子都是用'0'标签预测的 ......这是一种最小化损失的方法,我想.在这一点上,我不知道该怎么做.我正在考虑使用成本敏感的一对一分类来尝试平衡类,但是由于存在2 ^ 100个标签组合,因此将多标签减少到多类是不可行的.我想知道是否有其他人有任何建议.
编辑:我终于有机会测试类失衡,特别是vw …
classification machine-learning vowpalwabbit text-classification
我刚刚开始研究分类问题.它是一个两类问题,My Trained模型(机器学习)必须决定/预测允许URL或阻止它.
我的问题非常具体.
url classification machine-learning feature-extraction text-classification
我在这里学习了教程:(https://blog.keras.io/using-pre-trained-word-embeddings-in-a-keras-model.html)
但是,我修改了代码,以便能够通过h5py. 因此,在运行训练脚本后,model.h5我的目录中生成了一个。
现在,当我想加载它时,我的问题是我对如何重新启动Tokenizer. 本教程有以下代码行:
tokenizer = Tokenizer(nb_words=MAX_NB_WORDS)
tokenizer.fit_on_texts(texts)
sequences = tokenizer.texts_to_sequences(texts)
Run Code Online (Sandbox Code Playgroud)
但假设,如果我model.h5在不同的模块中重新加载,我将需要创建另一个Tokenizer来标记测试集。但是,新的Tokenizer将适合测试数据,从而创建一个完全不同的词表。
因此,我的问题是:如何重新加载Tokenizer在训练数据集上训练的数据?我在某种程度上误解了EmbeddingKeras 层的功能吗?现在,我假设由于我们根据预先训练的词嵌入将某些词索引映射到它们相应的嵌入向量,因此词索引需要保持一致。但是,如果我们fit_on_texts在测试数据集上执行另一个,这是不可能的。
谢谢并期待您的回答!
tokenize text-classification keras tensorflow word-embedding
我正在使用 bert-for-tf2 库来解决多类分类问题。我创建了模型,但训练会引发以下错误:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-25-d9f382cba5d4> in <module>()
----> 1 model.fit([INPUT_IDS,INPUT_MASKS,INPUT_SEGS], list(train.SECTION))
5 frames
/tensorflow-2.0.0/python3.6/tensorflow_core/python/keras/engine/data_adapter.py in
__init__(self, x, y, sample_weights, batch_size, epochs, steps, shuffle, **kwargs)
243 label, ", ".join([str(i.shape[0]) for i in nest.flatten(data)]))
244 msg += "Please provide data which shares the same first dimension."
--> 245 raise ValueError(msg)
246 num_samples = num_samples.pop()
247
ValueError: Data cardinality is ambiguous:
x sizes: 3
y sizes: 6102
Please provide data which shares the same first dimension.
Run Code Online (Sandbox Code Playgroud)
我指的是名为 …
nlp machine-learning text-classification tf.keras tensorflow2.0
所以我没有标签的单词很少,但我需要将它们分为 4-5 类。我可以明显地说这个测试集是可以分类的。虽然我没有训练数据,所以我需要使用预训练的模型来对这些单词进行分类。哪种模型适合这种范式以及它已经在哪个数据集上进行了训练?
谢谢
python machine-learning text-classification keras pre-trained-model
我有超过15000个特定主题的文本文档.我想建立一个基于前者的语言模型,以便我可以向该模型呈现各种主题的新随机文本文档,并且算法会告诉新文档是否属于同一主题.
我尝试了sklearn.naive_bayes.MultinomialNB,sklearn.svm.classes.LinearSVC其他人,但我有以下问题:
这些算法需要具有多个标签或类别的培训数据,并且我只有涵盖特定主题的网页.其他文档没有标注,也没有许多不同的主题.
对于如何仅使用一个标签培训模型或如何进行一般操作,我将不胜感激.到目前为止我所拥有的是:
c = MultinomialNB()
c.fit(X_train, y_train)
c.predict(X_test)
Run Code Online (Sandbox Code Playgroud)
非常感谢你.
我第一次使用 sklearn 和 NLP,以为我理解了我所做的一切,直到我不知道如何修复这个错误。这是相关代码(主要改编自http://zacstewart.com/2015/04/28/document-classification-with-scikit-learn.html):
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.pipeline import Pipeline, FeatureUnion
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import TruncatedSVD
from sgboost import XGBClassifier
from pandas import DataFrame
def read_files(path):
for article in os.listdir(path):
with open(os.path.join(path, doc)) as f:
text = f.read()
yield os.path.join(path, article), text
def build_data_frame(path, classification)
rows = []
index = []
for filename, text in read_files(path):
rows.append({'text': text, 'class': classification})
index.append(filename)
df = DataFrame(rows, index=index)
return df
data = DataFrame({'text': [], 'class': []}) …Run Code Online (Sandbox Code Playgroud) 我读过解释滑动窗口如何工作的帖子,但我找不到任何有关其实际实现方式的信息。
\n据我了解,如果输入太长,可以使用滑动窗口来处理文本。
\n如果我错了,请纠正我。\n假设我有一段文字“2017 年 6 月 Kaggle 宣布注册用户突破 100 万”。
\n给定一些stride和max_len,输入可以被分割成具有重叠单词的块(不考虑填充)。
In June 2017 Kaggle announced that # chunk 1\nannounced that it passed 1 million # chunk 2\n1 million registered users # chunk 3\nRun Code Online (Sandbox Code Playgroud)\n如果我的问题是“Kaggle 何时发布公告”和“有多少注册用户”,我可以在模型中使用chunk 1或根本chunk 3不使用。 不确定我是否仍应该使用它来训练模型chunk 2 chunk 2
所以输入将是:\n [CLS]when did Kaggle make the announcement[SEP]In June 2017 Kaggle announced that[SEP]\n和\n[CLS]how many …
nlp text-classification nlp-question-answering bert-language-model huggingface-transformers
nlp ×3
python ×3
scikit-learn ×3
keras ×2
algorithm ×1
n-gram ×1
qwerty ×1
tensorflow ×1
tf.keras ×1
tokenize ×1
url ×1
vowpalwabbit ×1