前書き: ランダム フォレストは、マーケティングから医療保険まで多くの用途に使用できる、非常に柔軟な機械学習手法です。マーケティングで顧客の獲得と維持をモデル化したり、患者の病気のリスクと感受性を予測したりするために使用できます。
ランダム フォレストは、分類および回帰問題に使用でき、多数の特徴を処理でき、データのモデリングに使用される変数の重要性を推定するのに役立ちます。
この記事は、Python を使用してランダム フォレスト モデルを構築する方法について説明します。
1 ランダム フォレストとは
ランダム フォレストは、ほぼあらゆる種類の予測問題 (非線形問題を含む) に使用できます。これは比較的新しい機械学習戦略 (1990 年代にベル研究所で誕生) であり、あらゆる側面で使用できます。機械学習におけるアンサンブル学習のカテゴリに属します。
1.1 アンサンブル学習
アンサンブル学習は、複数のモデルを組み合わせて 1 つの予測問題を解決します。その原理は、複数の分類子モデルを生成し、それぞれが個別に学習して予測を行うことです。これらの予測は最終的に結合されて、個々の分類器の結果と同等以上の予測が生成されます。
ランダム フォレストは、デシジョン ツリーの統合に依存しているため、アンサンブル学習の 1 つの分野です。 Python でのアンサンブル学習の実装に関する詳細ドキュメント: Scikit-Learn ドキュメント。
1.2 ランダムデシジョンツリー
ランダムフォレストが他のモデルを集約することはわかっていますが、具体的にはどのモデルでしょうか?その名前からもわかるように、ランダム フォレストは分類 (または回帰) ツリーを集約します。デシジョン ツリーは一連の決定で構成され、データ セット内の観測値を分類するために使用できます。
1.3 ランダムフォレスト
導入されたランダムフォレストアルゴリズムは、ランダムな決定木グループを自動的に作成します。これらのツリーはランダムに生成されるため、ほとんどのツリー (99.9% であっても) は分類や回帰の問題を解決するのに意味がありません。
1.4 投票
では、たとえ数万の悪いモデルを生成しても、どのようなメリットがあるのでしょうか?まあ、実際にはそうではありません。しかし、有益なことに、いくつかの非常に優れたデシジョン ツリーが同時に生成されました。
予測を行うと、新しい観測結果がデシジョン ツリーの上から下に降りてきて、予測値またはラベルが割り当てられます。フォレスト内の各木に予測またはラベルが与えられると、すべての予測が合計され、すべての木の投票が最終的な予測として返されます。
簡単に言うと、無相関ツリーによる予測の 99.9% はすべての状況をカバーしており、これらの予測は互いに打ち消し合います。少数の優れた木の予測結果が際立ち、良好な予測結果が得られます。
2 なぜ使用するのですか?
ランダムフォレストは機械学習手法のレザーマン(多機能折りたたみナイフ)です。ほぼ何でも投げることができます。マッピングの推定と推論において特に優れた仕事をするため、SVM のように多くのパラメータ調整を必要としません (時間に追われている友人にとっては非常に便利です)。
2.1 マッピングの例
ランダム フォレストは、意図的な手動データ変換を行わずに学習できます。関数 f(x)=log(x) を例に挙げます。
Yhat 独自のインタラクティブ環境 Rodeo で分析データを生成するために Python を使用します。Rodeo の Mac、Windows、Linux インストール ファイルはここからダウンロードできます。
まず、データを生成してノイズを追加しましょう。
import numpy as np import pylab as pl x = np.random.uniform(1, 100, 1000) y = np.log(x) + np.random.normal(0, .3, 1000) pl.scatter(x, y, s=1, label="log(x) with noise") pl.plot(np.arange(1, 100), np.log(np.arange(1, 100)), c="b", label="log(x) true function") pl.xlabel("x") pl.ylabel("f(x) = log(x)") pl.legend(loc="best") pl.title("A Basic Log Function") pl.show()
次の結果が得られます:
x を使用して y を予測することによって基本的な線形モデルを構築する場合、log(x) 関数を二分する直線を描く必要があります。また、ランダム フォレスト アルゴリズムを使用すると、log(x) 曲線をより適切に近似し、実際の関数に近づけることができます。
もちろん、ランダム フォレストは log(x) 関数に対して少し過剰適合しているとも言えます。いずれにしても、これはランダム フォレストが線形問題に限定されないことを示しています。
3 使用方法
3.1 特徴選択
ランダム フォレストの最良の使用例の 1 つは特徴選択です。多くのデシジョン ツリー変数を試してみることの副産物として、各ツリーで変数のパフォーマンスが最高か最低かを確認できるようになります。
一部のツリーが変数を使用し、他のツリーが変数を使用しない場合、情報の損失または増加を比較できます。より適切に実装されたランダム フォレスト ツールを使用すると、これを行うことができるため、必要なのはそのメソッドまたはパラメーターを確認することだけです。
次の例では、赤ワインと白ワインを区別する際にどの変数が最も重要であるかを理解しようとします。
3.2 分類
ランダム フォレストは分類問題にも非常に優れています。これを使用して、考えられる複数のターゲット クラスの予測を行うことができ、調整後の確率を出力することもできます。注意しなければならないことの 1 つは過剰適合です。
ランダム フォレストは、特にデータセットが比較的小さい場合、過剰適合する傾向があります。モデルがテスト セットに対して「適切すぎる」予測を行っている場合は、疑ってください。過学習を回避する 1 つの方法は、前述の特徴選択を使用するなど、モデル内の関連する特徴のみを使用することです。
3.3 回归
随机森林也可以用于回归问题。
我发现,不像其他的方法,随机森林非常擅长于分类变量或分类变量与连续变量混合的情况。
4 一个简单的Python示例
from sklearn.datasets import load_iris from sklearn.ensemble import RandomForestClassifier import pandas as pd import numpy as np iris = load_iris() df = pd.DataFrame(iris.data, columns=iris.feature_names) df['is_train'] = np.random.uniform(0, 1, len(df)) <= .75 df['species'] = pd.Categorical.from_codes(iris.target, iris.target_names) df.head() train, test = df[df['is_train']==True], df[df['is_train']==False] features = df.columns[:4] clf = RandomForestClassifier(n_jobs=2)y, _ = pd.factorize(train['species']) clf.fit(train[features], y) preds = iris.target_names[clf.predict(test[features])] pd.crosstab(test['species'], preds, rownames=['actual'], colnames=['preds'])
下面就是你应该看到的结果了。由于我们随机选择数据,所以实际结果每次都会不一样。
5 结语
随机森林相当起来非常容易。不过和其他任何建模方法一样要注意过拟合问题。如果你有兴趣用R语言使用随机森林,可以查看randomForest包。
以上就是随机森林算法入门(python)的内容,更多相关内容请关注PHP中文网(www.php.cn)!