<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/implement-baseline-machine-learning-algorithms-scratch-python/](https://machinelearningmastery.com/implement-baseline-machine-learning-algorithms-scratch-python/) 在預測建模問題上建立基線表現非常重要。 基線為您稍后評估的更高級方法提供了比較點。 在本教程中,您將了解如何在Python中從頭開始實現基線機器學習算法。 完成本教程后,您將了解: * 如何實現隨機預測算法。 * 如何實現零規則預測算法。 讓我們開始吧。 * **更新Aug / 2018** :經過測試和更新,可與Python 3.6配合使用。 ![How To Implement Baseline Machine Learning Algorithms From Scratch With Python](img/a6eef0a4a1a40fdd7d4ea80ebe51c609.jpg) 如何使用Python從頭開始實施基線機器學習算法 照片由 [Vanesser III](https://www.flickr.com/photos/hapinachu/13767713/) ,保留一些權利。 ## 描述 有許多機器學習算法可供選擇。事實上數以百計。 您必須知道給定算法的預測是否良好。但你怎么知道的? 答案是使用基線預測算法。基線預測算法提供了一組預測,您可以像對問題的任何預測一樣進行評估,例如分類準確度或RMSE。 在評估問題的所有其他機器學習算法時,這些算法的分數提供了所需的比較點。 一旦建立,您可以評論給定算法與樸素基線算法相比有多好,提供給定方法實際有多好的背景。 兩種最常用的基線算法是: * 隨機預測算法。 * 零規則算法。 當開始一個比傳統分類或回歸問題更具粘性的新問題時,首先設計一個特定于您的預測問題的隨機預測算法是個好主意。稍后您可以對此進行改進并設計零規則算法。 讓我們實現這些算法,看看它們是如何工作的。 ## 教程 本教程分為兩部分: 1. 隨機預測算法。 2. 零規則算法。 這些步驟將為您的機器學習算法實現和計算基線表現提供所需的基礎。 ### 1.隨機預測算法 隨機預測算法預測在訓練數據中觀察到的隨機結果。 它可能是最簡單的算法。 它要求您將所有不同的結果值存儲在訓練數據中,這可能對具有許多不同值的回歸問題很大。 因為隨機數用于做出決策,所以在使用算法之前修復隨機數種子是個好主意。這是為了確保我們獲得相同的隨機數集,并且每次運行算法時都會得到相同的決策。 下面是名為 **random_algorithm()**的函數中的隨機預測算法的實現。 該函數既包含包含輸出值的訓練數據集,也包含必須預測輸出值的測試數據集。 該功能適用??于分類和回歸問題。它假定訓練數據中的輸出值是每行的最后一列。 首先,從訓練數據中收集該組唯一輸出值。然后,為測試集中的每一行選擇隨機選擇的輸出值。 ```py # Generate random predictions def random_algorithm(train, test): output_values = [row[-1] for row in train] unique = list(set(output_values)) predicted = list() for row in test: index = randrange(len(unique)) predicted.append(unique[index]) return predicted ``` 為簡單起見,我們可以使用僅包含輸出列的小數據集來測試此函數。 訓練數據集中的輸出值為“0”或“1”,表示算法將從中選擇的預測集是{0,1}。測試集還包含單個列,沒有數據,因為預測未知。 ```py from random import seed from random import randrange # Generate random predictions def random_algorithm(train, test): output_values = [row[-1] for row in train] unique = list(set(output_values)) predicted = list() for row in test: index = randrange(len(unique)) predicted.append(unique[index]) return predicted seed(1) train = [[0], [1], [0], [1], [0], [1]] test = [[None], [None], [None], [None]] predictions = random_algorithm(train, test) print(predictions) ``` 運行該示例計算測試數據集的隨機預測并打印這些預測。 ```py [0, 0, 1, 0] ``` 隨機預測算法易于實現且運行速度快,但我們可以做得更好作為基線。 ### 2.零規則算法 零規則算法是比隨機算法更好的基線。 它使用有關給定問題的更多信息來創建一個規則以進行預測。此規則因問題類型而異。 讓我們從分類問題開始,預測一個類標簽。 #### 分類 對于分類問題,一條規則是預測訓練數據集中最常見的類值。這意味著如果訓練數據集具有90個類“0”的實例和10個類“1”的實例,則它將預測“0”并且實現90/100或90%的基線準確度。 這比隨機預測算法要好得多,后者平均只能達到82%的準確率。有關如何計算隨機搜索估計值的詳細信息,請參閱以下內容: ```py = ((0.9 * 0.9) + (0.1 * 0.1)) * 100 = 82% ``` 下面是一個名為 **zero_rule_algorithm_classification()**的函數,它為分類情況實現了這個功能。 ```py # 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 ``` 該函數利用 **max()**函數和key屬性,這有點聰明。 給定訓練數據中觀察到的類值列表, **max()**函數采用一組唯一的類值,并調用集合中每個類值的類值列表上的計數。 結果是它返回在訓練數據集中觀察到的類值列表中具有最高觀察值計數的類值。 如果所有類值具有相同的計數,那么我們將選擇在數據集中觀察到的第一個類值。 一旦我們選擇了一個類值,它就會用于對測試數據集中的每一行進行預測。 下面是一個包含設計數據集的工作示例,其中包含4個類“0”的示例和2個類“1”的示例。我們希望算法選擇類值“0”作為測試數據集中每行的預測。 ```py from random import seed from random import randrange # 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(train))] return predicted seed(1) train = [['0'], ['0'], ['0'], ['0'], ['1'], ['1']] test = [[None], [None], [None], [None]] predictions = zero_rule_algorithm_classification(train, test) print(predictions) ``` 運行此示例進行預測并將其打印到屏幕。正如所料,選擇并預測了類值“0”。 ```py ['0', '0', '0', '0', '0', '0'] ``` 現在,讓我們看一下回歸問題的零規則算法。 #### 回歸 回歸問題需要預測實際價值。 對實際值的良好默認預測是預測集中趨勢。這可以是均值或中位數。 一個好的默認值是使用訓練數據中觀察到的輸出值的平均值(也稱為平均值)。 這可能比隨機預測具有更低的誤差,隨機預測將返回任何觀察到的輸出值。 下面是一個名為 **zero_rule_algorithm_regression()**的函數。它的工作原理是計算觀察到的輸出值的平均值。 ```py mean = sum(value) / total values ``` 一旦計算出,則對訓練數據中的每一行預測平均值。 ```py from random import randrange # zero rule algorithm for regression def zero_rule_algorithm_regression(train, test): output_values = [row[-1] for row in train] prediction = sum(output_values) / float(len(output_values)) predicted = [prediction for i in range(len(test))] return predicted ``` 可以使用一個簡單的示例測試此功能。 我們可以設計一個小數據集,其中已知平均值為15。 ```py 10 15 12 15 18 20 mean = (10 + 15 + 12 + 15 + 18 + 20) / 6 mean = 90 / 6 mean = 15 ``` 以下是完整的示例。我們期望測試數據集中的4行中的每一行都預測平均值15。 ```py from random import seed from random import randrange # zero rule algorithm for regression def zero_rule_algorithm_regression(train, test): output_values = [row[-1] for row in train] prediction = sum(output_values) / float(len(output_values)) predicted = [prediction for i in range(len(test))] return predicted seed(1) train = [[10], [15], [12], [15], [18], [20]] test = [[None], [None], [None], [None]] predictions = zero_rule_algorithm_regression(train, test) print(predictions) ``` 運行該示例計算打印的預測輸出值。正如所料,測試數據集中每行的平均值為15。 ```py [15.0, 15.0, 15.0, 15.0, 15.0, 15.0] ``` ## 擴展 以下是基線算法的一些擴展,您可能希望將工具作為本教程的擴展進行研究。 * 替代中心趨勢,其中預測中位數,模式或其他集中趨勢計算而不是平均值。 * 移動平均值用于預測最后n個記錄的平均值的時間序列問題。 ## 評論 在本教程中,您發現了計算機器學習問題的表現基線的重要性。 你現在知道了: * 如何實現分類和回歸問題的隨機預測算法。 * 如何實現分類和回歸問題的零規則算法。 **你有什么問題嗎?** 在評論中提出您的問題,我會盡力回答。
                  <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>

                              哎呀哎呀视频在线观看