さあ、未来へ旅立とう

日々のこと、チーム紹介

  • 14 Oct. 2016

    [機械学習]決定木とランダムフォレスト

    CATEGORYBlog 日記 TAG

    色々ある機械学習の中でも大体優秀なランダムフォレスト
    スケーリングする必要がない、仕組みが分かりやすい、特徴量いっぱいでも大丈夫っぽい、精度良いのが多い。

    ランダムな森?乱れる森?でたらめな森?ん?

    ランダムフォレストは決定木の集団(アンサンブル)学習の一つで
    決定木は条件からどんどん分岐していって分類していくものらしいです

    k

    上の例ではIris(アヤメ)をセトナ(setosa)、バーシクル(versicolor)、 バージニカ(virginica)
    の3種類を花びらのサイズやがく片の長さなどから分類するもの
    訓練データとテストデータ半分ずつ分けて大体正解率92%

    ちょっとどうなってんのかわかんないので
    今度はダミーデータを使って分類をグラフで見てみる!
    特徴量が多いとプロットできないので2次元で!

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    import seaborn
    from sklearn.datasets import make_blobs
    from sklearn.tree import DecisionTreeClassifier
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.model_selection import train_test_split
    
    X, y = make_blobs(n_samples=4000, centers=8, random_state=10, cluster_std=1.6)
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5)
    

    ダミーのデータの作成、訓練データとテストデータを分ける。

    index
    全データプロット

    □決定木

    clf = DecisionTreeClassifier(max_depth=3, random_state = 0)
    clf.fit(X_train, y_train)
    clf.score(X_test, y_test)
    

    max_depthは決定木の最大深さ

    max_depth=3の場合
    d3
    薄い色で埋め尽くされている部分が各点(色)の分類した場所
    score 0.82750000000000001
    結構まじってんな

    max_depth=6の場合
    d6
    score 0.92500000000000004
    けっこういい感じだけど・・・?

    決定木の深さを深くすると、正解率は上がる。
    しかし過学習になる可能性がある。
    過学習(Overfitting)は未知のデータに対して予測が外れやすくなったりするらしいです。
    勉強しすぎると頭堅くなっちゃうやつと同じ現象かな

    □ランダムフォレスト

    clf = RandomForestClassifier(n_estimators=100, random_state=0)
    clf.fit(X_train, y_train)
    clf.score(X_test, y_test)
    

    r
    score 1.0

    うん?正解率が100%とかあるのかな
    まーいいや、とりあいずざっくり決定木とランダムフォレストできました!

    大和市のポテトフライダー、フライドポテトを揚げ続けて120年、変わらぬ味と進化し続ける味を提供しております!休みの日にはポテトダイナマイトを製作し、世界中にバラまいている!