[python]機械学習で間違えた部分を可視化する


概要


機械学習を行っていると、「作成したモデルがどのデータで間違えているのか」を知りたくなることがあります。すべてのカテゴリに対して等しく間違えているのか?それともあるカテゴリのデータだけ間違える確率が高いのか?などが分かればモデルの修正方法のヒントになるかもしれません。

そのようなメソッドを作ったのでご紹介します。



方法


以下のようなメソッドを作成します。

def wrong_rate(data, target_key, pred, real):

    first_key=data.keys()[0]
    if first_key==target_key:
        first_key=data.keys()[1]
        
    wrong=pred!=real  #1 間違っている部分
    data_wrong=data[wrong]
    #2 間違っている個数を数える 
    data_wrong_group=data_wrong.groupby(target_key).count()
        [first_key].reset_index().rename(columns=
        {first_key: 'Count'}).set_index(target_key)
     
    #3 全体の個数   
    data_count=data.groupby(target_key)
        [first_key].count().reset_index().rename(columns=
        {first_key: 'Count'}).set_index(target_key)
   
    #4 規格化 
    data_wrong_group/=data_count
    
    return data_wrong_group

data: データ target_key: 予測するkey名 pred:予測値 real: 実際の値


まずは予測が間違っている部分を求めます(1)。

次に、間違っているデータをターゲットでグループ分けし、それぞれ個数を数えます(2)。

また、各ターゲットの個数を求め(3)、規格化します(4)。


以下のように使います。(データはkaggleのForest Cover Type

wrong_rate(data=data_test, target_key='Cover_Type',pred=y_pred, 
           real=y_test)          


0、1、2のデータに対して正解率が低いことが分かります。


さらにこのデータをグラフで可視化します。2つの項目の値に応じてデータの分布を可視化する  で作成したメソッドを使い、ターゲット(Cover_Type)と正解か否かの2項目の値に応じてデータの分布を表示してみます。


data_res=data_test.copy()
data_res['result']=y_test==y_pred

visualize_data(data=data_res, target_col='Cover_Type', hue='result')

data_test: テストデータ y_test: ターゲットのテストデータ y_pred: 予測値


結果は以下のようになります。(一部のみ)




最後に


で、この結果をどう活用するのか、については自分もまだ模索中です、、、


記事内で扱ったメソッドはgithubに上げてあります。

最新記事

すべて表示

概要 フィッティングを行いたい場合、pythonならばscipy.optimize.leastsqなどでできます。 しかし、フィッティングを行う場合、フィッティングパラメータに条件を付けたい場合も多々あります。 例えば、下記のようにパラメータa、bは共に正の範囲で最適な値を求める、という感じです。 f(x, a, b)=a*x^2+b (a>0 and b>0) 今回はそんな手法についてご紹介しま

靴を大切にしよう!靴管理アプリ SHOES_KEEP

納品:iPhone6.5①.png

靴の履いた回数、お手入れ回数を管理するアプリです。

google-play-badge.png
Download_on_the_App_Store_Badge_JP_RGB_blk_100317.png

テーマ日記:テーマを決めてジャンルごとに記録

訂正①2040×1152.jpg

ジャンルごとにテーマ、サブテーマをつけて投稿、記録できる日記アプリです。

google-play-badge.png