Pythonベースのデータの可視化:ディメンションから多次元へ

ディレクトリ

A、IRISデータセットが記述する
2つの1次元データの視覚化を
三次元データの可視化
4、多次元データの視覚化
V.参照


A、アイリスデータセットが説明します

とにかくsetosa、virginicaの、ベルシカラー、ルアンのフルールである3:アイリス・データ・セットは、150人の観察と5つの変数、すなわち、萼片の長さ、萼片の幅、花弁の長さ、花弁の幅、種、三つの値を有する種を有しますそれのさまざまな品種、50の観測とそれぞれ。詳細は以下の通りです。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

%matplotlib inline
sns.set(style="white", color_codes=True)

#加载iris数据集
from sklearn.datasets import load_iris
iris_data = load_iris()
iris = pd.DataFrame(iris_data['data'], columns=iris_data['feature_names'])
iris = pd.merge(iris, pd.DataFrame(iris_data['target'], columns=['species']), left_index=True, right_index=True)
labels = dict(zip([0,1,2], iris_data['target_names']))
iris['species'] = iris['species'].apply(lambda x: labels[x])
iris.head()

アイリスdata.png

私たちは、データセットをアイリス、例えば、いくつかのアイデアを提供するために、後者のためにモデル化し、matplotlibの、seaborn、パンダ、sklearn 1次元、2次元および多次元データ視覚探索的データ分析を使用する方法を示します。

第二に、一次元データの可視化

PythonはSeaborn matplotlibのデータ可視化ツールをベースにしています。それはすぐに美しいグラフィックスデータを描画し、余分なパラメータ設定の問題の多くを回避するために、ヘルプデータアナリストにハイレベルのラッパー機能の多くを提供しています。

  • 種の個々の特性と箱ひげ図の関係を描き、あなたはあまりにも良いではありません花びら長さ、単一の寸法が他の2種で、花弁の長さの差の特に花びら長さsetosaを切り開いてきたことを過ごした鳳凰の尾の異なる品種を見ることができます、あなたを入れてもそれを認識しました。
# look at an individual feature in Seaborn through a boxplot

sns.boxplot(x='species', y='petal length (cm)', data=iris)

ボックスプロット

  • kdeplot核密度マップ
# kdeplot looking at univariate relations
# creates and visualizes a kernel density estimate of the underlying feature

sns.FacetGrid(iris, hue='species',size=6) \
   .map(sns.kdeplot, 'petal length (cm)') \
    .add_legend()

kdeplot

  • violinplotピアノチャート:1つ以上の分類変数特徴機能とボックスプロットグラフカーネル密度推定を組み合わせた分布データと連続変数を比較した、それはデータ分布の複数の観察されました効果的な方法。
# A violin plot combines the benefits of the boxplot and kdeplot 
# Denser regions of the data are fatter, and sparser thiner in a violin plot

sns.violinplot(x='species', y='petal length (cm)', data=iris, size=6)

バイオリンプロット

第三に、2次元データの視覚化

  • 散布:FacetGridの色に応じて種を同定は、私たちはデータ間の関係を探すためにのために、ここでsetosaは常にうまくvirginicaのカワラタケはまだ献身と少しで、認識され、視覚的な二つの特徴を使用しています。
# use seaborn's FacetGrid to color the scatterplot by species

sns.FacetGrid(iris, hue="species", size=5) \
    .map(plt.scatter, "sepal length (cm)", "sepal width (cm)") \
    .add_legend()

種による散布図

  • pairplot:ペアごとの関係、幻想オーケーの特性を示すために!
# pairplot shows the bivariate relation between each pair of features
# From the pairplot, we'll see that the Iris-setosa species is separataed from the other two across all feature combinations
# The diagonal elements in a pairplot show the histogram by default
# We can update these elements to show other things, such as a kde

sns.pairplot(iris, hue='species', size=3, diag_kind='kde')

pairplot

第四に、多次元データの視覚化

ここでは、多次元データの可視化は、それが主にパンダ、matplotlibのとsklearnを使用され、使用済みのseabornではありません。

カーブ1.アンドリュース

各試料のアンドリュース曲線属性値は、曲線を作成するために、フーリエ係数のシーケンスに変換されます。異なる色の各クラスのための標準曲線によってクラスタデータ、同じクラスに属するサンプルの曲線とより大きな構造を構成することが一般的により近くに視覚化することができます。

