首页 文章

为什么Tensorflow tf.learn分类结果差异很大?

提问于
浏览
0

我使用TensorFlow高级API tf.learn 来训练和评估一系列二进制文本分类的DNN分类器(实际上我需要多标签分类,但目前我分别检查每个标签) . 我的代码与tf.learn Tutorial非常相似

classifier = tf.contrib.learn.DNNClassifier(
    hidden_units=[10],
    n_classes=2,
    dropout=0.1,
    feature_columns=tf.contrib.learn.infer_real_valued_columns_from_input(training_set.data))
classifier.fit(x=training_set.data, y=training_set.target, steps=100)
val_accuracy_score = classifier.evaluate(x=validation_set.data, y=validation_set.target)["accuracy"]

准确度分数大致从54%到90%不等,验证(测试)集中的21个文档总是相同的 .

这个非常显着的偏差意味着什么?我知道有一些随机因素(例如辍学),但根据我的理解,模型应该趋向于最优 .

我使用单词(lemmas),bi和trigrams,情感分数和LIWC scores作为特征,所以我确实有一个非常高维的特征空间,只有28个训练和21个验证文档 . 这会引起问题吗?除了收集更多的培训数据外,我怎样才能不断提高结果?

更新:为了澄清,我生成了一个发生单词和n-gram的字典,并丢弃那些只发生过一次的字典,所以我只使用语料库中存在的单词(n-gram) .

1 回答

  • 2

    这与TensorFlow无关 . 此数据集非常小,因此您可以获得任何结果 . 你有28个21点,在一个空间里有"infinite"维度(大约有1,000,000个英文单词,因此10 ^ 18个三元组,但是有些不存在,并且肯定它们不存在于你的49个文档中,但是你还有至少1,000,000个尺寸) . 对于这样的问题,您必须期望结果的 huge 方差 .

    除了收集更多的培训数据外,我如何不断改进结果?

    你几乎不能 . 这是对小样本进行任何统计分析的简单方法 .

    因此,您可以做的最好的事情是 change evaluation scheme 而不是将数据分成28/21进行10倍交叉验证,约50分这意味着您将需要运行10个实验,每个实验包含45个培训文档和4个测试文档,并且平均结果 . 这是你可以做的唯一减少方差的事情,但要记住,即使使用CV,数据集如此之小,也会让你的模型表现得如此之好"in the wild"(一旦应用于数据之前从未见过) .

相关问题