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

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 使用重采樣評估 Python 中機器學習算法的表現 > 原文: [https://machinelearningmastery.com/evaluate-performance-machine-learning-algorithms-python-using-resampling/](https://machinelearningmastery.com/evaluate-performance-machine-learning-algorithms-python-using-resampling/) 您需要知道算法在看不見的數據上的表現。 評估算法表現的最佳方法是對已經知道答案的新數據進行預測。第二種最好的方法是使用稱為重采樣方法的統計學中的巧妙技術,這些技術允許您準確估計算法對新數據的執行情況。 在這篇文章中,您將了解如何使用 Python 和 scikit-learn 中的重采樣方法估計機器學習算法的準確性。 讓我們開始吧。 * **2017 年 1 月更新**:已更新,以反映版本 0.18 中 scikit-learn API 的更改。 * **2017 年 10 月更新**:更新了用于 Python 3 的打印語句。 * **更新 March / 2018** :添加了備用鏈接以下載數據集,因為原始圖像已被刪除。 ![Evaluate the Performance of Machine Learning Algorithms in Python using Resampling](https://img.kancloud.cn/3d/83/3d83c89cf739f4158066e6881e4d904e_500x392.jpg) 使用重新取樣 照片由 [Doug Waldron](https://www.flickr.com/photos/dougww/2453670430/) 評估 Python 中機器學習算法的表現,保留一些權利。 ## 關于秘籍 本文使用 Python 中的小代碼秘籍演示了重采樣方法。 每個秘籍都是獨立設計的,因此您可以將其復制并粘貼到項目中并立即使用。 每個秘籍中都使用 [Pima 印第安人糖尿病數據集](https://archive.ics.uci.edu/ml/datasets/Pima+Indians+Diabetes)。這是一個二元分類問題,其中所有輸入變量都是數字。在每個秘籍中,它直接從 [UCI 機器學習庫](http://archive.ics.uci.edu/ml/)下載(更新:[從這里下載](https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv))。您可以根據需要將其替換為您自己的數據集。 ## 評估您的機器學習算法 為什么不能在數據集上訓練機器學習算法,并使用來自同一數據集的預測來評估機器學習算法? 簡單的答案是過度擬合。 想象一個算法,記住它顯示的每個觀察。如果您在用于訓練算法的相同數據集上評估您的機器學習算法,那么這樣的算法將在訓練數據集上具有完美的分數。但它對新數據的預測將是可怕的。 我們必須在不用于訓練算法的數據上評估我們的機器學習算法。 評估是一種估計,我們可以用它來討論我們認為算法在實踐中實際可行的程度。它不是表現的保證。 一旦我們估算了算法的表現,我們就可以在整個訓練數據集上重新訓練最終算法,并為運行使用做好準備。 接下來,我們將研究四種不同的技術,我們可以使用這些技術來分割訓練數據集,并為我們的機器學習算法創建有用的表現估計: 1. 訓練和測試集。 2. K 折交叉驗證。 3. 保留一次交叉驗證。 4. 重復隨機測試 - 訓練分裂。 我們將從稱為 Train 和 Test Sets 的最簡單方法開始。 ## 1.分成訓練和測試裝置 我們可以用來評估機器學習算法表現的最簡單方法是使用不同的訓練和測試數據集。 我們可以將原始數據集分成兩部分。在第一部分訓練算法,對第二部分進行預測,并根據預期結果評估預測。 拆分的大小可能取決于數據集的大小和細節,盡管通常使用 67%的數據進行訓練,剩余的 33%用于測試。 該算法評估技術非常快。它非常適用于大型數據集(數百萬條記錄),其中有強有力的證據表明數據的兩個分裂都代表了潛在的問題。由于速度的原因,當您正在調查的算法訓練緩慢時,使用此方法很有用。 這種技術的缺點是它可能具有很大的差異。這意味著訓練和測試數據集的差異可能導致準確度估計的有意義差異。 在下面的示例中,我們將數據 Pima Indians 數據集拆分為 67%/ 33%,用于訓練和測試,并評估 Logistic 回歸模型的準確性。 ``` # Evaluate using a train and a test set import pandas from sklearn import model_selection from sklearn.linear_model import LogisticRegression url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv" names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] dataframe = pandas.read_csv(url, names=names) array = dataframe.values X = array[:,0:8] Y = array[:,8] test_size = 0.33 seed = 7 X_train, X_test, Y_train, Y_test = model_selection.train_test_split(X, Y, test_size=test_size, random_state=seed) model = LogisticRegression() model.fit(X_train, Y_train) result = model.score(X_test, Y_test) print("Accuracy: %.3f%%" % (result*100.0)) ``` 我們可以看到該模型的估計精度約為 75%。請注意,除了指定拆分的大小外,我們還指定了隨機種子。由于數據的分割是隨機的,我們希望確保結果是可重復的。通過指定隨機種子,我們確保每次運行代碼時都得到相同的隨機數。 如果我們想要將此結果與另一個機器學習算法或具有不同配置的相同算法的估計精度進行比較,這一點很重要。為了確保比較是蘋果換蘋果,我們必須確保他們接受相同數據的訓練和測試。 ``` Accuracy: 75.591% ``` ## 2\. K 折交叉驗證 交叉驗證是一種可用于估計機器學習算法表現的方法,其方差小于單個訓練測試集拆分。 它的工作原理是將數據集分成 k 部分(例如 k = 5 或 k = 10)。每次分割數據稱為折疊。該算法在 k-1 折疊上進行訓練,其中一個被扣住并在保持的背部折疊上進行測試。重復這一過程,以便數據集的每個折疊都有機會成為阻礙測試集。 運行交叉驗證后,您最終得到 k 個不同的表現分數,您可以使用均值和標準差來總結。 結果是在給定測試數據的情況下,對新數據的算法表現進行更可靠的估計。它更準確,因為算法在不同數據上被多次訓練和評估。 k 的選擇必須允許每個測試分區的大小足夠大以成為問題的合理樣本,同時允許對算法的訓練測試評估的足夠重復以提供對看不見的數據的算法表現的公平估計。 。對于數千或數萬條記錄中的適度大小的數據集,k 值為 3,5 和 10 是常見的。 在下面的示例中,我們使用 10 倍交叉驗證。 ``` # Evaluate using Cross Validation import pandas from sklearn import model_selection from sklearn.linear_model import LogisticRegression url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv" names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] dataframe = pandas.read_csv(url, names=names) array = dataframe.values X = array[:,0:8] Y = array[:,8] num_instances = len(X) seed = 7 kfold = model_selection.KFold(n_splits=10, random_state=seed) model = LogisticRegression() results = model_selection.cross_val_score(model, X, Y, cv=kfold) print("Accuracy: %.3f%% (%.3f%%)" % (results.mean()*100.0, results.std()*100.0)) ``` 您可以看到我們報告了績效指標的均值和標準差。在總結表現測量時,總結測量的分布是一種好的做法,在這種情況下假設高斯表現分布(非常合理的假設)并記錄平均值和標準偏差。 ``` Accuracy: 76.951% (4.841%) ``` ## 3.保留一次交叉驗證 您可以配置交叉驗證,以便折疊的大小為 1(k 設置為數據集中的觀察數)。交叉驗證的這種變化稱為留一交叉驗證。 結果是可以總結大量的表現測量,以便更加合理地估計模型在看不見的數據上的準確性。缺點是它可能是計算上比 k 折交叉驗證更昂貴的過程。 在下面的示例中,我們使用了一次性交叉驗證。 ``` # Evaluate using Leave One Out Cross Validation import pandas from sklearn import model_selection from sklearn.linear_model import LogisticRegression url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv" names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] dataframe = pandas.read_csv(url, names=names) array = dataframe.values X = array[:,0:8] Y = array[:,8] num_folds = 10 num_instances = len(X) loocv = model_selection.LeaveOneOut() model = LogisticRegression() results = model_selection.cross_val_score(model, X, Y, cv=loocv) print("Accuracy: %.3f%% (%.3f%%)" % (results.mean()*100.0, results.std()*100.0)) ``` 您可以在標準差中看到,得分比上述 k 倍交叉驗證結果具有更多的方差。 ``` Accuracy: 76.823% (42.196%) ``` ## 4.重復隨機測試 - 訓練分裂 k 折交叉驗證的另一個變化是創建數據的隨機分割,如上面描述的訓練/測試分裂,但重復多次分割和評估算法的過程,如交叉驗證。 這具有使用訓練/測試分割的速度以及 k 倍交叉驗證的估計表現的方差的減少。您也可以根據需要重復此過程。不利的一面是,重復可能包括訓練中的大部分相同數據或從運行到運行的測試拆分,從而在評估中引入冗余。 下面的示例將數據拆分為 67%/ 33%的訓練/測試拆分,并重復該過程 10 次。 ``` # Evaluate using Shuffle Split Cross Validation import pandas from sklearn import model_selection from sklearn.linear_model import LogisticRegression url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv" names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] dataframe = pandas.read_csv(url, names=names) array = dataframe.values X = array[:,0:8] Y = array[:,8] num_samples = 10 test_size = 0.33 num_instances = len(X) seed = 7 kfold = model_selection.ShuffleSplit(n_splits=10, test_size=test_size, random_state=seed) model = LogisticRegression() results = model_selection.cross_val_score(model, X, Y, cv=kfold) print("Accuracy: %.3f%% (%.3f%%)" % (results.mean()*100.0, results.std()*100.0)) ``` 我們可以看到,績效指標的分布與上面的 k 折交叉驗證相同。 ``` Accuracy: 76.496% (1.698%) ``` ## 什么技術使用時 * 通常,k 折交叉驗證是用于評估機器學習算法在看不見的數據上的表現的金標準,其中 k 設置為 3,5 或 10。 * 使用慢速算法時,使用訓練/測試分割有利于提高速度,并在使用大型數據集時產生具有較低偏差的表現估計。 * 當試圖平衡估計表現,模型訓練速度和數據集大小的方差時,諸如留一交叉驗證和重復隨機分裂等技術可能是有用的中間體。 最好的建議是試驗并找到一種快速解決問題的技術,并產生可用于制定決策的合理表現估算。如有疑問,請使用 10 倍交叉驗證。 ## 摘要 在這篇文章中,您發現了可用于估計機器學習算法表現的統計技術,稱為重新采樣。 具體來說,您了解到: 1. 訓練和測試集。 2. 交叉驗證。 3. 保留一次交叉驗證。 4. 重復隨機測試 - 訓練分裂。 您對重新采樣方法或此帖有任何疑問嗎?在評論中提出您的問題,我會盡力回答。
                  <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>

                              哎呀哎呀视频在线观看