logo

Python でのランダム フォレスト回帰

ランダム フォレスト回帰は、数値を予測するための多用途の機械学習手法です。複数のデシジョン ツリーの予測を組み合わせて、過剰適合を軽減し、精度を向上させます。パイソンの 機械学習 ライブラリを使用すると、このアプローチの実装と最適化が簡単になります。

アンサンブル学習

アンサンブル学習は、複数のモデルからの予測を組み合わせて、より正確で安定した予測を作成する機械学習手法です。これは、複数のモデルの集合知を活用して学習システムの全体的なパフォーマンスを向上させるアプローチです。



アンサンブルメソッドの種類

アンサンブル学習方法には、次のようなさまざまな種類があります。

  1. バギング (ブートストラップ集約): この方法には、トレーニング データのランダムなサブセットで複数のモデルをトレーニングすることが含まれます。次に、個々のモデルからの予測が、通常は平均化によって結合されます。
  2. ブースト: この方法には、一連のモデルのトレーニングが含まれます。後続の各モデルは、前のモデルによって発生したエラーに焦点を当てます。予測は重み付け投票スキームを使用して結合されます。
  3. スタッキング: この方法には、あるモデル セットからの予測を別のモデルの入力特徴として使用することが含まれます。最終的な予測は、第 2 レベルのモデルによって行われます。

ランダムフォレスト

ランダム フォレストは、複数のデシジョン ツリーからの予測を組み合わせて、より正確で安定した予測を生成するアンサンブル学習方法です。これは、分類タスクと回帰タスクの両方に使用できる教師あり学習アルゴリズムの一種です。

デシジョンツリー は分散が高くなりますが、それらをすべて並列に組み合わせると、各デシジョン ツリーがその特定のサンプル データで完全にトレーニングされるため、結果の分散は低くなります。そのため、出力は 1 つのデシジョン ツリーではなく、複数のデシジョン ツリーに依存します。分類問題の場合、最終出力は多数決分類器を使用して取得されます。回帰問題の場合、最終出力はすべての出力の平均です。この部分はと呼ばれます 集計



ランダムフォレスト回帰モデルの動作

ランダムフォレスト回帰モデルの動作

ランダムフォレスト回帰とは何ですか?

機械学習におけるランダム フォレスト回帰は、 テクニカルセット 両方を実行できる 回帰と分類 複数のデシジョン ツリーと、一般に知られているブートストラップと集約と呼ばれる手法を使用したタスク 袋詰め 。この背後にある基本的な考え方は、個々のデシジョン ツリーに依存するのではなく、最終出力を決定する際に複数のデシジョン ツリーを組み合わせることです。

Random Forest には、基本学習モデルとして複数のデシジョン ツリーがあります。データセットから行サンプリングと特徴サンプリングをランダムに実行し、すべてのモデルのサンプル データセットを形成します。この部分はブートストラップと呼ばれます。



他の手法と同様に、ランダム フォレスト回帰手法にアプローチする必要があります。 機械学習 技術。

  • 特定の質問またはデータを設計し、必要なデータを決定するためのソースを取得します。
  • データがアクセス可能な形式であることを確認してください。そうでない場合は、必要な形式に変換してください。
  • 必要なデータを取得するために必要となる可能性のある、顕著な異常と欠落しているデータ ポイントをすべて指定します。
  • 機械学習モデルを作成します。
  • 達成したいベースラインモデルを設定する
  • データ機械学習モデルをトレーニングします。
  • テストデータを使用してモデルについての洞察を提供します
  • 次に、テスト データとモデルからの予測データの両方のパフォーマンス メトリクスを比較します。
  • 期待を満たさない場合は、それに応じてモデルを改善したり、データの年代を調べたり、別のデータ モデリング手法を使用したりできます。
  • この段階では、取得したデータを解釈し、それに応じてレポートします。

Python でのランダム フォレスト回帰

以下の例では、同様のサンプル手法を使用します。以下は、ここからダウンロードできるデータセットに対するランダム フォレスト回帰の段階的なサンプル実装です - https://bit.ly/417n3N5

