Machine-learning-with-python-classification-algorithms-random-forest

提供:Dev Guides
移動先:案内検索

分類アルゴリズム-ランダムフォレスト

前書き

ランダムフォレストは、分類と回帰の両方に使用される教師あり学習アルゴリズムです。 ただし、主に分類の問題に使用されます。 私たちが知っているように、森林は木で構成されており、より多くの木がより強固な森林を意味する。 同様に、ランダムフォレストアルゴリズムはデータサンプルに決定木を作成し、各サンプルから予測を取得し、最終的に投票により最適なソリューションを選択します。 これは、結果を平均化することにより過剰適合を減らすため、単一の決定木よりも優れたアンサンブル手法です。

ランダムフォレストアルゴリズムの動作

私たちは次のステップの助けを借りてランダムフォレストアルゴリズムの働きを理解することができます-

  • *ステップ1 *-まず、特定のデータセットからランダムサンプルを選択することから始めます。
  • *ステップ2 *-次に、このアルゴリズムはサンプルごとに決定木を構築します。 次に、すべての決定木から予測結果を取得します。
  • *ステップ3 *-このステップでは、予測結果ごとに投票が行われます。
  • *ステップ4 *-最後に、最も投票された予測結果を最終予測結果として選択します。

次の図は、その動作を示します-

ランダムフォレストアルゴリズム

Pythonでの実装

まず、必要なPythonパッケージのインポートから始めます-

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

次に、次のようにそのウェブリンクから虹彩データセットをダウンロードします-

path = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"

次に、次のようにデータセットに列名を割り当てる必要があります-

headernames = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'Class']

今、私たちは次のようにパンダのデータフレームにデータセットを読み取る必要があります-

dataset = pd.read_csv(path, names = headernames)
dataset.head()
sepal-length sepal-width petal-length petal-width Class
0 5.1 3.5 1.4 0.2 Iris-setosa
1 4.9 3.0 1.4 0.2 Iris-setosa
2 4.7 3.2 1.3 0.2 Iris-setosa
3 4.6 3.1 1.5 0.2 Iris-setosa
4 5.0 3.6 1.4 0.2 Iris-setosa

データの前処理は、次のスクリプト行を使用して行われます。

X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 4].values

次に、データをトレイン分割とテスト分割に分割します。 次のコードは、データセットを70%のトレーニングデータと30%のテストデータに分割します-

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.30)

次に、次のようにsklearnの_RandomForestClassifier_クラスの助けを借りてモデルを訓練します-

from sklearn.ensemble import RandomForestClassifier
classifier = RandomForestClassifier(n_estimators = 50)
classifier.fit(X_train, y_train)

最後に、予測を行う必要があります。 それは次のスクリプトの助けを借りて行うことができます-

y_pred = classifier.predict(X_test)

次に、次のように結果を印刷します-

from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
result = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:")
print(result)
result1 = classification_report(y_test, y_pred)
print("Classification Report:",)
print (result1)
result2 = accuracy_score(y_test,y_pred)
print("Accuracy:",result2)

出力

Confusion Matrix:
[[Classification Report:
              precision   recall   f1-score   support
    Iris-setosa    1.00     1.00       1.00        14
Iris-versicolor    1.00     0.95       0.97        19
 Iris-virginica    0.92     1.00       0.96        12

      micro avg    0.98     0.98        0.98       45
      macro avg    0.97     0.98        0.98       45
   weighted avg    0.98     0.98        0.98       45

Accuracy: 0.9777777777777777

ランダムフォレストの長所と短所

Pros

以下は、ランダムフォレストアルゴリズムの利点です-

  • 異なる決定木の結果を平均化または結合することにより、過剰適合の問題を克服します。
  • ランダムフォレストは、単一の意思決定ツリーよりも広範囲のデータ項目に対して適切に機能します。
  • ランダムフォレストの分散は、単一の決定木よりも小さくなります。
  • ランダムフォレストは非常に柔軟で、非常に高い精度を備えています。
  • ランダムフォレストアルゴリズムでは、データのスケーリングは必要ありません。 スケーリングせずにデータを提供した後でも、高い精度を維持します。
  • ランダムフォレストアルゴリズムは、データの大部分が欠落していても、高い精度を維持します。

Cons

以下は、ランダムフォレストアルゴリズムの欠点です-

  • 複雑さは、ランダムフォレストアルゴリズムの主な欠点です。
  • ランダムフォレストの構築は、決定木よりもはるかに困難で時間がかかります。
  • ランダムフォレストアルゴリズムを実装するには、より多くの計算リソースが必要です。
  • 意思決定ツリーの大規模なコレクションがある場合、直感的ではありません。
  • ランダムフォレストを使用した予測プロセスは、他のアルゴリズムと比較して非常に時間がかかります。