机器学习中同一数据集上的不同结果



我使用scikit-learn库进行机器学习(带有文本数据)。它看起来像这样:

    vectorizer = TfidfVectorizer(analyzer='word', tokenizer=nltk.word_tokenize, stop_words=stop_words).fit(train)
    matr_train = vectorizer.transform(train)
    X_train = matr_train.toarray()
    matr_test = vectorizer.transform(test)
    X_test = matr_test.toarray()
    rfc = RandomForestClassifier()
    rfc.fit(X_train, y_train)
    y_predict = rfc.predict(X_test)

当我第一次运行它时,测试数据集的结果是召回率为 0.17,精度为 1.00。 好的。但是当我在这个测试数据集和这个训练数据集上第二次运行它时,结果是不同的 - 召回率为 0.23,精度为 1.00。当我下次运行它时,结果会有所不同。同时,训练数据集的精度和召回率是相同的。

为什么会这样?也许这个事实指的是我的数据?

谢谢。

随机森林在数据集的各个子样本上拟合多个决策树分类器。每次调用分类器时,都会随机生成子样本,从而产生不同的结果。为了控制这个东西,你需要设置一个名为 random_state .

rfc = RandomForestClassifier(random_state=137)

请注意,random_state是随机数生成器使用的种子。您可以使用任何整数来设置此参数。每当您更改random_state值时,结果都可能会更改。但只要你对random_state使用相同的值,你就会得到相同的结果。

random_state参数也用于各种其他分类器。例如,在神经网络中,我们使用random_state来固定分类器每次运行的初始权重向量。这有助于调整其他超参数,如学习率权重衰减等。如果我们不设置 random_state ,我们不确定性能变化是由于超参数的变化还是由于初始权重向量的变化。调整超参数后,我们可以更改random_state以进一步提高模型的性能。

线索(至少部分)在名称中。

随机

森林使用随机决策树,因此,每次拟合时,结果都会发生变化。

https://www.quora.com/How-does-randomization-in-a-random-forest-work

相关内容

  • 没有找到相关文章

最新更新