この記事では、 ランダムフォレスト分類器 を使用して Scikit-Learn ライブラリ の Python プログラミング言語 これを行うには、 IRIS データセット これは非常に一般的で有名なデータセットです。
ランダムフォレスト
の ランダムフォレスト ランダム デシジョン フォレストは、デシジョン ツリーを使用した分類、回帰、その他のタスクに使用される教師あり機械学習アルゴリズムです。ランダム フォレストは、大規模で複雑なデータセットの処理、高次元の特徴空間の処理、特徴の重要性に関する洞察の提供に特に適しています。このアルゴリズムは、過剰適合を最小限に抑えながら高い予測精度を維持できるため、金融、ヘルスケア、画像分析などのさまざまな分野で人気の選択肢となっています。
ランダムフォレスト分類子
ランダム フォレスト分類子は、 セット の デシジョンツリー トレーニング セットのランダムに選択されたサブセットから。これは、トレーニング セットのランダムに選択されたサブセットからのデシジョン ツリー (DT) のセットであり、さまざまなデシジョン ツリーからの投票を収集して最終的な予測を決定します。
ランダムフォレスト分類器
さらに、ランダム フォレスト分類器は分類タスクと回帰タスクの両方を処理でき、特徴重要度スコアを提供できるため、データセット内のさまざまな変数の重要性を理解するための貴重なツールになります。
ランダムフォレスト分類の仕組み
ランダム フォレスト分類は、分類タスクの精度と堅牢性を向上させるために設計されたアンサンブル学習手法です。このアルゴリズムはトレーニング中に多数のデシジョン ツリーを構築し、 クラス それが分類クラスのモードです。ランダム フォレスト内の各デシジョン ツリーは、トレーニング データのサブセットと、ツリー間の多様性を導入する特徴のランダム サブセットを使用して構築され、モデルがより堅牢になり、過学習が起こりにくくなります。
ランダム フォレスト アルゴリズムは、バギング (ブートストラップ集約) と呼ばれる手法を使用して、これらの多様なサブセットを作成します。
トレーニング段階では、それぞれの 木 特徴に基づいてデータを再帰的に分割することによって構築されます。それぞれに スプリット、 アルゴリズムはランダムなサブセットから最良の特徴を選択し、情報ゲインまたはジニ不純物を最適化します。このプロセスは、最大深度に達するか、各リーフ ノードのサンプル数が最小になるなど、事前に定義された停止基準が満たされるまで続行されます。
ランダム フォレストがトレーニングされると、クラスに対する各ツリーの投票を使用して予測を行うことができ、最も多くの票を獲得したクラスが入力データの予測クラスになります。
ランダム フォレストでの特徴選択
機能の選択 ランダム フォレストでは、個々のデシジョン ツリーの構築と集計プロセスに本質的に組み込まれています。
トレーニング段階では、各デシジョン ツリーが特徴のランダムなサブセットを使用して構築され、ツリー間の多様性に貢献します。このプロセスは機能バギングとして知られており、単一の機能の優位性を防ぎ、より堅牢なモデルを促進します。
このアルゴリズムは、各分割ポイントで特徴のさまざまなサブセットを評価し、情報ゲインやジニ不純度などの基準に基づいてノード分割に最適な特徴を選択します。その結果、ランダム フォレストには自然に特徴選択の形式が組み込まれ、アンサンブルが多様な特徴セットから恩恵を受けて一般化が強化され、過剰適合が軽減されます。
機械学習におけるランダムフォレスト分類器
ステップ 1: データセットのロード
Python3
# importing required libraries> # importing Scikit-learn library and datasets package> from> sklearn>import> datasets> # Loading the iris plants dataset (classification)> iris>=> datasets.load_iris()> |
>
>
ステップ 2: データセットの内容とその中に存在するフィーチャ名を確認します。
Python3
vlcはyoutubeからビデオをダウンロードします
print>(iris.target_names)> |
>
>
出力:
[‘setosa’ ‘versicolor’ ‘virginica’]>
Python3
Javaでソートされた配列リスト
print>(iris.feature_names)> |
>
>
出力:
[‘sepal length (cm)’, ’sepal width (cm)’, ’petal length (cm)’, ’petal width (cm)’]>
ステップ 3: テスト分割のトレーニング
Python3
# dividing the datasets into two parts i.e. training datasets and test datasets> X, y>=> datasets.load_iris( return_X_y>=> True>)> # Splitting arrays or matrices into random train and test subsets> from> sklearn.model_selection>import> train_test_split> # i.e. 70 % training dataset and 30 % test datasets> X_train, X_test, y_train, y_test>=> train_test_split(X, y, test_size>=> 0.30>)> |
>
>
ステップ 4: ランダム フォレスト分類子モジュールをインポートします。
Python3
# importing random forest classifier from assemble module> from> sklearn.ensemble>import> RandomForestClassifier> import> pandas as pd> # creating dataframe of IRIS dataset> data>=> pd.DataFrame({>'sepallength'>: iris.data[:,>0>],>'sepalwidth'>: iris.data[:,>1>],> >'petallength'>: iris.data[:,>2>],>'petalwidth'>: iris.data[:,>3>],> >'species'>: iris.target})> |
>
>
データセットの概要
Python3
# printing the top 5 datasets in iris dataset> print>(data.head())> |
>
>
出力:
sepallength sepalwidth petallength petalwidth species 0 5.1 3.5 1.4 0.2 0 1 4.9 3.0 1.4 0.2 0 2 4.7 3.2 1.3 0.2 0 3 4.6 3.1 1.5 0.2 0 4 5.0 3.6 1.4 0.2 0>
ステップ 5: モデルのトレーニング
Python3
# creating a RF classifier> clf>=> RandomForestClassifier(n_estimators>=> 100>)> # Training the model on the training dataset> # fit function is used to train the model using the training sets as parameters> clf.fit(X_train, y_train)> # performing predictions on the test dataset> y_pred>=> clf.predict(X_test)> # metrics are used to find accuracy or error> from> sklearn>import> metrics> print>()> # using metrics module for accuracy calculation> print>(>'ACCURACY OF THE MODEL:'>, metrics.accuracy_score(y_test, y_pred))> |
Javaの選択ソート
>
>
出力:
ACCURACY OF THE MODEL: 0.9238095238095239>
ステップ 6: 予測
Python3
# predicting which type of flower it is.> clf.predict([[>3>,>3>,>2>,>2>]])> |
>
>
出力:
array([0])>
これは、次のことを意味します シルキー データセットで 3 つの種またはクラスを取得したときの花のタイプ: セトサ、バーシカラー、バージニア。
重要な機能を確認する
ここで、次のコード行を使用して、IRIS データセット内の重要な特徴または選択された特徴も見つけます。
CSS境界線
Python3
# using the feature importance variable> import> pandas as pd> feature_imp>=> pd.Series(clf.feature_importances_, index>=> iris.feature_names).sort_values(ascending>=> False>)> feature_imp> |
>
>
出力:
petal length (cm) 0.440050 petal width (cm) 0.423437 sepal length (cm) 0.103293 sepal width (cm) 0.033220 dtype: float64>
Python のランダム フォレスト Scikit-Learn ライブラリには以下のセットが付属しています ハイパーパラメータ これにより、モデルの動作を微調整できます。モデルのパフォーマンスを最適化するには、適切なハイパーパラメーターを理解して選択することが重要です。
ランダム フォレスト分類子のパラメーター
- n_estimators: 森の中の木の数。
- 一般にツリーの数が多いほどパフォーマンスは向上しますが、計算時間は犠牲になります。
- 値は 100 から始めて、必要に応じて増やしてください。
- 最大深さ: 各ツリーの最大深さ。
- ツリーが深くなると、より複雑なパターンを捉えることができますが、過剰適合の危険もあります。
- 5 ~ 15 の値を試して、データセットが小さい場合はより低い値を検討してください。
- max_features: 各ノードでの分割が考慮されるフィーチャの数。
- 一般的な値は「sqrt」(特徴の総数の平方根)です。
- データセットのサイズと特徴の重要性に基づいて調整します。
- 基準: スプリット品質 (「ジニ」または「エントロピー」) を測定するために使用される関数。
- 多くの場合、Gini 不純物の方がわずかに高速ですが、パフォーマンスは通常、どちらも同様です。
- min_samples_split: ノードを分割するために必要な最小限のサンプル。
- 値を高くすると過学習を防ぐことができますが、高すぎるとモデルの複雑さが妨げられる可能性があります。
- 2 から始めて、必要に応じて調整します。
- min_samples_leaf: リーフ ノードに存在するために必要な最小限のサンプル。
- min_samples_split に似ていますが、リーフ ノードに焦点を当てています。
- 1 から始めて、必要に応じて調整します。
- ブートストラップ: ツリーを構築するときにブートストラップ サンプリングを使用するかどうか (True または False)。
- ブートストラップはモデルの分散と一般化を改善できますが、バイアスがわずかに増加する可能性があります。
ランダムフォレスト分類器の利点
- 複数のツリーを組み合わせるランダム フォレストのアンサンブルの性質により、個別のデシジョン ツリーと比較して過剰適合が起こりにくくなります。
- 多数の特徴を含むデータセットに効果的で、無関係な変数も適切に処理できます。
- ランダム フォレストは、特徴の重要性についての洞察を提供し、特徴の選択とデータセットの理解に役立ちます。
ランダムフォレスト分類器の欠点
- ランダム フォレストは計算コストが高くなる可能性があり、複数のデシジョン ツリーを構築するため、より多くのリソースが必要になる場合があります。
- アンサンブルの性質により、単一の決定木と比較して、個々の予測の背後にある推論を解釈することが困難になります。
- 不均衡なデータセットでは、ランダム フォレストが多数派クラスに偏り、少数派クラスの予測パフォーマンスに影響を与える可能性があります。
結論
結論として、決定木のアンサンブルを備えたランダム フォレストは、さまざまな機械学習タスクに対する堅牢なソリューションとして際立っており、その多用途性と有効性を示しています。
よくある質問(FAQ)
Q. ランダムフォレスト分類器とは何ですか?
ランダム フォレスト分類器は、分類タスクに複数の決定木を使用し、精度を向上させるアンサンブル学習方法です。複雑なデータの処理、過学習の軽減、特徴の重要性を備えた堅牢な予測の提供に優れています。
Q. ランダム フォレストは回帰に使用できますか?
ランダム フォレストは回帰タスクと分類タスクの両方に使用できるため、多用途の機械学習アルゴリズムになります。
Q. ランダムフォレストの原理は何ですか?
ランダム フォレストは、データセットのランダムなサブセットを使用して複数のデシジョン ツリーを構築し、その出力を組み合わせて精度を向上させます。
Q. ランダムフォレストの用途は何ですか?
実際のアプリケーションには次のようなものがあります。
- 医学的診断: 患者データに基づいて病気を特定します。
- ファイナンス: 融資におけるリスク評価のための信用スコアリング。