簡體   English   中英

獲得100%的訓練准確度,但獲得60%的測試准確度

[英]Getting a 100% Training Accuracy, but 60% Testing accuracy

我正在嘗試使用作為課程項目一部分提供給我們的數據集上具有不同參數和內容的不同分類器。 我們必須嘗試在數據集上獲得最佳性能。 數據集實際上是在線新聞受歡迎程度的簡化版本

我已經嘗試過將SVM,隨機森林,SVM與k = 5進行交叉驗證,它們似乎都提供了大約100%的訓練精度,而測試精度在60-70之間。 我認為測試的准確性還不錯,但是培訓的准確性困擾着我。 我會說也許是數據過度擬合的情況,但是我的同學似乎都沒有得到類似的結果,所以也許問題出在我的代碼上。

這是我的交叉驗證和隨機森林分類器的代碼。 如果您能幫助我找出為什么我獲得如此高的培訓准確性,我將不勝感激

def crossValidation(X_train, X_test, y_train, y_test, numSplits):
    skf = StratifiedKFold(n_splits=5, shuffle=True)
    Cs = np.logspace(-3, 3, 10)
    gammas = np.logspace(-3, 3, 10)

    ACC = np.zeros((10, 10))
    DEV = np.zeros((10, 10))

    for i, gamma in enumerate(gammas):
        for j, C in enumerate(Cs):
            acc = []
            for train_index, dev_index in skf.split(X_train, y_train):
                X_cv_train, X_cv_dev = X_train[train_index], X_train[dev_index]
                y_cv_train, y_cv_dev = y_train[train_index], y_train[dev_index]
                clf = SVC(C=C, kernel='rbf', gamma=gamma, )
                clf.fit(X_cv_train, y_cv_train)
                acc.append(accuracy_score(y_cv_dev, clf.predict(X_cv_dev)))

            ACC[i, j] = np.mean(acc)
            DEV[i, j] = np.std(acc)

    i, j = np.argwhere(ACC == np.max(ACC))[0]
    clf1 = SVC(C=Cs[j], kernel='rbf', gamma=gammas[i], decision_function_shape='ovr')
    clf1.fit(X_train, y_train)
    y_predict_train = clf1.predict(X_train)
    y_pred_test = clf1.predict(X_test)
    print("Train Accuracy :: ", accuracy_score(y_train, y_predict_train))
    print("Test Accuracy  :: ", accuracy_score(y_test, y_pred_test))


def randomForestClassifier(X_train, X_test, y_train, y_test):
    """

    clf = RandomForestClassifier()
    clf.fit(X_train, y_train)
    y_predict_train = clf.predict(X_train)
    y_pred_test = clf.predict(X_test)
    print("Train Accuracy :: ", accuracy_score(y_train, y_predict_train))
    print("Test Accuracy  :: ", accuracy_score(y_test, y_pred_test))

關於此問題有兩個問題,訓練准確性和測試准確性存在顯着差異。

  1. 訓練數據和測試數據的分布不同(由於選擇了數據集的一部分)
  2. 模型對訓練數據的過度擬合。

由於您應用了交叉驗證,因此您似乎應該考慮另一種解決方案。 我建議您應用某些特征選擇或特征縮減(例如PCA)方法來解決過擬合問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM