オープンソース プロジェクト AutoXGB を使用して AutoML 開発を支援し、わずか数行のコードでアプリケーション API を構築します。

オープンソース プロジェクト AutoXGB を使用して AutoML 開発を支援し、わずか数行のコードでアプリケーション API を構築します。

翻訳者 | 朱 仙中

校正 | 梁哲、孫淑娟

AutoML の紹介

自動機械学習 (AutoML) は、さまざまな機械学習プロセスを自動的に実行し、エラー メトリックを最適化して最適なモデルを生成することができます。これらのプロセスには、データの前処理、エンコード、スケーリング、ハイパーパラメータの最適化、モデルのトレーニング、成果物と結果リストの生成が含まれます。機械学習プロセスを自動化することで、ユーザーフレンドリーで、少ないコードで正確な結果を生成する AI ソリューションを迅速に開発できるようになります。

市場で人気のある AutoML ライブラリには次のようなものがあります。

  • ライトオートML
  • ​​MLジャー​​
  • ​​評価ML​​
  • フラム
  • ピカレット
  • オートグルーオン
  • ​​H2O 3​​

このチュートリアルでは、1994 年の米国国勢調査の収入データを使用して、ある人が年間 50,000 ドル以上稼いでいるかどうかを予測します。これは典型的なバイナリ分類問題であり、CC0 パブリック ドメイン ライセンスで利用可能な Kaggle Adult Census Income データセットを使用して予測を行います。このデータは、Silicon Graphics (SGI) のデータマイニングおよび視覚化部門の Ronny Kohavi 氏と Barry Becker 氏によって、1994 年の米国国勢調査局データベースから提供されました。ただし、ここではデータ分析やモデルの動作については詳しく説明せず、わずか数行のコードで最適化された機械学習モデルを構築し、FastAPI サーバーを使用してアクセスします。

AutoXGB プロジェクトの紹介

AutoXGB は、モデルの表形式データセットを CSV ファイルから直接トレーニングできる、オープンソースのシンプルで効果的な AutoML 補助開発ツールです。 AutoXGB は、モデルのトレーニングに XGBoost (最適化された分散勾配ブースティング ライブラリ) を使用し、ハイパーパラメータの最適化に Optuna (機械学習とディープラーニング用に特別に設計された自動ハイパーパラメータ最適化フレームワーク) を使用し、API 形式でモデル推論を提供する Python ベースの FastAPI フレームワークを使用します。

まず、AutoXGB のインストールから始めましょう。サーバーの実行中にエラーが発生した場合は、事前に FastAPI フレームワークと unvicorn サーバー プログラムが正しくインストールされていることを確認してください。 AutoXGB をインストールするコマンドは次のとおりです。

 pip インストールautoxgb

初期化

次に、AutoXGB 関数の機能と、それに関連するさまざまなパラメータを使用して計算結果を改善したり、トレーニング時間を短縮したりする方法について詳しく説明します。 AutoXGB 関数のパラメータの意味は次のとおりです。

  • train_filename:トレーニング データが保存されているパス。
  • output:成果物が保存される出力フォルダーへのパス。
  • test_filename:テストデータが保存されているパス。指定しない場合は、フォールド外予測 (OOF 予測) のみが保存されます。
  • task:このパラメータが指定されていない場合、システムは自動的にその値を推測します。このパラメータには 2 つの値があります。

1.「分類」

2. 「回帰」

  • idx:このパラメータ値が指定されていない場合、システムは id という名前を使用して id 列を自動的に生成します。
  • ターゲット:このパラメータ値が指定されていない場合、ターゲット列の名前は target であると想定され、問題はバイナリ分類、マルチクラス分類、または単一列回帰の 3 つの問題のいずれかと見なされます。このパラメータは次の 2 つの値を取ることができます。

1.["ターゲット"]

2.["ターゲット1", "ターゲット2"]

  • 機能:このパラメータ値が指定されていない場合は、id、targets、kfold 列を除くすべての列が使用されます。たとえば、値を指定するには次のようにします。