パイソン ライブラリを使用すると、データを処理し、典型的な複雑なタスクを 1 行のコードで実行することが非常に簡単になります。

  • パンダ – このライブラリは、2D 配列形式でデータ フレームをロードするのに役立ち、分析タスクを一度に実行するための複数の関数を備えています。
  • ナンピー – Numpy 配列は非常に高速で、大規模な計算を非常に短時間で実行できます。
  • マットプロットリブ / シーボーン – このライブラリは、ビジュアライゼーションを描画するために使用されます。
  • Sklearn – このモジュールには、データの前処理からモデルの開発および評価までのタスクを実行する事前実装された関数を備えた複数のライブラリが含まれています。
  • RandomForestRegressor – これは、sklearn ライブラリを使用してこの記事で使用するランダム フォレスト モデルまたはアンサンブル学習に基づく回帰モデルです。
  • スクラーン: このライブラリは、Python のコアとなる機械学習ライブラリです。機械学習モデルの前処理、モデリング、評価、デプロイのための幅広いツールを提供します。
  • ラベルエンコーダ: このクラスは、カテゴリデータを数値にエンコードするために使用されます。
  • KNNコンピュータ: このクラスは、k 最近傍アプローチを使用してデータセット内の欠損値を代入するために使用されます。
  • train_test_split: この関数は、データセットをトレーニング セットとテスト セットに分割するために使用されます。
  • 標準スケーラー: このクラスは、平均を削除し単位分散にスケーリングすることで特徴を標準化するために使用されます。
  • f1_スコア: この関数は、F1 スコアを使用して分類モデルのパフォーマンスを評価するために使用されます。
  • RandomForestRegressor: このクラスは、ランダム フォレスト回帰モデルをトレーニングするために使用されます。
  • クロス値スコア: この関数は、k 分割相互検証を実行してモデルのパフォーマンスを評価するために使用されます。

ステップ 1: ライブラリをインポートする

ここでは、必要なライブラリをすべてインポートしています。

Python3




import> pandas as pd> import> matplotlib.pyplot as plt> import> seaborn as sns> import> sklearn> import> warnings> from> sklearn.preprocessing>import> LabelEncoder> from> sklearn.impute>import> KNNImputer> from> sklearn.model_selection>import> train_test_split> from> sklearn.preprocessing>import> StandardScaler> from> sklearn.metrics>import> f1_score> from> sklearn.ensemble>import> RandomForestRegressor> from> sklearn.ensemble>import> RandomForestRegressor> from> sklearn.model_selection>import> cross_val_score> warnings.filterwarnings(>'ignore'>)>

>

>

ステップ 2: データセットをインポートする

次に、パンダのデータ フレームにデータセットをロードしましょう。データ処理を改善し、便利な機能を活用して複雑なタスクを一度に実行します。

Python3




df>=> pd.read_csv(>'Salaries.csv'>)> print>(df)>

>

ミリリットルからオンス

>

出力:

 Position Level Salary 0 Business Analyst 1 45000 1 Junior Consultant 2 50000 2 Senior Consultant 3 60000 3 Manager 4 80000 4 Country Manager 5 110000 5 Region Manager 6 150000 6 Partner 7 200000 7 Senior Partner 8 300000 8 C-level 9 500000 9 CEO 10 1000000>

ここで、.info()>このメソッドは、データセットの構造、データ型、メモリ使用量の概要を簡単に示します。

Python3




df.info()>

>

>

Linuxのエクスポートとは何ですか

出力:

 RangeIndex: 10 entries, 0 to 9 Data columns (total 3 columns):  # Column Non-Null Count Dtype  --- ------ -------------- -----   0 Position 10 non-null object  1 Level 10 non-null int64   2 Salary 10 non-null int64  dtypes: int64(2), object(1) memory usage: 372.0+ bytes>

ステップ-3: データの準備

ここで、コードはデータセットからデータの 2 つのサブセットを抽出し、それらを別々の変数に格納します。

  • 特徴の抽出: DataFrame から特徴を抽出し、という名前の変数に格納します。X>
  • ターゲット変数の抽出: DataFrame からターゲット変数を抽出し、という名前の変数に格納します。y>

Python3




# Assuming df is your DataFrame> X>=> df.iloc[:,>1>:>2>].values>#features> y>=> df.iloc[:,>2>].values># Target variable>

>

>