# Andrews Curves involve using attributes of samples as coefficients for Fourier series and then plotting these

pd.plotting.andrews_curves(iris, 'species')

アンドリュース曲線

2.パラレル座標

平行座標はまた、多次元視覚化技術です。これは、視覚的に推定からのデータやその他の統計のカテゴリで見ることができます。各セグメントの結合点と平行座標を使用する場合。各縦線は、プロパティを表します。これは、データポイントの結合セグメントの基を表します。これは、近いデータポイントのクラスかもしれません。

# Parallel coordinates plots each feature on a separate column & then draws lines connecting the features for each data sample

pd.plotting.parallel_coordinates(iris, 'species')

並列座標

3. RadVizレーダーチャート

RadViz多次元データは、視覚的です。それは、(また、多くの場合、複雑なネットワークの分析に使用される)基本的なバネ圧の最小化アルゴリズムに基づいています。簡潔には、平面上の点の集合、各点は特性を示し、我々は、4つの点を持っている場合には、単位円上に配置され、その後、スプリングカップリングを介してそれぞれのデータセットを想像することができ各点、及び属性(属性値が正規化されている)の値への弾性力に比例し、スプリングの平面位置に設定された位置データがバランスされています。異なるクラスのサンプルは、異なる色を表します。

# radviz  puts each feature as a point on a 2D plane, and then simulates
# having each sample attached to those points through a spring weighted by the relative value for that feature

pd.plotting.radviz(iris, 'species')

radviz

前記因子分析(FactorAnalysis)

因子分析は、変数グループから共通因子を抽出するための統計的手法の研究が参照されます。これは、最初のイギリスの心理学者CEスピアマンによって提案されました。彼はまた、一般的なインテリジェンス、一定の条件として知られているいくつかの関連性を持つすべての被験者の学生、分割達成者、多くの場合、他のすべての科目いくつかの潜在的な共通因子がある場合ので、おそらく、比較的良好である、の中から見つかりました生徒の成績に影響を与えます。因子分析は、多くの典型的な変数に隠された要因を特定することができます。本質的に同じ因子に含まれる変数、変数の数を減らすことができ、さらに試験仮説変数間の関係という。

ガウス潜在変数に基づいてモデル線形単純な、それぞれが低次元観察を仮定は、潜在的なノイズ通常の設定によって可変とされます。

from sklearn import decomposition

fa = decomposition.FactorAnalysis(n_components=2)

X = fa.fit_transform(iris.iloc[:,:-1].values)

pos=pd.DataFrame()
pos['X'] =X[:, 0]
pos['Y'] =X[:, 1]
pos['species'] = iris['species']

ax = pos[pos['species']=='virginica'].plot(kind='scatter', x='X', y='Y', color='blue', label='virginica')
pos[pos['species']=='setosa'].plot(kind='scatter', x='X', y='Y', color='green', label='setosa', ax=ax)
pos[pos['species']=='versicolor'].plot(kind='scatter', x='X', y='Y', color='red', label='versicolor', ax=ax)

FA

主成分分析(PCA)

主成分分析は、線形独立の特徴は、変換後に得られた特性を主成分と呼ばれる、請求直交変換元を変換して因子分析によって進化次元圧縮する方法です。主成分元の寸法の分析に寸法を低減することができ、N寸法、特殊なケースの状況が存在し、それは、キューブを達成するために、平面内の点に多次元データとすることができる場合には、二次元の主成分分析の寸法を低減することです可視化の目的。

from sklearn import decomposition

pca = decomposition.PCA(n_components=2)

X = pca.fit_transform(iris.iloc[:,:-1].values)

pos=pd.DataFrame()
pos['X'] =X[:, 0]
pos['Y'] =X[:, 1]
pos['species'] = iris['species']

ax = pos[pos['species']=='virginica'].plot(kind='scatter', x='X', y='Y', color='blue', label='virginica')
pos[pos['species']=='setosa'].plot(kind='scatter', x='X', y='Y', color='green', label='setosa', ax=ax)
pos[pos['species']=='versicolor'].plot(kind='scatter', x='X', y='Y', color='red', label='versicolor', ax=ax)

PCA

 

実際にいくつかの情報を失うPCAの次元削減によって、注意しなければならない、我々はまた、元のデータのどのくらいを説明できる保持の2つの主要コンポーネントで見ることができます。

