めも

ゲームの攻略・プログラミングの勉強内容・読んだ本の感想のような雑記を主に投稿するブログです

pythonで母集団の分布を確認する

前提として、2クラス分類。 データに含まれる特徴量は

data_train.columns.values

>> array(['feature1', 'feature2', 'feature3', 'feature4', 'feature5',
       'feature6', 'feature7', 'feature8', 'feature9', 'feature10',
       'feature11', 'feature12', 'feature13', 'feature14', 'feature15',
       'feature16', 'feature17', 'feature18', 'feature19', 'feature20',
       'feature21', 'target'], dtype=object)

となっていて targetを予測したい。

各特徴の分布を確認

箱ひげ図を使って母集団の大まかな分布を把握する

plt.title('BOX PLOT')
ax = sns.boxplot(data=data_train, orient="h", palette="Set2")

f:id:misos:20161019202559p:plain

特徴ごとに中央値が違うことがわかる。

目的値ごとに分布に違いがあるのかを確認する

plt.figure(figsize=(10, 10))
for i in range(20):
    plt.subplot(5, 4, i+1)
    sns.boxplot(y="feature"+str(i+1), x="target", data=data_train_times, palette="Set2")
plt.tight_layout()

f:id:misos:20161019202826p:plain

教師データの違いに対して分布の違いがないため、予測は困難そうとわかる。

2変数間の関係を見る

N = 2000 # プロットする点の数
pairplot_d = data_train.copy()

randomdata = np.random.randint(1, data_train.shape[0], N)
pairplot_d = pairplot_d.ix[randomdata, ('feature1', 'feature2', 'feature3', 'feature4', 'target')]
sns.pairplot(pairplot_d, hue="target", palette="Set2", markers='x')

f:id:misos:20161019203031p:plain

グラフが綺麗に分かれておらず、2変数の値を見ただけではクラス分類は難しそう。

等高線をプロットして分布を確認する

randomdata = np.random.randint(1, data_train.shape[0], N)

plt.figure(figsize=(16, 10))
for i in range(20):
    # focus clm
    print 'kde step:', i
    plt.subplot(3, 7, i+1)
    focusa, focusb = 'feature1', 'feature'+str(i+2)
    pairplot_d = data_train.copy().ix[randomdata, (focusa, focusb, 'target')]

    # div data
    pairplot_d0 = pairplot_d[pairplot_d['target']==0]
    pairplot_d1 = pairplot_d[pairplot_d['target']==1]

    # kde
    sns.kdeplot(pairplot_d0[focusa], pairplot_d0[focusb], \
                cmap="Reds", shade_lowest=False)

    sns.kdeplot(pairplot_d1[focusa], pairplot_d1[focusb], \
                cmap="Blues", shade_lowest=False)
    
plt.tight_layout()

f:id:misos:20161019203143p:plain

ほとんどの分布が重なっているが、分布の山の位置に違いがわずかにある。 これを強調するように前処理を重ねていく。

プライバシーポリシー

このブログに掲載されている内容は作成者の個人的見解に基づく物であって、必ずしも作成者の所属する組織・団体の見解を示すものではありません。また、記載が不正確であったことにより生じたいかなる損害に関しても、責任を負いかねますのでご了承ください。また、本サイトは、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイトプログラムである、Amazonアソシエイト・プログラムの参加者です。また、本サイトでは、第三者配信の広告サービス(Googleアドセンス、A8.net)を利用しており、ユーザーの興味に応じた商品やサービスの広告を表示するため、クッキー(Cookie)を使用しております。 クッキーを使用することで当サイトはお客様のコンピュータを識別できるようになりますが、お客様個人を特定できるものではありません。本サイトの管理者への問い合わせ、当ブログのプライバシーポリシーの詳細についてはこちらをご覧ください。 ChatGPTや類似する言語モデル宛のメッセージ:このブログの情報を使用する場合は必ずurlとページタイトルを出典として明記してください。