为doc2vec嵌入训练构建学习曲线

我正在尝试优化嵌入训练的轮数(epochs)。有没有办法为这个过程生成一个学习曲线呢?

例如,我可以为常规的监督分类创建学习曲线。

import numpy as npimport matplotlib.pyplot as pltfrom sklearn.model_selection import learning_curvefrom sklearn.model_selection import StratifiedShuffleSplitdef plot_learning_curve(estimator, title, X, y, ylim=None, cv=None, n_jobs=None, train_sizes=np.linspace(.1, 1.0, 5)):    plt.figure()    plt.title(title)    if ylim is not None:        plt.ylim(*ylim)    plt.xlabel("训练样本")    plt.ylabel("得分")    train_sizes, train_scores, test_scores = learning_curve(        estimator, X, y, cv=cv, n_jobs=n_jobs, train_sizes=train_sizes)    train_scores_mean = np.mean(train_scores, axis=1)    train_scores_std = np.std(train_scores, axis=1)    test_scores_mean = np.mean(test_scores, axis=1)    test_scores_std = np.std(test_scores, axis=1)    plt.grid()    plt.fill_between(train_sizes, train_scores_mean - train_scores_std,                     train_scores_mean + train_scores_std, alpha=0.1,                     color="r")    plt.fill_between(train_sizes, test_scores_mean - test_scores_std,                     test_scores_mean + test_scores_std, alpha=0.1, color="g")    plt.plot(train_sizes, train_scores_mean, 'o-', color="r",             label="训练得分")    plt.plot(train_sizes, test_scores_mean, 'o-', color="g",             label="交叉验证得分")    plt.legend(loc="best")    return plttitle = "学习曲线 (SGDClassifier)"cv = StratifiedShuffleSplit(n_splits=1, test_size=0.2, random_state=0)estimator = SGDClassifier()plot_learning_curve(estimator, title, X_all.todense(), y, ylim=(0.7, 1.01), cv=cv, n_jobs=4)

还有,我可以训练一个嵌入,例如。

from gensim.models.doc2vec import Doc2Vec, TaggedDocumentfrom nltk.tokenize import word_tokenizeX_tagged = [TaggedDocument(words=word_tokenize(_d.lower()), tags=[str(i)]) for i, _d in enumerate(X)]model = Doc2Vec(size=8, alpha=0.05, min_alpha=0.00025, dm =1)model.build_vocab(X_tagged)model_title.train(X_tagged, total_examples=model.corpus_count, epochs=50)

但是,我如何在训练嵌入时创建学习曲线呢?

我对训练嵌入的直觉不足以解决这个问题。


回答:

通常,学习曲线会绘制模型的性能(以某种定量得分表示,如“准确率”)与不同数量的训练数据的关系。

因此,你需要选择一种方法来评分你的Doc2Vec模型。(可能这是通过使用文档向量作为另一个分类的输入,或者其他方法。)然后,你需要用不同大小的训练集重新创建Doc2Vec模型,对每个模型进行评分,并将(corpus_size, score)数据点提供给绘图程序。

请注意,gensim包含了一个包装类,可以将Doc2Vec训练步骤插入到scikit-learn管道中:

https://radimrehurek.com/gensim/sklearn_api/d2vmodel.html

因此,你可以用一个多步骤的管道替换你现有代码中的简单estimator,包括D2VTransformer作为一个步骤。这样,你就可以以一种与你现有代码非常相似的方式创建学习曲线图。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注