機器學習:訓練數據集、測試數據集


一、判斷機器學習算法的性能

  • 機器學習經過訓練得到的模型,其意義在於真實環境中的使用;
  • 將全部的原始數據當做訓練集直接訓練出模型,然后投入到真實環境中,這種做法是不恰當的,存在問題:
  1. 如果模型效果很差,沒有機會通過實際調試就直接應用到實際當中,怎么辦?(# 實例:股市預測)
  2. 在真實環境中,開發者難以拿到真實label(輸出結果),則無從得知模型的效果?(# 實例:銀行發放信用卡)
  • 方案:訓練數據集與測試數據集切分(train test split),將原始數據的80%作為訓練數據來訓練模型,另外20%作為測試數據,通過測試數據直接判斷模型的效果,在模型進入真實環境前改進模型;

    # 此方案(訓練數據集與測試數據集切分)也存在問題:待補充。。。

    # 測試機器學習算法的模型,目的是優選出效果更好的模型;

 1)將原始數據集分割為訓練數據集和測試數據集:

  1. 方法一:對X和y的indexes進行亂序處理,根據亂序后的index從x和y中分割出訓練數據集和測試數據集
    import numpy as np
    
    def train_test_split(X, y, test_train = 0.2, seed = None):
        """將原始數據X、y分割為X_train、y_train、X_test、y_test"""
    
        assert X.shape[0] == y.shape[0],\
            "the size of X must be equal to the size of y"
        assert 0.0 <= test_train <= 1.0,\
            "test_train must be valid"
        # seed為隨機數的種子,為了兩次隨機數取值相同
        if seed:
            np.random.seed(seed)
        # 先對原始數據的indexes做亂序處理
        shuffle_indexes = np.random.permutation(len(X))
        # 分配訓練數據和測試數據的比例和大小
        test_ratio = test_train
        test_size = int(len(X) * test_ratio)
        test_indexes = shuffle_indexes[:test_size]
        train_indexes = shuffle_indexes[test_size:]
        # 分割原始數據
        X_train = X[train_indexes]
        y_train = y[train_indexes]
    
        X_test = X[test_indexes]
        y_test = y[test_indexes]
    
        return X_train, X_test, y_train, y_test

     

  2. 方法二:將X於y相加后做亂序處理,再分離出訓練數據集和測試數據集
    z = np.concatenate([X, y], axis = 1)
    np.random.shuffle(z)
    X = z[:, :4],從新排序后的原始數據x
    y = z[:, 4:],從新排序后的標簽y
    train_ratio = 0.8,設置訓練數據集的比例為80%
    trai_size = int(len(X) * train_ratio),訓練數據集的大小
    train_data = X[:train_size, :],訓練數據集
    test_data = X[train_size:, :],測試數據集

     

  3. np.random.permutation(100):將0~100個數隨機排列;# permutation()只接受一個參數;

  4. 由於對indexes的亂序處理帶有隨機性,如果想再次查看歷史數據,可設定隨機種子,得到歷史隨機數;

 2)使用我們的算法:

  # 導入模塊、傳入原始數據、將預測結果與真實結果對比(相等得到布爾數組)得到准確度;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM