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

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 在 Python 中開始使用 XGBoost 的 7 步迷你課程 > 原文: [https://machinelearningmastery.com/xgboost-python-mini-course/](https://machinelearningmastery.com/xgboost-python-mini-course/) ### XGBoost 使用 Python 迷你課程。 XGBoost 是梯度提升的一種實現,用于贏得機器學習競賽。 它很強大,但很難開始。 在這篇文章中,您將發現使用 Python 的 XGBoost 7 部分速成課程。 這個迷你課程專為已經熟悉 scikit-learn 和 SciPy 生態系統的 Python 機器學習從業者而設計。 讓我們開始吧。 * **2017 年 1 月更新**:已更新,以反映 scikit-learn API 版本 0.18.1 中的更改??。 * **更新 March / 2018** :添加了備用鏈接以下載數據集,因為原始圖像已被刪除。 ![XGBoost With Python Mini-Course](https://img.kancloud.cn/85/84/8584a097f60d09dc1f3ca40b80d321a1_640x387.jpg) XGBoost 與 Python 迷你課程 照片由 [Teresa Boardman](https://www.flickr.com/photos/tboard/6566015625/) ,保留一些權利。 (**提示**:_ 你可能想打印或書簽這個頁面,以便以后再參考 _。) ## 這個迷你課程是誰? 在我們開始之前,讓我們確保您在正確的位置。以下列表提供了有關本課程設計對象的一般指導原則。 如果你沒有完全匹配這些點,請不要驚慌,你可能只需要在一個或另一個區域刷新以跟上。 * **開發人員知道如何編寫一些代碼**。這意味著使用 Python 完成任務并了解如何在工作站上設置 SciPy 生態系統(先決條件)對您來說并不是什么大問題。它并不意味著你是一個向導編碼器,但它確實意味著你不怕安裝軟件包和編寫腳本。 * **知道一點機器學習的開發人員**。這意味著您了解機器學習的基礎知識,如交叉驗證,一些算法和偏差 - 方差權衡。這并不意味著你是一個機器學習博士,只是你知道地標或知道在哪里查找它們。 這個迷你課程不是 XGBoost 的教科書。沒有方程式。 它將帶您從一個熟悉 Python 的小機器學習的開發人員到能夠獲得結果并將 XGBoost 的強大功能帶到您自己的項目中的開發人員。 ## 迷你課程概述(期待什么) 這個迷你課程分為 7 個部分。 每節課的目的是讓普通開發人員大約 30 分鐘。你可能會更快完成一些,而其他人可能會選擇更深入,花更多時間。 您可以根據需要快速或慢速完成每個部分。舒適的時間表可能是在一周的時間內每天完成一節課。強烈推薦。 您將在接下來的 7 節課中討論的主題如下: * **第 01 課**:Gradient Boosting 簡介。 * **第 02 課**:XGBoost 簡介。 * **第 03 課**:開發你的第一個 XGBoost 模型。 * **第 04 課**:監控表現和提前停止。 * **第 05 課**:功能與 XGBoost 的重要性。 * **第 06 課**:如何配置梯度提升。 * **第 07 課**:XGBoost Hyperparameter Tuning。 這將是一件很有趣的事情。 你將不得不做一些工作,一點點閱讀,一點研究和一點點編程。您想了解 XGBoost 嗎? (**提示**:_ 這些課程的幫助可以在這個博客上找到,使用搜索功能 _。) 如有任何問題,請在下面的評論中發布。 在評論中分享您的結果。 掛在那里,不要放棄! ## 第 01 課:梯度提升簡介 梯度提升是構建預測模型的最強大技術之一。 提升的想法來自于弱學習器是否可以被修改為變得更好的想法。應用程序取得巨大成功的第一個實現提升的是 Adaptive Boosting 或簡稱 AdaBoost。 AdaBoost 中的弱學習器是決策樹,只有一個分裂,稱為決策樹樁的短缺。 AdaBoost 和相關算法在統計框架中重鑄,并被稱為梯度提升機器。統計框架將推進作為一個數值優化問題,其目標是通過使用類似過程的梯度下降添加弱學習器來最小化模型的損失,因此得名。 Gradient Boosting 算法涉及三個要素: 1. **要優化的損失函數**,例如用于分類的交叉熵或用于回歸問題的均方誤差。 2. **做出預測的弱學習器**,例如貪婪構建的決策樹。 3. **一個加法模型,**用于添加弱學習器以最小化損失函數。 為了糾正所有先前樹木的殘留誤差,將新的弱學習器添加到模型中。結果是一個強大的預測建模算法,可能比隨機森林更強大。 在下一課中,我們將仔細研究梯度提升的 XGBoost 實現。 ## 第 02 課:XGBoost 簡介 XGBoost 是為速度和表現而設計的梯度提升決策樹的實現。 XGBoost 代表 e **X** treme **G** radient **Boosti** ng。 它由陳天琪開發,激光專注于計算速度和模型表現,因此幾乎沒有多余的裝飾。 除了支持該技術的所有關鍵變體之外,真正感興趣的是通過精心設計實施所提供的速度,包括: * **在訓練期間使用所有 CPU 內核構建樹的并行化**。 * **分布式計算**用于使用一組機器訓練超大型模型。 * **非核心計算**適用于不適合內存的超大型數據集。 * **緩存優化**的數據結構和算法,以充分利用硬件。 傳統上,梯度提升實現很慢,因為必須構造每個樹并將其添加到模型中的順序性質。 XGBoost 開發中的表現已經成為最好的預測建模算法之一,現在可以利用硬件平臺的全部功能,或者您可能在云中租用的超大型計算機。 因此,XGBoost 一直是競爭機器學習的基石,是贏家贏得和推薦的技術。例如,以下是一些最近的 Kaggle 比賽獲獎者所說的話: > 作為越來越多的 Kaggle 比賽的贏家,XGBoost 再次向我們展示了一個值得在您的工具箱中使用的全面算法。 - [Dato Winners 的采訪](http://goo.gl/AHkmWx) > 如有疑問,請使用 xgboost。 - [Avito Winner 的采訪](http://goo.gl/sGyGtu) 在下一課中,我們將使用 Python 開發我們的第一個 XGBoost 模型。 ## 第 03 課:開發您的第一個 XGBoost 模型 假設您有一個可用的 SciPy 環境,可以使用 pip 輕松安裝 XGBoost。 例如: ```py sudo pip install xgboost ``` 您可以在 [XGBoost 安裝說明](http://xgboost.readthedocs.io/en/latest/build.html)中了解有關在您的平臺上安裝和構建 XGBoost 的更多信息。 XGBoost 模型可以使用包裝類直接在 scikit-learn 框架中使用, **XGBClassifier** 用于分類, **XGBRegressor** 用于回歸問題。 這是在 Python 中使用 XGBoost 的推薦方法。 從 [UCI 機器學習庫](https://archive.ics.uci.edu/ml/datasets/Pima+Indians+Diabetes)下載 Pima Indians 糖尿病數據集[更新:[從這里下載](https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv))。它是二進制分類的一個很好的測試數據集,因為所有輸入變量都是數字的,這意味著問題可以直接建模而無需數據準備。 我們可以通過構造它并調用 **model.fit()**函數來訓練 XGBoost 模型進行分類: ```py model = XGBClassifier() model.fit(X_train, y_train) ``` 然后可以通過在新數據上調用 **model.predict()**函數來使用該模型進行預測。 ```py y_pred = model.predict(X_test) ``` 我們可以將這些結合起來如下: ```py # First XGBoost model for Pima Indians dataset from numpy import loadtxt from xgboost import XGBClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # load data dataset = loadtxt('pima-indians-diabetes.csv', delimiter=",") # split data into X and y X = dataset[:,0:8] Y = dataset[:,8] # split data into train and test sets seed = 7 test_size = 0.33 X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=test_size, random_state=seed) # fit model on training data model = XGBClassifier() model.fit(X_train, y_train) # make predictions for test data y_pred = model.predict(X_test) predictions = [round(value) for value in y_pred] # evaluate predictions accuracy = accuracy_score(y_test, predictions) print("Accuracy: %.2f%%" % (accuracy * 100.0)) ``` 在下一課中,我們將研究如何使用早期停止來限制過度擬合。 ## 第 04 課:監控表現和提前停止 XGBoost 模型可以在訓練期間評估和報告模型的測試集上的表現。 它通過在訓練模型和指定詳細輸出( **verbose = True** )時調用 **model.fit()**時指定測試數據集和評估指標來支持此功能。 例如,我們可以在訓練 XGBoost 模型時報告獨立測試集( **eval_set** )上的二進制分類錯誤率(**錯誤**),如下所示: ```py eval_set = [(X_test, y_test)] model.fit(X_train, y_train, eval_metric="error", eval_set=eval_set, verbose=True) ``` 使用此配置運行模型將在添加每個樹后報告模型的表現。例如: ```py ... [89] validation_0-error:0.204724 [90] validation_0-error:0.208661 ``` 一旦沒有對模型進行進一步改進,我們就可以使用此評估來停止訓練。 我們可以通過在調用 **model.fit()**時將 **early_stopping_rounds** 參數設置為在停止訓練之前驗證數據集未見改進的迭代次數來完成此操作。 下面提供了使用 Pima Indians Onset of Diabetes 數據集的完整示例。 ```py # exmaple of early stopping from numpy import loadtxt from xgboost import XGBClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # load data dataset = loadtxt('pima-indians-diabetes.csv', delimiter=",") # split data into X and y X = dataset[:,0:8] Y = dataset[:,8] # split data into train and test sets seed = 7 test_size = 0.33 X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=test_size, random_state=seed) # fit model on training data model = XGBClassifier() eval_set = [(X_test, y_test)] model.fit(X_train, y_train, early_stopping_rounds=10, eval_metric="logloss", eval_set=eval_set, verbose=True) # make predictions for test data y_pred = model.predict(X_test) predictions = [round(value) for value in y_pred] # evaluate predictions accuracy = accuracy_score(y_test, predictions) print("Accuracy: %.2f%%" % (accuracy * 100.0)) ``` 在下一課中,我們將研究如何使用 XGBoost 計算特征的重要性 ## 第 05 課:使用 XGBoost 進行功能重要性 使用諸如梯度提升之類的決策樹方法的集合的好處是它們可以從訓練的預測模型自動提供特征重要性的估計。 經過訓練的 XGBoost 模型可自動計算預測建模問題的特征重要性。 這些重要性分數可在訓練模型的 **feature_importances_** 成員變量中找到。例如,它們可以直接打印如下: ```py print(model.feature_importances_) ``` XGBoost 庫提供了一個內置函數來繪制按其重要性排序的特征。 該函數稱為 **plot_importance()**,可以按如下方式使用: ```py plot_importance(model) pyplot.show() ``` 這些重要性分數可以幫助您確定要保留或丟棄的輸入變量。它們也可以用作自動特征選擇技術的基礎。 下面提供了使用 Pima Indians Onset of Diabetes 數據集繪制特征重要性分數的完整示例。 ```py # plot feature importance using built-in function from numpy import loadtxt from xgboost import XGBClassifier from xgboost import plot_importance from matplotlib import pyplot # load data dataset = loadtxt('pima-indians-diabetes.csv', delimiter=",") # split data into X and y X = dataset[:,0:8] y = dataset[:,8] # fit model on training data model = XGBClassifier() model.fit(X, y) # plot feature importance plot_importance(model) pyplot.show() ``` 在下一課中,我們將研究啟發式算法,以便最好地配置梯度提升算法。 ## 第 06 課:如何配置梯度提升 梯度提升是應用機器學習最強大的技術之一,因此很快成為最受歡迎的技術之一。 但是,如何為您的問題配置梯度提升? 在原始梯度提升論文中發表了許多配置啟發式方法。它們可以概括為: * 學習率或收縮率(XGBoost 中的 **learning_rate** )應設置為 0.1 或更低,較小的值將需要添加更多樹。 * 樹的深度(XGBoost 中的 **tree_depth** )應該在 2 到 8 的范圍內配置,其中對于更深的樹沒有多少益處。 * 行采樣(XGBoost 中的**子樣本**)應配置在訓練數據集的 30%到 80%的范圍內,并且與未采樣的 100%的值進行比較。 這些是配置模型時的一個很好的起點。 一個好的通用配置策略如下: 1. 運行默認配置并查看訓練和驗證數據集上的學習曲線圖。 2. 如果系統過度學習,則降低學習率和/或增加樹木數量。 3. 如果系統學習不足,可以通過提高學習率和/或減少樹木數量來加快學習速度。 [Owen Zhang](http://goo.gl/OqIRIc) ,前 Kaggle 排名第一的競爭對手,現在是 Data Robot 的首席技術官提出了一個配置 XGBoost 的有趣策略。 他建議將樹木的數量設置為目標值,如 100 或 1000,然后調整學習率以找到最佳模型。這是快速找到好模型的有效策略。 在下一節和最后一節中,我們將看一個調整 XGBoost 超參數的示例。 ## 第 07 課:XGBoost 超參數調整 scikit-learn 框架提供了搜索參數組合的功能。 此功能在 **GridSearchCV** 類中提供,可用于發現配置模型以獲得最佳表現的最佳方法。 例如,我們可以定義一個樹的數量( **n_estimators** )和樹大小( **max_depth** )的網格,通過將網格定義為: ```py n_estimators = [50, 100, 150, 200] max_depth = [2, 4, 6, 8] param_grid = dict(max_depth=max_depth, n_estimators=n_estimators) ``` 然后使用 10 倍交叉驗證評估每個參數組合: ```py kfold = StratifiedKFold(n_splits=10, shuffle=True, random_state=7) grid_search = GridSearchCV(model, param_grid, scoring="neg_log_loss", n_jobs=-1, cv=kfold, verbose=1) result = grid_search.fit(X, label_encoded_y) ``` 然后,我們可以查看結果,以確定最佳組合以及改變參數組合的一般趨勢。 這是將 XGBoost 應用于您自己的問題時的最佳做法。要考慮調整的參數是: * 樹木的數量和大小( **n_estimators** 和 **max_depth** )。 * 學習率和樹木數量( **learning_rate** 和 **n_estimators** )。 * 行和列子采樣率(**子樣本**, **colsample_bytree** 和 **colsample_bylevel** )。 下面是調整 Pima Indians Onset of Diabetes 數據集中 **learning_rate** 的完整示例。 ```py # Tune learning_rate from numpy import loadtxt from xgboost import XGBClassifier from sklearn.model_selection import GridSearchCV from sklearn.model_selection import StratifiedKFold # load data dataset = loadtxt('pima-indians-diabetes.csv', delimiter=",") # split data into X and y X = dataset[:,0:8] Y = dataset[:,8] # grid search model = XGBClassifier() learning_rate = [0.0001, 0.001, 0.01, 0.1, 0.2, 0.3] param_grid = dict(learning_rate=learning_rate) kfold = StratifiedKFold(n_splits=10, shuffle=True, random_state=7) grid_search = GridSearchCV(model, param_grid, scoring="neg_log_loss", n_jobs=-1, cv=kfold) grid_result = grid_search.fit(X, Y) # summarize results print("Best: %f using %s" % (grid_result.best_score_, grid_result.best_params_)) means = grid_result.cv_results_['mean_test_score'] stds = grid_result.cv_results_['std_test_score'] params = grid_result.cv_results_['params'] for mean, stdev, param in zip(means, stds, params): print("%f (%f) with: %r" % (mean, stdev, param)) ``` ## XGBoost 學習迷你課程評論 恭喜你,你做到了。做得好! 花點時間回顧一下你走了多遠: * 您了解了梯度提升算法和 XGBoost 庫。 * 您開發了第一個 XGBoost 模型。 * 您學習了如何使用早期停止和功能重要性等高級功能。 * 您學習了如何配置梯度提升模型以及如何設計受控實驗來調整 XGBoost 超參數。 不要輕視這一點,你在很短的時間內走了很長的路。這只是您在 Python 中使用 XGBoost 的旅程的開始。繼續練習和發展你的技能。 你喜歡這個迷你課嗎?你有任何問題或疑點嗎? 發表評論讓我知道。
                  <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>

                              哎呀哎呀视频在线观看