一、判斷機器學習算法的性能
- 機器學習經過訓練得到的模型,其意義在於真實環境中的使用;
- 將全部的原始數據當做訓練集直接訓練出模型,然后投入到真實環境中,這種做法是不恰當的,存在問題:
- 如果模型效果很差,沒有機會通過實際調試就直接應用到實際當中,怎么辦?(# 實例:股市預測)
- 在真實環境中,開發者難以拿到真實label(輸出結果),則無從得知模型的效果?(# 實例:銀行發放信用卡)
- 方案:訓練數據集與測試數據集切分(train test split),將原始數據的80%作為訓練數據來訓練模型,另外20%作為測試數據,通過測試數據直接判斷模型的效果,在模型進入真實環境前改進模型;
# 此方案(訓練數據集與測試數據集切分)也存在問題:待補充。。。
# 測試機器學習算法的模型,目的是優選出效果更好的模型;
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
- 方法二:將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:, :],測試數據集
-
np.random.permutation(100):將0~100個數隨機排列;# permutation()只接受一個參數;
- 由於對indexes的亂序處理帶有隨機性,如果想再次查看歷史數據,可設定隨機種子,得到歷史隨機數;
2)使用我們的算法:
# 導入模塊、傳入原始數據、將預測結果與真實結果對比(相等得到布爾數組)得到准確度;
