機械学習にて簡易的に特徴量の欠損値の処理を行い、訓練データとテストデータの数を合わせるサンプルコード

記事公開日:
最終更新日:

This post is also available in: English-US (英語)

機械学習を行う際に、簡易的に特徴量の欠損値の処理を行い、訓練データとテストデータの特徴量の数を合わせるサンプルコードについて、備忘録的にメモを書いています。
欠損値の処理は機械学習の方針にもよるので、とりあえずコードが走るようにしたい時などに便利です。

ただし、サンプルコード中、訓練データとテストデータの index は共通であることを前提に書いています。

import pandas as pd
import numpy as np

#適当なデータを生成、nanを代入
data_X = np.random.randn(6,2)
data_X[0][1] = np.nan
data_X[4][0] = np.nan
print(data_X)
"""
#output
[[ 0.1669884          nan]
 [-0.93169488 -0.80602492]
 [ 1.34485881 -1.15684329]
 [-1.77475068  0.58345764]
 [        nan -1.34413655]
 [ 0.76400682  0.43928072]]
"""

#データから特徴量のデータフレーム生成
train_features = pd.DataFrame(data_X, columns=["FeatureA","FeatureB"])
print(train_features)
"""
#output
   FeatureA  FeatureB
0  0.166988       NaN
1 -0.931695 -0.806025
2  1.344859 -1.156843
3 -1.774751  0.583458
4       NaN -1.344137
5  0.764007  0.439281
"""

#正解ラベルのシリーズを適当に生成
train_labels = pd.Series([1,0,1,1,0,1])

#特徴量の欠損値(nan)をDrop
# how='any' は行の1つでも欠損値が含まれる場合は削除
train_features = train_features.dropna(how='any')

#欠損値の処理で、train_features と train_labels のデータ数が合わなくなる
print(len(train_features.index.values)) #4
print(len(train_labels.index.values)) #6

#train_features のデータ数に train_labels のデータ数を合わせる場合
#言い換えると、train_features のdropnaで欠損したインデックスに train_labels のインデックスを合わせる
#ただし、train_features と train_labels の index は共通であることが必要
train_labels = train_labels[train_features.index.values]

#train_features と train_labels のデータ数が一致
print(len(train_features.index.values)) #4
print(len(train_labels.index.values)) #4

About
Amelt.net,LLCの創業者で、費用対効果の高い統合webマーケティングによりビジネスパートナーとして継続的にサポート。詳しいより。ブログの更新情報TwitterLinkedIn、またRSSfeedlyにてお知らせしていますのでフォローよろしくお願い致します。