1.features = ["col1", "col2"]

  • categorical_features:このパラメータ値が指定されていない場合、カテゴリ列は自動的に推測されます。たとえば、値を指定するには次のようにします。

1.カテゴリ特徴 = ["col1", "col2"]

  • use_gpu:このパラメータ値を指定しないと、GPU コンピューティング機能は有効になりません。たとえば、値を指定するには次のようにします。

1.use_gpu = True

2.use_gpu = False

  • num_folds:クロス検証に使用されるフォールドの数。
  • seed:再現性のためのランダムシード。
  • num_trials:実行する Optuna の試行回数。デフォルトは 1000 です。
  • time_limit: Optuna テストの制限時間 (秒単位)。

1. 指定しない場合は、すべてのトライアルが実行されます。現時点では(デフォルトでは)time_limit = None です。

  • fast: fast パラメータ値が True に設定されている場合、ハイパーパラメータの調整は 1 回だけ使用されるため、最適化時間が短縮されます。その後、残りのフォールドに対してトレーニングが実行され、OOF とテスト予測が生成されます。

テスト プロジェクトでは、train_filename、output、target、num_folds、seed、num_trails、time_limit の各パラメーターを除くほとんどのパラメーターの値をデフォルト値に設定しました。プロジェクト内の各パラメータの完全な設定は次のとおりです。

 autoxgb からAutoXGB をインポート
トレーニングファイル名= "binary_classification.csv"
出力= "出力"
test_filename = なし
タスク= なし
idx = なし
目標= [ "収入" ]
機能= なし
カテゴリ特徴= なし
use_gpu = False
num_folds = 5
シード= 42
試行回数= 100
時間制限= 360
速い= False

トレーニングと最適化

