アクセスカウンター

  • 95本記事閲覧者数   👀💡:
  • 23今日の足あと    🦶💮:
  • 2834サイト訪問者数(累計)🦶💡:

python 機械学習 プログラミング

[機械学習][python]アヤメの分類(TensorFlow)Part②-(RandomForest)

更新日:

 

どうも、solobochiです。

 

 

TensorFlowアヤメの学習について、前回はsequentialモデルで分析を
しましたが、今回は学習モデルをRandom Forestに変更して分析をして
みました。

 

 

目次

    1. 手順1 ライブラリ&データセットのインポート&データ確認
    2. 手順2 モデルの作成
    3. 手順3 学習の実行
    4. 手順4 予測&評価
    5. 実行結果
    6. ソース

     

    【概要】

    • アヤメの種類を機械学習(Random Forest)によって分類する。

     

    ⚠️Random Forestとは?

    👉機械学習アルゴリズムの1つ。決定木をいくつも作り、多数決で分類・予測する。
    scikit-learnアルゴリズムチートシートの、赤枠の部分でアンサンブル学習の手法。

    Classification(教師あり学習、クラス分類)
    ・Clustering(教師なし学習、クラスタリング)
    ・Regression(教師あり学習、回帰)
    ・Dimensionality Reduction(教師なし学習、次元圧縮)

     

    ※画像はscikit-learn公式サイトより引用

     

    はてな

    ⚠️Classificationとは?

    👉教師あり学習の分類問題。正解ラベルが存在している分類問題。
    すなわち、既に有用な分類が発見されていてそれを再現すること。(=その法則に従ってラベリングする。)
    例)犬か猫かの判別問題、男性 or 女性の分類問題、アヤメの分類問題(Setosa/Versicolour/Virginicaのいずれかに分類する)など

    はてな

    ⚠️Clusteringとは?

    👉教師なし学習の分類問題。正解データがないのでデータから法則性を見出してデータの集まりを見つける。(=データを分類する。)(=グループ分けをする。)
    既知の分類法では見えて来ないことを発見しようとすること。
    ※クラスタ:データの集まり
    例)アヤメの分類問題(ラベルは分からず、Aグループ/Bグループ/Cグループに分ける)

    はてな

    ⚠️Regressionとは?

    👉教師ある学習で連続データの予測問題。
    過去の実績データ等を教師データとして学習して予測する。
    例)株価予測、住宅価格予想、需要予測、売上予測etc...
    ※回帰問題では連続データを扱う(予測する)、分類問題では離散データを扱う。

    はてな

    ⚠️次元圧縮とは?

    👉データの次元を削減/圧縮して特徴/主要因子を発見する。
    (=説明変数を減らす)(=各対象次元の重要度に応じて比重を持たせることで実現する)
    (=本質的な構造を抽出する、例えば猫の猫らしさを学習し特報量抽出する。)
    例)教師なし学習の手書き文字認識など
    →主成分分析(PCA(Principal Component Analysis))、DeepLearningなど

     

    ※参考:機械学習アルゴリズム

    (引用:https://products.sint.co.jp/aisia/blog/vol1-9)

     

    (引用:https://thinkit.co.jp/article/13280)

     

    ※⛑詳しくは別記事でまとめるかも?

     

    ちょい待ち

    ❓決定木とは?

    👉木構造で、意思決定を助けるためのモデル。(wikipediaより)
    ※分類問題に使われるときは分類木、回帰問題に使われるときは回帰木と言う

    👉木の深さ(depth)を調整して過学習を防ぐ

    👉木の枝のように条件分岐を増やしていくことで分類する。
    ※一番下のリーフノードでターゲットのラベルを決定する

    (引用:http://www.nag-j.co.jp/nagdmc/ketteigi.htm)

     

    ちょい待ち

    ❓アンサンブル学習とは?

    👉複数モデルを作成して学習器に重みをつけて統合(≒多数決)して予測する。
    ※色々な学習器・識別器の結果を集め、重みつけることで高精度モデルを構築する
    ※複数の決定木の多数決がRandom Forestモデル

    👉アンサンブル学習に、バギングとブースティングがある
    ・バギング(Bootstrap-Aggregating):データの一部を訓練データとして使って学習し、それを繰り返し、複数の学習器から得られた結果を最終的に集約することで高精度での予測を行う。
    └例)Random Forest:各学習器の特徴量の重要度を確認できるので調整して精度を上げる。

    ・ブースティング:データの一部を訓練データにして学習し、最終的に集約する点はバギングと同じ。特徴はバギングと違って、前回のデータを再利用して学習する点。

    └例)Adaboost、LightGBM等

    ※参考にしたサイト
    https://analytics-and-intelligence.net/archives/678

     

     

    では、早速。

     

     

    学習の流れは以下の通り。

     

    step
    1
    ライブラリ&データセットのインポート

    step
    2
    モデルの作成(今回はRandom Forestモデル)

    step
    3
    学習の実行

    step
    4
    予測&評価

    ※今回はGridSearchCVはかまさないのでハイパーパラメータの設定等はなしのため
    結果的にほぼほぼ、前回のSequeintialモデルと同じ

     

     

    <手順1>ライブラリ&データセットのインポート&データ確認

    ・ライブラリのインポート⚠️💡
    使用するライブラリは、sklearnのRandom Forestのみ

    ※事前にscikit-learnをインストールしておく必要があります
    └ー環境構築についてはこちらの記事を参照。

    【参考】⬇️python仮想環境構築について👇

    python仮想環境構築(for Mac)

     

    ・データセットのインポート

    👉scikit-learnからデータセットをインポートする

    ※irisはアヤメという意味

     

    scikit-learnのdatasetについて詳細は公式ページ参照。

     

    ・データの確認(前回のSequetialモデルで入れ忘れたので)

    👉データセットのキー(keys)、データセットの説明(DESCR)を見てみる

     

    DESCRの結果から、

    ・3つのクラス(Setosa/Versicolour/Virginica)ごとに50のデータがあり、
    合計150のインスタンス(サンプルデータ)がある
    ・sepal length(cm) / sepal width(cm) / petal length(cm) / petal width(cm)の4つの特徴(説明変数)がある

    と言うことがわかる。

     

    👉データセットのキー(keys)より、target_names、deature_namesを確認してみる

     

    ・target_nameは、
    'setosa' / 'versicolour' / 'virginica'の3種類

    ・feature_nameは、
    'sepal length' / 'sepal width' / 'petal length' / 'petal width' の4つ

    と言うことがわかる。

     

     

     

    <手順2>モデルの作成

    ・Random Forestモデルを構築する👉この1行のみ!(なんと簡単っ)

    ※random_stateとは:乱数生成時のシード(乱数算出時の引数のようなもの)
    └※参考:https://qiita.com/HotAllure/items/ca5462b33d8b0a14631f

     

     

    <手順3>学習の実行

    ・訓練データとテストデータの分割

    👉train_test_split関数を使って分割
    (※訓練データ、テストデータはランダムに選ばれる)
    (※random_stateを指定すると選定される訓練データを固定できる)

    ※train_data  :訓練データ
    ※test_date   :テストデータ
    ※train_label  :訓練データの正解ラベル
    ※test_label  :テストデータの正解ラベル

     

    ・学習の実行!!

    👉rf.fit(x,y)

     

     

    <手順4>予測&評価

    ・評価の実行

    👉pre = rf.predict(x)

     

    ・predictした結果:preと、実際の結果:test_yを比べて、正解率を表示させる。

     

     

    <実行結果>

    実行結果は以下の通り。

     

     

     

    いい感じですね♪

     

     

    <ソース>

     

     

     

    以上。

     

     

     

     

⬇️他にもよく見られている記事⬇️

最も訪問者が多かった記事 10 件 (過去 7 日間)
  • この記事を書いた人
  • 最新記事
アバター

solobochi

気づけば社会人10年目のアラサー。 いつのまにかまわりが結婚→出産→マイホーム、と順調に”しあわせ家族計画”を進めていくのを横目に見ながら、ふと人生見つめ直し、、、結果、絶賛模索中の日々🐠🏃‍♂️----------------- 学んだことのアウトプットや、日々つらつら思うことを整理して残しておくような雑記ブログ(にするつもり、、、、)(as U like / as I like / write freely)-----------------ただし如何せん不器用で、1つ1つ丁寧に積み上げていかないと理解できないので学習は遅い😓-----------------2018年東大松尾研DeepLearning講座受講。 2019年度データアントレプレナーフェロープログラム参加中。

おすすめ記事

1

  はじめまして solobochi(そろボチ)です。   生まれも育ちも東京で、大学も会社も東京です。ずっと東京にいます。 社会人になってボチボチ約10年。 バリバリの文系ですが ...

2

  どうも、solobochiです。   2019年に入ってからというもの、休日は割とpython触ってます。といってもまだ簡単なサンプルコードをなぞるだけですが。   ...

-python, 機械学習, プログラミング
-, , ,

Copyright© そろボチ , 2019 All Rights Reserved Powered by AFFINGER5.