<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 如何使用Python從頭開始創建算法測試工具 > 原文: [https://machinelearningmastery.com/create-algorithm-test-harness-scratch-python/](https://machinelearningmastery.com/create-algorithm-test-harness-scratch-python/) 我們無法知道哪種算法最適合給定的問題。 因此,我們需要設計一個可用于評估不同機器學習算法的測試工具。 在本教程中,您將了解如何在Python中從頭開始開發機器學習算法測試工具。 完成本教程后,您將了解: * 如何實現訓練測試算法測試工具。 * 如何實現k-fold交叉驗證算法測試工具。 讓我們開始吧。 * **2017年1月更新**:將cross_validation_split()中的fold_size計算更改為始終為整數。修復了Python 3的問題。 * **更新Mar / 2018** :添加了備用鏈接以下載數據集,因為原始圖像已被刪除。 * **更新Aug / 2018** :經過測試和更新,可與Python 3.6配合使用。 ![How To Create an Algorithm Test Harness From Scratch With Python](img/c4506f436c1db5a203009d0db6942e81.jpg) 如何使用Python從[Scragch]創建算法測試工具 照片由 [Chris Meller](https://www.flickr.com/photos/mellertime/5688957140/) ,保留一些權利。 ## 描述 測試工具提供了一種一致的方法來評估數據集上的機器學習算法。 它涉及3個要素: 1. 拆分數據集的重采樣方法。 2. 機器學習算法進行評估。 3. 用于評估預測的表現度量。 數據集的加載和準備是必須在使用測試工具之前完成的先決條件步驟。 測試工具必須允許評估不同的機器學習算法,同時數據集,重采樣方法和表現測量保持不變。 在本教程中,我們將使用真實數據集演示測試工具。 使用的數據集是Pima Indians糖尿病數據集。它包含768行和9列。文件中的所有值都是數字,特別是浮點值。您可以在 [UCI機器學習庫](https://archive.ics.uci.edu/ml/datasets/Pima+Indians+Diabetes)上了解有關此數據集的更多信息(更新:[從此處下載](https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv))。 零規則算法將作為本教程的一部分進行評估。零規則算法始終預測訓練數據集中觀察次數最多的類。 ## 教程 本教程分為兩個主要部分: 1. 訓練 - 測試算法測試線束。 2. 交叉驗證算法測試工具。 這些測試工具將為您提供在給定的預測建模問題上評估一套機器學習算法所需的基礎。 ### 1.訓練 - 測試算法測試線束 訓練測試拆分是一種簡單的重采樣方法,可用于評估機器學習算法。 因此,它是開發測試工具的良好起點。 我們可以假設先前開發了一個函數來將數據集拆分為訓練集和測試集,以及一個函數來評估一組預測的準確性。 我們需要一個可以采用數據集和算法并返回表現分數的函數。 下面是一個名為 **evaluate_algorithm()**的函數來實現這一點。它需要3個固定的參數,包括數據集,算法函數和訓練測試拆分的拆分百分比。 首先,數據集分為訓練和測試元素。接下來,制作測試集的副本,并通過將其設置為**無**值來清除每個輸出值,以防止算法意外作弊。 作為參數提供的算法是一種函數,該函數期望準備的訓練和測試數據集然后進行預測。該算法可能需要額外的配置參數。這是通過在 **evaluate_algorithm()**函數中使用變量參數 *** args** 并將它們傳遞給算法函數來處理的。 期望算法函數返回預測列表,一個針對訓練數據集中的每一行。通過 **accuracy_metric()**函數將這些與未修改的測試數據集的實際輸出值進行比較。 最后,返回準確性。 ```py # Evaluate an algorithm using a train/test split def evaluate_algorithm(dataset, algorithm, split, *args): train, test = train_test_split(dataset, split) test_set = list() for row in test: row_copy = list(row) row_copy[-1] = None test_set.append(row_copy) predicted = algorithm(train, test_set, *args) actual = [row[-1] for row in test] accuracy = accuracy_metric(actual, predicted) return accuracy ``` 評估函數確實做了一些強有力的假設,但如果需要,它們可以很容易地改變。 具體來說,它假定數據集中的最后一行始終是輸出值。可以使用不同的列。使用 **accuracy_metric()**假設問題是一個分類問題,但這可能會改變為回歸問題的均方誤差。 讓我們將這個與一個有效的例子結合起來。 我們將使用Pima Indians糖尿病數據集并評估零規則算法。您可以在 [UCI機器學習庫](https://archive.ics.uci.edu/ml/datasets/Pima+Indians+Diabetes)上下載并了解有關糖尿病數據集的更多信息(更新:[從這里下載](https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv))。 ```py # Train-Test Test Harness from random import seed from random import randrange from csv import reader # Load a CSV file def load_csv(filename): file = open(filename, "rb") lines = reader(file) dataset = list(lines) return dataset # Convert string column to float def str_column_to_float(dataset, column): for row in dataset: row[column] = float(row[column].strip()) # Split a dataset into a train and test set def train_test_split(dataset, split): train = list() train_size = split * len(dataset) dataset_copy = list(dataset) while len(train) < train_size: index = randrange(len(dataset_copy)) train.append(dataset_copy.pop(index)) return train, dataset_copy # Calculate accuracy percentage def accuracy_metric(actual, predicted): correct = 0 for i in range(len(actual)): if actual[i] == predicted[i]: correct += 1 return correct / float(len(actual)) * 100.0 # Evaluate an algorithm using a train/test split def evaluate_algorithm(dataset, algorithm, split, *args): train, test = train_test_split(dataset, split) test_set = list() for row in test: row_copy = list(row) row_copy[-1] = None test_set.append(row_copy) predicted = algorithm(train, test_set, *args) actual = [row[-1] for row in test] accuracy = accuracy_metric(actual, predicted) return accuracy # zero rule algorithm for classification def zero_rule_algorithm_classification(train, test): output_values = [row[-1] for row in train] prediction = max(set(output_values), key=output_values.count) predicted = [prediction for i in range(len(test))] return predicted # Test the zero rule algorithm on the diabetes dataset seed(1) # load and prepare data filename = 'pima-indians-diabetes.csv' dataset = load_csv(filename) for i in range(len(dataset[0])): str_column_to_float(dataset, i) # evaluate algorithm split = 0.6 accuracy = evaluate_algorithm(dataset, zero_rule_algorithm_classification, split) print('Accuracy: %.3f%%' % (accuracy)) ``` 數據集分為60%用于訓練模型,40%用于評估模型。 注意零規則算法 **zero_rule_algorithm_classification** 的名稱是如何作為參數傳遞給 **evaluate_algorithm()**函數的。您可以看到如何使用不同的算法一次又一次地使用此測試工具。 運行上面的示例會打印出模型的準確性。 ```py Accuracy: 67.427% ``` ### 2.交叉驗證算法測試工具 交叉驗證是一種重采樣技術,可以對看不見的數據提供更可靠的算法表現估計。 它需要在數據的不同子集上創建和評估k模型,這樣計算成本更高。然而,它是評估機器學習算法的黃金標準。 與前一節一樣,我們需要創建一個將重采樣方法,算法對數據集的評估和表現計算方法聯系在一起的函數。 與上述不同,必須多次在數據集的不同子集上評估算法。這意味著我們需要在 **evaluate_algorithm()**函數中添加其他循環。 下面是一個使用交叉驗證實現算法評估的函數。 首先,數據集被分成稱為折疊的 **n_folds** 組。 接下來,我們循環給每個折疊提供一個不受訓練的機會并用于評估算法。創建折疊列表的副本,并從該列表中刪除保留折疊。然后將折疊列表展平為一個長行列表,以匹配訓練數據集的算法期望。這是使用 **sum()**功能完成的。 一旦準備好訓練數據集,該循環內的其余功能如上所述。制作測試數據集(折疊)的副本并清除輸出值以避免算法意外欺騙。該算法是在訓練數據集上準備的,并對測試數據集進行預測。評估預測并將其存儲在列表中。 與訓練測試算法測試工具不同,返回分數列表,每個交叉驗證折疊一個。 ```py # Evaluate an algorithm using a cross validation split def evaluate_algorithm(dataset, algorithm, n_folds, *args): folds = cross_validation_split(dataset, n_folds) scores = list() for fold in folds: train_set = list(folds) train_set.remove(fold) train_set = sum(train_set, []) test_set = list() for row in fold: row_copy = list(row) test_set.append(row_copy) row_copy[-1] = None predicted = algorithm(train_set, test_set, *args) actual = [row[-1] for row in fold] accuracy = accuracy_metric(actual, predicted) scores.append(accuracy) return scores ``` 盡管代碼稍微復雜且運行速度較慢,但??此函數可提供更穩健的算法表現估計。 我們可以通過零規則算法將所有這些與糖尿病數據集的完整示例結合在一起。 ```py # Cross Validation Test Harness from random import seed from random import randrange from csv import reader # Load a CSV file def load_csv(filename): file = open(filename, "rb") lines = reader(file) dataset = list(lines) return dataset # Convert string column to float def str_column_to_float(dataset, column): for row in dataset: row[column] = float(row[column].strip()) # Split a dataset into k folds def cross_validation_split(dataset, n_folds): dataset_split = list() dataset_copy = list(dataset) fold_size = int(len(dataset) / n_folds) for i in range(n_folds): fold = list() while len(fold) < fold_size: index = randrange(len(dataset_copy)) fold.append(dataset_copy.pop(index)) dataset_split.append(fold) return dataset_split # Calculate accuracy percentage def accuracy_metric(actual, predicted): correct = 0 for i in range(len(actual)): if actual[i] == predicted[i]: correct += 1 return correct / float(len(actual)) * 100.0 # Evaluate an algorithm using a cross validation split def evaluate_algorithm(dataset, algorithm, n_folds, *args): folds = cross_validation_split(dataset, n_folds) scores = list() for fold in folds: train_set = list(folds) train_set.remove(fold) train_set = sum(train_set, []) test_set = list() for row in fold: row_copy = list(row) test_set.append(row_copy) row_copy[-1] = None predicted = algorithm(train_set, test_set, *args) actual = [row[-1] for row in fold] accuracy = accuracy_metric(actual, predicted) scores.append(accuracy) return scores # zero rule algorithm for classification def zero_rule_algorithm_classification(train, test): output_values = [row[-1] for row in train] prediction = max(set(output_values), key=output_values.count) predicted = [prediction for i in range(len(test))] return predicted # Test the zero rule algorithm on the diabetes dataset seed(1) # load and prepare data filename = 'pima-indians-diabetes.csv' dataset = load_csv(filename) for i in range(len(dataset[0])): str_column_to_float(dataset, i) # evaluate algorithm n_folds = 5 scores = evaluate_algorithm(dataset, zero_rule_algorithm_classification, n_folds) print('Scores: %s' % scores) print('Mean Accuracy: %.3f%%' % (sum(scores)/len(scores))) ``` 總共5個交叉驗證折疊被用于評估零規則算法。因此,從 **evaluate_algorithm()**算法返回5個分數。 運行此示例都會打印這些計算得分列表并打印平均得分。 ```py Scores: [62.091503267973856, 64.70588235294117, 64.70588235294117, 64.70588235294117, 69.28104575163398] Mean Accuracy: 65.098% ``` 您現在可以使用兩種不同的測試工具來評估自己的機器學習算法。 ## 擴展 本節列出了您可能希望考慮的本教程的擴展。 * **參數化評估**。傳入用于評估預測的函數,使您可以無縫地處理回歸問題。 * **參數化重采樣**。傳遞用于計算重采樣分割的函數,允許您在訓練測試和交叉驗證方法之間輕松切換。 * **標準偏差分數**。計算標準偏差,以便在使用交叉驗證評估算法時了解分數的傳播。 **你有沒有試過這些擴展?** 在下面的評論中分享您的經驗。 ## 評論 在本教程中,您了解了如何從頭開始創建測試工具以評估您的機器學習算法。 具體來說,您現在知道: * 如何實現和使用訓練測試算法測試工具。 * 如何實現和使用交叉驗證算法測試工具。 **你有什么問題嗎?** 在下面的評論中提出您的問題,我會盡力回答。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看