ステップ 4: ランダム フォレスト リグレッサー モデル

このコードは、カテゴリ データを数値的にエンコードすることによって処理し、処理されたデータを数値データと結合し、準備されたデータを使用してランダム フォレスト回帰モデルをトレーニングします。

Python3




import> pandas as pd> from> sklearn.ensemble>import> RandomForestRegressor> from> sklearn.preprocessing>import> LabelEncoder> >Check>for> and> handle categorical variables> label_encoder>=> LabelEncoder()> x_categorical>=> df.select_dtypes(include>=>[>'object'>]).>apply>(label_encoder.fit_transform)> x_numerical>=> df.select_dtypes(exclude>=>[>'object'>]).values> x>=> pd.concat([pd.DataFrame(x_numerical), x_categorical], axis>=>1>).values> # Fitting Random Forest Regression to the dataset> regressor>=> RandomForestRegressor(n_estimators>=>10>, random_state>=>0>, oob_score>=>True>)> # Fit the regressor with x and y data> regressor.fit(x, y)>

>

>

ステップ-5: 予測と評価を行う

このコードは、トレーニングされたランダム フォレスト回帰モデルを評価します。

  • out-of-bag (OOB) スコア。モデルの汎化パフォーマンスを推定します。
  • トレーニングされたモデルを使用して予測を行い、それを「予測」配列に保存します。
  • 平均二乗誤差 (MSE) および R2 (R2) メトリクスを使用してモデルのパフォーマンスを評価します。

RandomForest の Out of Bag スコア

バッグスコアまたは OOB スコア バギング アルゴリズムを検証するために主にバギング アルゴリズムで使用されるタイプの検証手法です。ここでは、検証データのごく一部がデータの主流から取得され、特定の検証データに対する予測が行われ、他の結果と比較されます。

OOB スコアが提供する主な利点は、検証データがバギング アルゴリズムによって認識されないため、OOB スコアの結果がバギング アルゴリズムの実際のパフォーマンスを示す真の結果となることです。

特定のランダム フォレスト アルゴリズムの OOB スコアを取得するには、アルゴリズムの OOB_Score パラメーターの値を True に設定する必要があります。

Python3




# Evaluating the model> from> sklearn.metrics>import> mean_squared_error, r2_score> # Access the OOB Score> oob_score>=> regressor.oob_score_> print>(f>'Out-of-Bag Score: {oob_score}'>)> # Making predictions on the same data or new data> predictions>=> regressor.predict(x)> # Evaluating the model> mse>=> mean_squared_error(y, predictions)> print>(f>'Mean Squared Error: {mse}'>)> r2>=> r2_score(y, predictions)> print>(f>'R-squared: {r2}'>)>

>

>

出力:

autocad 2019 英語版をダウンロードします。
Out-of-Bag Score: 0.644879832593859 Mean Squared Error: 2647325000.0 R-squared: 0.9671801245316117>

ステップ-6: 視覚化

次に、給与データセットに対して RandomForest 回帰モデルを使用して得られた結果を視覚化してみましょう。

  • 特徴値の範囲をカバーする予測ポイントのグリッドを作成します。
  • 実際のデータ ポイントを青い散布点としてプロットします。
  • 予測グリッドの予測値を緑色の線としてプロットします。
  • 理解を深めるためにプロットにラベルとタイトルを追加します。

Python3




import> numpy as np> X_grid>=> np.arange(>min>(X),>max>(X),>0.01>)> X_grid>=> X_grid.reshape(>len>(X_grid),>1>)> > plt.scatter(X,y, color>=>'blue'>)>#plotting real points> plt.plot(X_grid, regressor.predict(X_grid),color>=>'green'>)>#plotting for predict points> > plt.title(>'Random Forest Regression Results'>)> plt.xlabel(>'Position level'>)> plt.ylabel(>'Salary'>)> plt.show()>

>

>

出力:

スクリーンショット-2023-12-04-101235

ステップ-7: ランダム フォレスト モデルからの単一のデシジョン ツリーの視覚化

このコードは、トレーニングされたランダム フォレスト モデルからのデシジョン ツリーの 1 つを視覚化します。選択したデシジョン ツリーをプロットし、アンサンブル内の単一ツリーの意思決定プロセスを表示します。