pca.fit(iris.iloc[:,:-1].values).explained_variance_ratio_

出力:配列([0.92461621、0.05301557は ])
2つの主成分は、元の5.3%の変動を説明することができる第2主成分の元の変化の92.5%を説明することができる第一主成分に保持見ることができます。この手段は、二次元静止に落下した後、元の情報の97.8%でを保持すること。

前記独立成分分析(ICA)

ソース最大可能な独立の複数のサブコンポーネントに信号を分割する独立成分分析、もともとは次元削減が、信号分割オーバーラップすることを意図していないしました。

from sklearn import decomposition

fica = decomposition.FastICA(n_components=2)

X = fica.fit_transform(iris.iloc[:,:-1].values)

pos=pd.DataFrame()
pos['X'] =X[:, 0]
pos['Y'] =X[:, 1]
pos['species'] = iris['species']

ax = pos[pos['species']=='virginica'].plot(kind='scatter', x='X', y='Y', color='blue', label='virginica')
pos[pos['species']=='setosa'].plot(kind='scatter', x='X', y='Y', color='green', label='setosa', ax=ax)
pos[pos['species']=='versicolor'].plot(kind='scatter', x='X', y='Y', color='red', label='versicolor', ax=ax)

ICA

7.多次元ルーラー(多次元スケーリング、MDS)

多次元スケーリング元の高次元データから低次元空間の優れた特性を見つけよう。要するに、多次元測定スティック類似度データのために使用され、それは、距離幾何学空間とモデルの類似度データしようと、高次元空間の関係を表現するために二次元空間の距離が簡単です。データは、分子または国家の商品指数との間の相互作用の頻度との間に、オブジェクト間の類似度であってもよいです。これは、以前の方法とは異なる、上記方法は、生データを入力されているが、多次元測定スケールの例では、入力は、距離行列のユークリッド距離に基づいています。多次元測定スティック反復アルゴリズムは、したがって、上記のアルゴリズムの計算は最大の時間がかかるものであるが、反復の最大数を指定するmax_iterの使用を必要とし、継続的なプロセスです。

from sklearn import manifold

from sklearn.metrics import euclidean_distances

similarities = euclidean_distances(iris.iloc[:,:-1].values)
mds = manifold.MDS(n_components=2, max_iter=3000, eps=1e-9, dissimilarity="precomputed", n_jobs=1)
X = mds.fit(similarities).embedding_

pos=pd.DataFrame(X, columns=['X', 'Y'])
pos['species'] = iris['species']

ax = pos[pos['species']=='virginica'].plot(kind='scatter', x='X', y='Y', color='blue', label='virginica')
pos[pos['species']=='setosa'].plot(kind='scatter', x='X', y='Y', color='green', label='setosa', ax=ax)
pos[pos['species']=='versicolor'].plot(kind='scatter', x='X', y='Y', color='red', label='versicolor', ax=ax)

MDS

8. TSNE(T-分散確率ネイバー埋め込み)

T-SNE(T分散ランダム近傍埋め込み)は、高次元のデータを探索するための非線形次元削減アルゴリズムです。データのパターンを見つけるために、機能の複数のクラスタを有するデータ点を識別することによって観察された類似度に基づいて、多次元データは、人間の観察に適した2次元以上にマッピングされます。基本的に次元削減と可視化技術。アルゴリズムを使用するための最良の方法は、探索的データ分析のために使用されるべきです。

from sklearn.manifold import TSNE

iris_embedded = TSNE(n_components=2).fit_transform(iris.iloc[:,:-1])

pos = pd.DataFrame(iris_embedded, columns=['X','Y'])
pos['species'] = iris['species']

ax = pos[pos['species']=='virginica'].plot(kind='scatter', x='X', y='Y', color='blue', label='virgnica')
pos[pos['species']=='setosa'].plot(kind='scatter', x='X', y='Y', color='green', label='setosa', ax=ax)
pos[pos['species']=='versicolor'].plot(kind='scatter', x='X', y='Y', color='red', label='versicolor', ax=ax)

TSNE

ああ、私はほとんどのTSNEかわいい/の結果(/ /•/ω/•/ /)を考えます/

V.リファレンス

公開された296元の記事 ウォンの賞賛221 ビュー540 000 +

おすすめ

転載: blog.csdn.net/qq_36387683/article/details/102516108