これで、AutoXGB 関数を使用してモデルを定義し、以前に定義したパラメータをモデルに追加できます。最後に、axgb.train() 関数を呼び出してトレーニング プロセスを開始します。この時点で、XGBoost と Optuna が実行され、さまざまな成果物 (モデル、予測、結果、構成、パラメーター、エンコーダーなど) が出力されます。

 axgb = AutoXGB (
トレインファイル名= トレインファイル名
出力= 出力
テストファイル名= テストファイル名
タスク= タスク
idx = idx
ターゲット= ターゲット
機能= 特徴
カテゴリ特徴= カテゴリ特徴
使用GPU = 使用GPU
num_folds = num_folds
種子= 種子
試行回数= 試行回数
時間制限= 時間制限
速い= 速い

axgb.train ( ) 関数

トレーニング プロセスには 10 ~ 12 分かかり、以下に示す最良のトレーニング結果を確認できます。制限時間を長くすることで F1 スコアを向上させることができます。さらに、他のハイパーパラメータを調整してモデルのパフォーマンスを向上させることもできます。

 2022 - 0 2 - 0 9 18 : 11 : 27.163 | INFO | autoxgb . utils : predict_model : 336 - メトリクス: { 'auc' : 0.851585935958628'logloss' : 0.3868651767621002'f1' : 0.5351485750859325'accuracy' : 0.8230396087432015'precision' : 0.7282822005864846'recall' : 0.42303153575005525 }

CLIを使用したトレーニング

bash ターミナルを使用してモデルをトレーニングするには、コマンド autoxgb train を使用できます。この時点では、train_filename と output の 2 つのパラメータを設定するだけで済みます。パラメーター train_filename はトレーニング バイナリ分類ファイル名を決定するために使用され、パラメーター output は出力フォルダーの場所を示すために使用されます。コマンドは次のとおりです。

 autoxgb 列車\
- - train_filename binary_classification.csv \
- - 出力出力\

ウェブAPI

ターミナルで autoxgb サービスを実行すると、FastAPI サーバーをローカルで実行できます。

AutoXGB サービス パラメータ

  • model_path:モデル ファイルへのパス。このテストでは、出力フォルダーをポイントします。
  • ポート:サーバー ホストが実行されているポート番号。値は 8080 です。
  • ホスト:サーバーが稼働しているサーバー ホスト。IP アドレスは 0.0.0.0 です。
  • ワーカー:ワーカー スレッドまたは同時リクエストの数。
  • debug:エラーと成功のログを表示します。

Deepnoteクラウドサーバー上で実行

クラウド上でサーバーを実行するために、Deepnote は ngrok を使用してパブリック URL を作成しました。このオプションを有効にしてポート 8080 を使用するだけです。もちろん、ローカルで実行している場合は、この手順は必要なく、アドレス「http://0.0.0.0:8080」を直接使用できます。

サーバーが実行されているモデル パス、ホスト IP、ポート番号を提供します。

 ! autoxgb サーブ- - model_path / work / output - - ホスト0.0.0 .0 - - ポート8080 - - デバッグ

結果は、API がスムーズに実行されていることを示しています。対応する結果データを確認するには、URL https://8d3ae411-c6bc-4cad-8a14-732f8e3f13b7.deepnoteproject.com を使用できます。

 情報: これらディレクトリ変更監視します: [ '/work' ]
情報: Uvicorn はhttp://0.0.0.0:8080 実行されています( 終了するにはCTRL + C を押してください)
情報: watchgod を使用してリローダープロセス[ 153 ] を開始しました
情報: サーバープロセスを開始しました[ 163 ]
情報: アプリケーションの起動待機しています
情報: アプリケーションの起動が完了しました
情報: 172.3.161 .55 : 40628 - "GET /docs HTTP/1.1" 200 OK
情報: 172.3.188.123 : 38788- " GET /openapi.json HTTP/1.1" 200 OK
情報: 172.3.167 .43 : 48326 - "GET /docs HTTP/1.1" 200 OK
情報: 172.3.161.55 : 47018- " GET /openapi.json HTTP/1.1" 200 OK

予測する

ランダムな入力を追加して、誰かの収入が 50,000 ドルを超えるかどうかを予測できます。この例では、FastAPI/docs オプションを使用して UI にアクセスします。

入力データ

モデル予測を実行するには FastAPI GUI を使用します。これは、サーバー アドレスの末尾に /docs を追加することで実行できます (例: "172.3.167.43:39118/docs")。このプロジェクトで入力されたその他のテスト データは次のとおりです。

  • 作業クラス: 「プライベート」
  • 学歴: 「高校卒業」
  • 配偶者の有無: 「未亡人」
  • 職業: 「運送業」
  • 関係: 「未婚」
  • 人種: 「白人」
  • 性別: 「男性」
  • 出身国: "アメリカ合衆国"
  • 年齢: 20
  • アイテム番号: 313986
  • 教育番号: 9
  • 資本利得: 0
  • 資本損失: 0
  • 週の労働時間: 40

テスト結果

実験の結果、金額が 50,000 ドル未満の場合の信頼度レベルは 97.6%、金額が 50,000 ドルを超える場合の信頼度レベルは 2.3% でした。

リクエストライブラリを使ったテスト

Python のリクエスト ライブラリを使用して API をテストすることもできます。この手順は非常に簡単で、辞書の形式でパラメータをプッシュするだけで、JSON 形式で出力結果を取得できます。

 輸入リクエスト

パラメータ= {
「ワーククラス」「プライベート」
「教育」「高校卒業」
「婚姻状況」 : 「未亡人」
「職業」「輸送-移動」
「関係」「未婚」
「人種」「白人」
「性別」「男性」
"native.country" : "アメリカ合衆国" ,
「年齢」 : 20 ,
"fnlwgt" : 313986 ,
「教育.num」 : 9
「資本利得」 : 0 ,
「資本損失」 : 0 ,
「週あたりの時間」 : 40
}

記事= リクエスト. 投稿(
f "https://8d3ae411-c6bc-4cad-8a14-732f8e3f13b7.deepnoteproject.com/predict"
json = パラメータ


data_dict = article.json ( )
印刷( data_dict )
## { 'id' : 0'<=50K' : 0.9762147068977356'>50K' : 0.023785298690199852 }

プロジェクトのソースコード

この記事のプロジェクトの完全なコードと例に興味がある場合は、次のリンクにアクセスしてください。

  • ディープノート
  • ​​GitHub​​
  • ​​DAGsハブ​​

結論は

私は AutoML と AutoXGB を使用して、Kaggle コンペティションで優れた結果を達成し、いくつかの機械学習プロジェクト用の基本モデルを開発しました。機械学習のプロセス全体を通じて、迅速かつ正確な結果が得られることもありますが、最先端のソリューションを作成する場合は、さまざまな機械学習のプロセスを手動で試す必要があります。

このチュートリアルでは、AutoXGB のさまざまな機能を紹介しました。これで、AutoXGB を使用してデータの前処理、XGboost モデルのトレーニング、Optuna を使用したモデルの最適化、FastAPI を使用した Web サーバーの実行を行うことができます。つまり、AutoXGB は日常的な表形式データの問題に対してエンドツーエンドのソリューションを提供することができます。

翻訳者紹介

Zhu Xianzhong 氏は、51CTO のコミュニティ エディターであり、51CTO の専門ブロガー兼講師であり、濰坊の大学のコンピューター教師であり、フリーランス プログラミング コミュニティのベテランです。初期にはさまざまな Microsoft テクノロジに注力し (ASP.NET AJX および Cocos 2d-X に関連する 3 冊の技術書を編纂)、オープンソースの世界に 10 年近く携わってきました (人気のフルスタック Web 開発テクノロジに精通)。OneNet/AliOS+Arduino/ESP32/Raspberry Pi をベースとした IoT 開発テクノロジや、Scala+Hadoop+Spark+Flink などのビッグデータ開発テクノロジを理解しています。

原題: No Brainer AutoML with AutoXGB 、著者: Abid Ali Awan


<<:  音声認識のクロスドメインおよびクロス言語移行の難しさを少しずつ軽減するにはどうすればよいでしょうか?

>>:  クラウド コンピューティングにおいて人工知能はどのような役割を果たすことができますか?

ブログ    
ブログ    
ブログ    

推薦する

AI は今後 10 年間で BAT のリセット ボタンとなるでしょうか?

中国の王朝には必ず一つの法則がある。一代か二代で王位は行き詰まりを迎える。漢の時代には呂后の乱、唐の...

人工知能のための機械学習アルゴリズムシステムの概要

[[198836]] CCAI 2017に参加した後、専門家の講演を聞いて多くの恩恵を受けました。私...

...

...

...

...

2020 年の生体認証市場 - パンデミックによる業界の動向の変化

生体認証技術市場は、COVID-19の流行により大きな影響を受けるでしょう。 接触のみの生体認証を採...

2021 年のトップ 12 AI ツールとフレームワーク

AIトレンドがあらゆるところに広がる2021年を迎える準備はできていますか? 2021 年のトップ ...

ロボットが「自己認識」を持つためには、まず自分の声を認識する必要があるのでしょうか?

人工知能の発展の波の中で、人間はロボットが自己認識を持つことに対して非常に警戒心を抱いています。結局...

自動運転の運転手が死亡事故で無罪となった。将来のAIの世界はより良くなるだろうか?

2018年3月18日、アメリカ・アリゾナ州で、セーフティドライバーを乗せたUberの自動運転車が道...

Tian Yuandong らの新しい研究: メモリのボトルネックを突破し、4090 で 7B の大規模モデルを事前トレーニング可能に

先月、Meta FAIR の Tian Yuandong が参加した研究が大きな称賛を受けました。彼...

顔の照明を自由に編集:ジェネレーティブモデルに基づく3Dリライティングシステムがリリース

実際の人間の顔の 3 次元モデリング、合成、再照明は、コンピュータ グラフィックスの分野で高い応用価...

...

Javaソートアルゴリズムの概要(IV):シェルソート

シェルソート(縮小増分法)は挿入型ソートに属し、順序付けられていないシーケンス全体をいくつかの小さな...

...