Python3




from> sklearn.tree>import> plot_tree> import> matplotlib.pyplot as plt> # Assuming regressor is your trained Random Forest model> # Pick one tree from the forest, e.g., the first tree (index 0)> tree_to_plot>=> regressor.estimators_[>0>]> # Plot the decision tree> plt.figure(figsize>=>(>20>,>10>))> plot_tree(tree_to_plot, feature_names>=>df.columns.tolist(), filled>=>True>, rounded>=>True>, fontsize>=>10>)> plt.title(>'Decision Tree from Random Forest'>)> plt.show()>

>

>

出力:

スクリーンショット-2023-12-05-111140 ランダムフォレスト回帰の応用

ランダム フォレスト回帰には、次のような現実世界の広範な問題があります。

  • 連続数値の予測: 住宅価格、株価、顧客の生涯価値を予測します。
  • 危険因子の特定: 病気、金融危機、その他のネガティブな出来事の危険因子を検出します。
  • 高次元データの処理: 多数の入力フィーチャを含むデータセットを分析します。
  • 複雑な関係を捉える: 入力フィーチャとターゲット変数の間の複雑な関係をモデル化します。

ランダムフォレスト回帰の利点

  • 使いやすく、デシジョン ツリーと比較してトレーニング データに対する感度が低くなります。
  • それはよりも正確です デシジョンツリー アルゴリズム。
  • 多くの属性を持つ大規模なデータセットを処理する場合に効果的です。
  • 欠損データを処理できます。 外れ値 、ノイズの多い機能。

ランダムフォレスト回帰の欠点

  • モデルの解釈が難しい場合もあります。
  • このアルゴリズムでは、デシジョン ツリーの数、各ツリーの最大深さ、各分割で考慮する特徴の数などの適切なパラメーターを選択するには、ある程度のドメインの専門知識が必要になる場合があります。
  • 特に大規模なデータセットの場合、計算コストが高くなります。
  • 被害を受ける可能性があります 過学習 モデルが複雑すぎる場合、またはデシジョン ツリーの数が多すぎる場合。

結論

ランダム フォレスト回帰は、従来のデシジョン ツリーに比べて利点があり、継続的な予測タスクのための強力なツールとなっています。高次元データを処理し、複雑な関係をキャプチャし、過剰適合を軽減する機能により、さまざまなアプリケーションで人気の選択肢となっています。 Python の scikit-learn ライブラリを使用すると、ランダム フォレスト回帰モデルの実装、最適化、評価が可能になり、機械学習の実践者にとってアクセスしやすく効果的な手法となります。

よくある質問(FAQ)

1. ランダムフォレスト回帰Pythonとは何ですか?

ランダム フォレスト回帰 Python は、複数のデシジョン ツリーを使用して予測を行うアンサンブル学習手法です。これは、回帰タスクに適した強力で多用途のアルゴリズムです。

2. ランダム フォレスト回帰は何に役立ちますか?

ランダム フォレスト回帰を使用すると、価格、売上、顧客離れなどを含むさまざまなターゲット変数を予測できます。これは、簡単に過学習されない堅牢なアルゴリズムであるため、現実世界のアプリケーションに適しています。

3. ランダム フォレストと回帰の違いは何ですか?

ランダム フォレストはアンサンブル学習手法であり、回帰は教師あり学習アルゴリズムの一種です。ランダム フォレストでは複数のデシジョン ツリーを使用して予測を行いますが、回帰では単一のモデルを使用して予測を行います。

4. ランダム フォレスト回帰のハイパーパラメータはどのように調整しますか?

ランダム フォレスト回帰のハイパーパラメータを調整するには、次のようないくつかの方法があります。

  • グリッド検索: グリッド検索では、ハイパーパラメータ値のさまざまな組み合わせを体系的に試して、最適な組み合わせを見つけます。
  • ランダム検索: ランダム検索では、ハイパーパラメータ値のさまざまな組み合わせをランダムにサンプリングして、適切な組み合わせを見つけます。

5. ランダム フォレストが回帰よりも優れているのはなぜですか?

一般に、ランダム フォレストは回帰よりも正確で堅牢です。また、過学習が起こりにくいため、新しいデータに対して適切に一般化できる可能性が高くなります。