2016-02-29 53 views
2

我使用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。當我下次運行時,結果會有所不同。同時,訓練數據集的精確度和召回率是一樣的。

爲什麼發生?也許這個事實涉及到我的數據?

謝謝。

回答

2

隨機森林適合對數據集的不同子樣本一批決策樹分類的。每次調用分類器時,子樣本都是隨機生成的,因此結果不同。爲了控制這個東西,你需要設置一個叫做random_state的參數。

rfc = RandomForestClassifier(random_state=137) 

請注意,random_state是隨機數發生器使用的種子。您可以使用任何整數來設置此參數。無論何時您更改random_state值,結果都可能會改變。但只要你使用相同的值random_state你會得到相同的結果。

random_state參數也用於各種其他分類器中。例如,在神經網絡中,我們使用random_state來爲分類器的每次運行確​​定初始權向量。這有助於調整其他超參數學習速率權衰減等。如果我們不設置random_state,我們不能肯定的性能變化是否是由於超參數的變化或者由於初始權重向量的變化。一旦我們調整了超參數,我們可以更改random_state以進一步提高模型的性能。

+0

感謝您的解釋! – Shelari

相關問題