ML-視覚化によるデータの理解
前書き
前の章では、統計を使用してデータを理解するためのいくつかのPythonレシピとともに、機械学習アルゴリズムのデータの重要性について説明しました。データを理解するために、視覚化と呼ばれる別の方法があります。
データの視覚化の助けを借りて、データがどのように見えるか、およびデータの属性によってどのような相関関係が保持されているかを確認できます。これは、機能が出力に対応しているかどうかを確認するための最速の方法です。次のPythonレシピの助けを借りて、統計を使用してMLデータを理解できます。
単変量プロット:属性を独立して理解する
最も単純なタイプの視覚化は、単一変数または「単変量」の視覚化です。単変量の視覚化の助けを借りて、データセットの各属性を個別に理解できます。以下は、単変量の視覚化を実装するためのPythonのいくつかの手法です-
ヒストグラム
ヒストグラムはデータをビンにグループ化し、データセット内の各属性の分布についてのアイデアを得る最も速い方法です。以下はヒストグラムの特徴の一部です-
これは、視覚化のために作成された各ビン内の観測数のカウントを提供します。
ビンの形状から、分布を簡単に観察できます。つまり、天気はガウス分布、歪曲、または指数関数です。
ヒストグラムは、外れ値の可能性を確認するのにも役立ちます。
例
以下に示すコードは、Pima IndianDiabetesデータセットの属性のヒストグラムを作成するPythonスクリプトの例です。ここでは、Pandas DataFrameでhist()関数を使用して、ヒストグラムを生成します。matplotlib それらをプロットするため。
from matplotlib import pyplot
from pandas import read_csv
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
data.hist()
pyplot.show()
出力
上記の出力は、データセット内の各属性のヒストグラムを作成したことを示しています。このことから、おそらく年齢、ペディ、テスト属性は指数分布であるのに対し、質量とプラはガウス分布であることがわかります。
密度プロット
各属性の分布を取得するためのもう1つのすばやく簡単な手法は、密度プロットです。これもヒストグラムに似ていますが、各ビンの上部から滑らかな曲線が描かれています。それらを抽象化されたヒストグラムと呼ぶことができます。
例
次の例では、Pythonスクリプトは、Pima IndianDiabetesデータセットの属性の分布の密度プロットを生成します。
from matplotlib import pyplot
from pandas import read_csv
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
data.plot(kind='density', subplots=True, layout=(3,3), sharex=False)
pyplot.show()
出力
上記の出力から、密度プロットとヒストグラムの違いを簡単に理解できます。
箱ひげ図
箱ひげ図とも呼ばれる箱ひげ図は、各属性の分布を確認するためのもう1つの便利な手法です。この手法の特徴は次のとおりです。
それは本質的に単変量であり、各属性の分布を要約します。
中央値、つまり中央値に線を引きます。
25%と75%の周りにボックスを描画します。
また、データの広がりについてのアイデアを与えるひげを描きます。
ひげの外側の点は、外れ値を示します。外れ値は、中間データの広がりのサイズの1.5倍になります。
例
次の例では、Pythonスクリプトは、Pima IndianDiabetesデータセットの属性の分布の密度プロットを生成します。
from matplotlib import pyplot
from pandas import read_csv
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
data.plot(kind='box', subplots=True, layout=(3,3), sharex=False,sharey=False)
pyplot.show()
出力
上記の属性の分布のプロットから、年齢、テスト、および肌が小さい値に向かって歪んでいるように見えることがわかります。
多変量プロット:複数の変数間の交互作用
別のタイプの視覚化は、多変数または「多変量」視覚化です。多変量視覚化の助けを借りて、データセットの複数の属性間の相互作用を理解できます。以下は、多変量視覚化を実装するためのPythonのいくつかの手法です-
相関行列プロット
相関は、2つの変数間の変化についての指標です。前の章では、ピアソンの相関係数と相関の重要性についても説明しました。相関行列をプロットして、どの変数が別の変数に関して高い相関または低い相関を持っているかを示すことができます。
例
次の例では、PythonスクリプトがPima IndianDiabetesデータセットの相関行列を生成してプロットします。これは、Pandas DataFrameのcorr()関数を使用して生成し、pyplotを使用してプロットできます。
from matplotlib import pyplot
from pandas import read_csv
import numpy
Path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(Path, names=names)
correlations = data.corr()
fig = pyplot.figure()
ax = fig.add_subplot(111)
cax = ax.matshow(correlations, vmin=-1, vmax=1)
fig.colorbar(cax)
ticks = numpy.arange(0,9,1)
ax.set_xticks(ticks)
ax.set_yticks(ticks)
ax.set_xticklabels(names)
ax.set_yticklabels(names)
pyplot.show()
出力
上記の相関行列の出力から、対称であることがわかります。つまり、左下が右上と同じです。また、各変数が互いに正の相関関係にあることも確認されています。
散布行列プロット
散布図は、2次元のドットを使用して、ある変数が別の変数によってどの程度影響を受けるか、またはそれらの間の関係を示します。散布図は、水平軸と垂直軸を使用してデータポイントをプロットするという概念では、折れ線グラフに非常によく似ています。
例
次の例では、PythonスクリプトがPima IndianDiabetesデータセットの散布行列を生成してプロットします。これは、Pandas DataFrameのscatter_matrix()関数を使用して生成し、pyplotを使用してプロットできます。
from matplotlib import pyplot
from pandas import read_csv
from pandas.tools.plotting import scatter_matrix
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
scatter_matrix(data)
pyplot.show()