<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 如何用Python從頭開始實現機器學習算法表現指標 > 原文: [https://machinelearningmastery.com/implement-machine-learning-algorithm-performance-metrics-scratch-python/](https://machinelearningmastery.com/implement-machine-learning-algorithm-performance-metrics-scratch-python/) 在做出預測之后,你需要知道它們是否有用。 我們可以使用標準度量來總結一組預測實際上有多好。 了解一組預測有多好,可以讓您估算出問題的給定機器學習模型的好壞, 在本教程中,您將了解如何在Python中從頭開始實現四個標準預測評估指標。 閱讀本教程后,您將了解: * 如何實現分類準確性。 * 如何實現和解釋混淆矩陣。 * 如何實現回歸的均值絕對誤差。 * 如何實現回歸的均方根誤差。 讓我們開始吧。 * **更新Aug / 2018** :經過測試和更新,可與Python 3.6配合使用。 ![How To Implement Machine Learning Algorithm Performance Metrics From Scratch In Python](img/3bb0770ef9a693bf253daed634235bc5.jpg) 如何使用Python從頭開始實現機器學習算法表現指標 照片由[HernánPi?era](https://www.flickr.com/photos/hernanpc/8407944523/),保留一些權利。 ## 描述 在訓練機器學習模型時,您必須估計一組預測的質量。 分類準確度和均方根誤差等表現指標可以讓您清楚地了解一組預測的好壞,以及生成它們的模型有多好。 這很重要,因為它可以讓您區分并選擇: * 用于訓練相同機器學習模型的數據的不同變換。 * 不同的機器學習模型訓練相同的數據。 * 針對相同數據訓練的機器學習模型的不同配置。 因此,表現指標是從頭開始實現機器學習算法的必要構建塊。 ## 教程 本教程分為4個部分: * 1.分類準確性。 * 2.混淆矩陣。 * 3.平均絕對誤差。 * 4.均方根誤差。 這些步驟將為您提供處理機器學習算法預測評估所需的基礎。 ### 1.分類準確性 評估分類問題的一組預測的快速方法是使用準確性。 分類準確性是所有預測中正確預測數量的比率。 它通常以最差可能精度的0%和最佳精度的100%之間的百分比表示。 ```py accuracy = correct predictions / total predictions * 100 ``` 我們可以在一個將預期結果和預測作為參數的函數中實現它。 下面是名為 **accuracy_metric()**的函數,它以百分比形式返回分類精度。請注意,我們使用“==”來比較實際值與預測值的相等性。這允許我們比較整數或字符串,我們在加載分類數據時可能選擇使用的兩種主要數據類型。 ```py # Calculate accuracy percentage between two lists 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 ``` 我們可以設計一個小數據集來測試這個功能。下面是一組10個實際和預測的整數值。預測集中有兩個錯誤。 ```py actual predicted 0 0 0 1 0 0 0 0 0 0 1 1 1 0 1 1 1 1 1 1 ``` 下面是該數據集的完整示例,用于測試 **accuracy_metric()**函數。 ```py # Calculate accuracy percentage between two lists 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 # Test accuracy actual = [0,0,0,0,0,1,1,1,1,1] predicted = [0,1,0,0,0,1,0,1,1,1] accuracy = accuracy_metric(actual, predicted) print(accuracy) ``` 運行此示例可以產生80%或8/10的預期準確度。 ```py 80.0 ``` 當您具有少量類值(例如2)時,準確度是一個很好的度量標準,也稱為二元分類問題。 當你有更多的類值時,準確性開始失去意義,你可能需要審查結果的不同觀點,例如混淆矩陣。 ### 2.混淆矩陣 混淆矩陣提供了與預期實際值相比所做的所有預測的摘要。 結果以矩陣形式呈現,每個細胞中有計數。水平匯總實際類值的計數,而垂直顯示每個類值的預測計數。 一組完美的預測顯示為矩陣左上角到右下角的對角線。 分類問題的混淆矩陣的值是,您可以清楚地看到哪些預測是錯誤的,以及所犯的錯誤類型。 讓我們創建一個計算混淆矩陣的函數。 我們可以從定義函數開始,在給定實際類值列表和預測列表的情況下計算混淆矩陣。 該功能如下所示,名為 **confusion_matrix()**。它首先列出所有唯一類值,并將每個類值分配給混淆矩陣中的唯一整數或索引。 混淆矩陣始終是正方形,類值的數量表示所需的行數和列數。 這里,矩陣的第一個索引是實際值的行,第二個是預測值的列。在創建方形混淆矩陣并在每個單元格中初始化為零計數之后,循環所有預測并遞增每個單元格中的計數。 該函數返回兩個對象。第一個是唯一類值的集合,以便在繪制混淆矩陣時顯示它們。第二個是混淆矩陣本身與每個單元格中的計數。 ```py # calculate a confusion matrix def confusion_matrix(actual, predicted): unique = set(actual) matrix = [list() for x in range(len(unique))] for i in range(len(unique)): matrix[i] = [0 for x in range(len(unique))] lookup = dict() for i, value in enumerate(unique): lookup[value] = i for i in range(len(actual)): x = lookup[actual[i]] y = lookup[predicted[i]] matrix[y][x] += 1 return unique, matrix ``` 讓我們以一個例子來具體化。 下面是另一個人為的數據集,這次有3個錯誤。 ```py actual predicted 0 0 0 1 0 1 0 0 0 0 1 1 1 0 1 1 1 1 1 1 ``` 我們可以計算并打印此數據集的混淆矩陣,如下所示: ```py # Example of Calculating a Confusion Matrix # calculate a confusion matrix def confusion_matrix(actual, predicted): unique = set(actual) matrix = [list() for x in range(len(unique))] for i in range(len(unique)): matrix[i] = [0 for x in range(len(unique))] lookup = dict() for i, value in enumerate(unique): lookup[value] = i for i in range(len(actual)): x = lookup[actual[i]] y = lookup[predicted[i]] matrix[y][x] += 1 return unique, matrix # Test confusion matrix with integers actual = [0,0,0,0,0,1,1,1,1,1] predicted = [0,1,1,0,0,1,0,1,1,1] unique, matrix = confusion_matrix(actual, predicted) print(unique) print(matrix) ``` 運行該示例將生成以下輸出。該示例首先打印唯一值列表,然后打印混淆矩陣。 ```py {0, 1} [[3, 1], [2, 4]] ``` 用這種方式解釋結果很難。如果我們可以按行和列顯示矩陣,將會有所幫助。 以下是正確顯示矩陣的功能。 該函數名為 **print_confusion_matrix()**。它將列命名為P表示預測,行指定為A表示實際。每個列和行都以其對應的類值命名。 矩陣的布局期望每個類標簽是單個字符或單個數字整數,并且計數也是單個數字整數。您可以將其擴展為處理大類標簽或預測計數作為練習。 ```py # pretty print a confusion matrix def print_confusion_matrix(unique, matrix): print('(A)' + ' '.join(str(x) for x in unique)) print('(P)---') for i, x in enumerate(unique): print("%s| %s" % (x, ' '.join(str(x) for x in matrix[i]))) ``` 我們可以拼湊所有功能并顯示人類可讀的混淆矩陣。 ```py # Example of Calculating and Displaying a Pretty Confusion Matrix # calculate a confusion matrix def confusion_matrix(actual, predicted): unique = set(actual) matrix = [list() for x in range(len(unique))] for i in range(len(unique)): matrix[i] = [0 for x in range(len(unique))] lookup = dict() for i, value in enumerate(unique): lookup[value] = i for i in range(len(actual)): x = lookup[actual[i]] y = lookup[predicted[i]] matrix[y][x] += 1 return unique, matrix # pretty print a confusion matrix def print_confusion_matrix(unique, matrix): print('(A)' + ' '.join(str(x) for x in unique)) print('(P)---') for i, x in enumerate(unique): print("%s| %s" % (x, ' '.join(str(x) for x in matrix[i]))) # Test confusion matrix with integers actual = [0,0,0,0,0,1,1,1,1,1] predicted = [0,1,1,0,0,1,0,1,1,1] unique, matrix = confusion_matrix(actual, predicted) print_confusion_matrix(unique, matrix) ``` 運行該示例將生成以下輸出。我們可以在頂部和底部看到0和1的類標簽。從左上角到右下角向下看矩陣的對角線,我們可以看到3個0的預測是正確的,4個預測的1個是正確的。 查看其他單元格,我們可以看到2 + 1或3個預測錯誤。我們可以看到2個預測是1,實際上實際上是0類值。我們可以看到1個預測是0,實際上實際上是1。 ```py (A)0 1 (P)--- 0| 3 1 1| 2 4 ``` 除了分類準確性之外,混淆矩陣始終是一個好主意,以幫助解釋預測。 ### 3.平均絕對誤差 回歸問題是預測實際價值的問題。 要考慮的一個簡單指標是預測值與預期值相比的誤差。 平均絕對誤差或簡稱MAE是一個很好的第一個誤差度量標準。 它被計算為絕對誤差值的平均值,其中“絕對值”表示“為正”,以便它們可以加在一起。 ```py MAE = sum( abs(predicted_i - actual_i) ) / total predictions ``` 下面是一個名為 **mae_metric()**的函數,它實現了這個指標。如上所述,它需要一個實際結果值列表和一個預測列表。我們使用內置的 **abs()** Python函數來計算求和的絕對誤差值。 ```py def mae_metric(actual, predicted): sum_error = 0.0 for i in range(len(actual)): sum_error += abs(predicted[i] - actual[i]) ``` 我們可以設計一個小的回歸數據集來測試這個函數。 ```py actual predicted 0.1 0.11 0.2 0.19 0.3 0.29 0.4 0.41 0.5 0.5 ``` 只有一個預測(0.5)是正確的,而所有其他預測都是錯誤的0.01。因此,我們預計這些預測的平均絕對誤差(或平均正誤差)略小于0.01。 下面是一個用設想的數據集測試 **mae_metric()**函數的例子。 ```py # Calculate mean absolute error def mae_metric(actual, predicted): sum_error = 0.0 for i in range(len(actual)): sum_error += abs(predicted[i] - actual[i]) return sum_error / float(len(actual)) # Test RMSE actual = [0.1, 0.2, 0.3, 0.4, 0.5] predicted = [0.11, 0.19, 0.29, 0.41, 0.5] mae = mae_metric(actual, predicted) print(mae) ``` 運行此示例將打印下面的輸出。我們可以看到,正如預期的那樣,MAE約為0.008,小值略低于0.01。 ```py 0.007999999999999993 ``` ### 4.均方根誤差 在一組回歸預測中計算誤差的另一種流行方法是使用均方根誤差。 縮寫為RMSE,該度量有時稱為均方誤差或MSE,從計算和名稱中刪除根部分。 RMSE計算為實際結果和預測之間的平方差異的平均值的平方根。 平方每個錯誤會強制值為正,并且均方誤差的平方根將誤差度量返回到原始單位以進行比較。 ```py RMSE = sqrt( sum( (predicted_i - actual_i)^2 ) / total predictions) ``` 下面是一個名為 **rmse_metric()**的函數的實現。它使用數學模塊中的 **sqrt()**函數,并使用**運算符將誤差提高到2次冪。 ```py # Calculate root mean squared error def rmse_metric(actual, predicted): sum_error = 0.0 for i in range(len(actual)): prediction_error = predicted[i] - actual[i] sum_error += (prediction_error ** 2) mean_error = sum_error / float(len(actual)) return sqrt(mean_error) ``` 我們可以在用于測試上面的平均絕對誤差計算的相同數據集上測試該度量。 以下是一個完整的例子。同樣,我們希望誤差值通常接近0.01。 ```py from math import sqrt # Calculate root mean squared error def rmse_metric(actual, predicted): sum_error = 0.0 for i in range(len(actual)): prediction_error = predicted[i] - actual[i] sum_error += (prediction_error ** 2) mean_error = sum_error / float(len(actual)) return sqrt(mean_error) # Test RMSE actual = [0.1, 0.2, 0.3, 0.4, 0.5] predicted = [0.11, 0.19, 0.29, 0.41, 0.5] rmse = rmse_metric(actual, predicted) print(rmse) ``` 運行該示例,我們看到下面的結果。結果略高于0.0089。 RMSE值總是略高于MSE值,隨著預測誤差的增加,MSE值變得更加明顯。這是使用RMSE而不是MSE的好處,因為它會以較差的分數懲罰較大的錯誤。 ```py 0.00894427190999915 ``` ## 擴展 您只看到了最廣泛使用的表現指標的一小部分樣本。 您可能還需要許多其他表現指標。 下面列出了5個額外的表現指標,您可能希望實現這些指標以擴展本教程 * 分類精度。 * 回想一下分類。 * F1進行分類。 * ROC曲線下的面積或分類的AUC。 * 擬合優度或R ^ 2(R平方)用于回歸。 **您是否實施了這些擴展?** 在下面的評論中分享您的經驗。 ## 評論 在本教程中,您了解了如何在Python中從頭開始實現算法預測表現指標。 具體來說,你學到了: * 如何實現和解釋分類準確性。 * 如何實現和解釋分類問題的混淆矩陣。 * 如何實現和解釋回歸的平均絕對誤差。 * 如何實現和解釋回歸的均方根誤差。 **你有什么問題嗎?** 在評論中提出您的問題,我會盡力回答。
                  <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>

                              哎呀哎呀视频在线观看