データ分布の正規性を判断するための11の基本的方法

データ分布の正規性を判断するための11の基本的方法

データ サイエンスと機械学習の分野では、多くのモデルはデータが正規分布していると想定しているか、データが正規分布していると想定した方がパフォーマンスが向上すると想定しています。たとえば、線形回帰では残差が正規分布していると仮定し、線形判別分析 (LDA) は正規分布などの仮定に基づいて導出されます。 したがって、データ サイエンティストや機械学習の専門家にとって、データの正規性をテストする方法を理解することは非常に重要です。

この記事では、データ正規性をテストするための 11 の基本的な方法を紹介します。これにより、読者はデータ分布の特性と分析に適切な方法を適用する方法をより深く理解し、機械学習とデータ モデリングのプロセスでデータ分布がモデルのパフォーマンスに与える影響をより適切に処理できるようになります。

プロット方法

1.QQプロット

QQ プロット (Quantile-Quantile Plot) は、データ分布が正規分布に準拠しているかどうかをテストするために使用される一般的な方法です。 QQ プロットでは、データの分位数が標準正規分布の分位数と比較されます。データ分布が正規分布に近い場合、QQ プロット上の点はほぼ直線上に並びます。

次のサンプル コードは、QQ プロットを示すために、正規分布に従うランダム データ セットを生成します。コードを実行すると、QQ プロットとそれに対応する正規分布曲線が表示されます。グラフ上の点の分布を観察することで、データが正規分布に近いかどうかを事前に判断できます。

 import numpy as np import scipy.stats as stats import matplotlib.pyplot as plt # 生成一组随机数据,假设它们服从正态分布data = np.random.normal(0, 1, 1000) # 绘制QQ图stats.probplot(data, dist="norm", plot=plt) plt.title('QQ Plot') plt.show()

2. KDE プロット

KDE (カーネル密度推定) プロットは、データ分布を視覚化する方法であり、データの正規性を検出するのに役立ちます。 KDE プロットでは、データの密度が推定され、滑らかな曲線としてプロットされるため、データの分布形状を観察するのに役立ちます。

次のサンプル コードは、KDE ​​プロットを示すために、正規分布に従うランダム データ セットを生成します。コードを実行すると、KDE ​​プロットと対応する正規分布曲線が表示され、視覚化によってデータ分布の正規性を検出できます。

 import numpy as np import seaborn as sns import matplotlib.pyplot as plt # 生成随机数据np.random.seed(0) data = np.random.normal(loc=0, scale=1, size=1000) # 创建KDE Plot sns.kdeplot(data, shade=True, label='KDE Plot') # 添加正态分布曲线mu, sigma = np.mean(data), np.std(data) x = np.linspace(min(data), max(data), 100) y = (1/(sigma * np.sqrt(2 * np.pi))) * np.exp(-0.5 * ((x - mu) / sigma) ** 2) plt.plot(x, y, 'r--', label='Normal Distribution') # 显示图表plt.legend() plt.show()

3. ヴァイオリン・プロット

バイオリン プロットを観察することで、データの分布形状を見つけ、データが正規分布に近いかどうかを予備的に判断できます。バイオリン プロットがベル曲線のような形をしている場合、データはおそらくほぼ正規分布しています。バイオリン プロットが極端に歪んでいたり、複数のピークがあったりする場合は、データが正規分布していない可能性があります。

次のサンプル コードは、正規分布に従うランダム データ セットを生成し、Violin Plot を示します。コードを実行すると、Violin Plot とそれに対応する正規分布曲線が表示されます。視覚化により、データ分布の形状を検出し、データが正規分布に近いかどうかを事前に判断できます。

 import numpy as np import seaborn as sns import matplotlib.pyplot as plt # 生成随机数据np.random.seed(0) data = np.random.normal(loc=0, scale=1, size=100) # 创建Violin Plot sns.violinplot(data, inner="points") # 添加正态分布曲线mu, sigma = np.mean(data), np.std(data) x = np.linspace(min(data), max(data), 100) y = (1/(sigma * np.sqrt(2 * np.pi))) * np.exp(-0.5 * ((x - mu) / sigma) ** 2) plt.plot(x, y, 'r--', label='Normal Distribution') # 显示图表plt.legend() plt.show()

4.ヒストグラム

ヒストグラムを使用してデータ分布の正規性を検出することも一般的な方法です。ヒストグラムは、データの分布を直感的に理解し、データが正規分布に近いかどうかを事前に判断するのに役立ちます。

 import numpy as np import matplotlib.pyplot as plt import scipy.stats as stats # 生成一组随机数据,假设它们服从正态分布data = np.random.normal(0, 1, 1000) # 绘制直方图plt.hist(data, bins=30, density=True, alpha=0.6, color='g') plt.title('Histogram of Data') plt.xlabel('Value') plt.ylabel('Frequency') # 绘制正态分布的概率密度函数xmin, xmax = plt.xlim() x = np.linspace(xmin, xmax, 100) p = stats.norm.pdf(x, np.mean(data), np.std(data)) plt.plot(x, p, 'k', linewidth=2) plt.show()

ヒストグラムが上の図に示すようにベル型曲線に近似し、対応する正規分布曲線と形状が似ている場合、データはおそらく正規分布に従っています。もちろん、可視化はあくまでも予備的な判断に過ぎず、より正確な検出が必要な場合は、正規性検定などの統計的手法を用いて分析することができます。

統計的手法

5. シャピロ・ウィルク検定

これは、データが正規分布を満たしているかどうかをテストするために使用される統計手法であり、W テストとも呼ばれます。 Shapiro-Wilk テストを実行するときは、通常、次の 2 つの主な指標に注目します。

  • 統計量 W: 統計量 W は、正規分布における観測データと期待値との相関関係に基づいて計算されます。W の値の範囲は 0 から 1 です。W が 1 に近い場合、観測データが正規分布によく適合していることを意味します。
  • P 値: P 値は、この相関関係を観察できる可能性を示します。P 値が有意水準 (通常は 0.05) より大きい場合、観察されたデータは正規分布から得られる可能性が高いことを示します。

したがって、統計量 W が 1 に近く、P 値が 0.05 より大きい場合、観測データは正規分布を満たしていると結論付けることができます。

次のコードでは、まず正規分布に従うランダム データ セットが生成され、次に Shapiro-Wilk テストが実行されて検定統計量と P 値が取得されます。 P 値を有意水準と比較することで、サンプル データが正規分布から得られたものかどうかを判断できます。

 from scipy import stats import numpy as np # 生成一组服从正态分布的随机数据data = np.random.normal(0, 1, 100) # 执行Shapiro-Wilk检验stat, p = stats.shapiro(data) print('Shapiro-Wilk Statistic:', stat) print('P-value:', p) # 根据P值判断正态性alpha = 0.05 if p > alpha: print('样本数据可能来自正态分布') else: print('样本数据不符合正态分布')

6.KS検査

KS テスト (コルモゴロフ-スミルノフ テスト) は、データが特定の分布 (正規分布など) に準拠しているかどうかをテストするために使用される統計手法です。特定の理論分布の累積分布関数 (CDF) 間の最大差を測定することで、観測データが同じ分布からのものであるかどうかを評価します。基本的な手順は次のとおりです。

  • 2 つのサンプル データを並べ替えます。
  • 2 つのサンプルの経験累積分布関数 (ECDF) を計算します。つまり、サンプル内の各値の累積パーセンテージを計算します。
  • 通常は KS 統計を使用して測定される 2 つの累積分布関数の差を計算します。
  • サンプル サイズと有意水準に基づいて、参照表を使用するか、p 値を計算して、2 つのサンプルが同じ分布からのものであるかどうかを判断します。

Python で KS テストを使用してデータが正規分布に準拠しているかどうかをテストする場合は、Scipy ライブラリの kstest 関数を使用できます。以下は、Python を使用して KS テストを実行し、データが正規分布に準拠しているかどうかをテストする方法を示した簡単な例です。

 from scipy import stats import numpy as np # 生成一组服从正态分布的随机数据data = np.random.normal(0, 1, 100) # 执行KS检验statistic, p_value = stats.kstest(data, 'norm') print('KS Statistic:', statistic) print('P-value:', p_value) # 根据P值判断正态性alpha = 0.05 if p_value > alpha: print('样本数据可能来自正态分布') else: print('样本数据不符合正态分布')

7. アンダーソン・ダーリング検定

アンダーソン・ダーリング検定は、データが正規分布などの特定の分布から来ているかどうかを検定するために使用される統計手法です。これは、分布の末端における観測値の差に特に重点を置いているため、極端な値からの逸脱を検出するのに非常に効果的です。

次のコードは、stats.anderson 関数を使用して Anderson-Darling テストを実行し、テスト統計量、臨界値、および有意水準を取得します。次に、統計値と臨界値の比較に基づいて、サンプル データが正規分布からのものであるかどうかを判断できます。

 from scipy import stats import numpy as np # 生成一组服从正态分布的随机数据data = np.random.normal(0, 1, 100) # 执行Anderson-Darling检验result = stats.anderson(data, dist='norm') print('Anderson-Darling Statistic:', result.statistic) print('Critical Values:', result.critical_values) print('Significance Level:', result.significance_level) # 判断正态性if result.statistic < result.critical_values[2]: print('样本数据可能来自正态分布') else: print('样本数据不符合正态分布')

8. リリーフォーステスト

リリーフォース検定 (コルモゴロフ-スミルノフ-リリーフォース検定とも呼ばれる) は、データが正規分布に従うかどうかを検定する統計検定です。これは、特に小規模なサンプル サイズ向けに設計されたコルモゴロフ-スミルノフ検定のバリエーションです。 KS テストとは異なり、Lilliefors テストではデータの分布タイプに関する仮定は必要ありません。観測されたデータが正規分布から来ているかどうかを評価します。

次の例では、lilliefors 関数を使用して Lilliefors テストを実行し、テスト統計量と P 値を取得します。 P 値を有意水準と比較することで、サンプル データが正規分布から得られたものかどうかを判断できます。

 import numpy as np from statsmodels.stats.diagnostic import lilliefors # 生成一组服从正态分布的随机数据data = np.random.normal(0, 1, 100) # 执行Lilliefors检验statistic, p_value = lilliefors(data) print('Lilliefors Statistic:', statistic) print('P-value:', p_value) # 根据P值判断正态性alpha = 0.05 if p_value > alpha: print('样本数据可能来自正态分布') else: print('样本数据不符合正态分布')

9. 距離測定

距離測定は、データの正規性をテストするための効果的な方法であり、観測されたデータ分布と参照分布の違いをより直感的に比較する方法を提供します。

以下に、一般的な距離測定と、正規性のテストにおけるその使用法を示します。

(1)バッタチャリヤ距離:

  • 2 つの分布間の重なりを測定します。多くの場合、2 つの分布が互いにどれだけ近いかとして解釈されます。
  • 観測された分布との Bhattacharyya 距離が最小の参照分布が、最も近い分布として選択されます。

(2)「ヘリンガー距離」

  • Bhattacharyya 距離と同様に、2 つの分布間の類似性を測定するために使用されます。
  • Bhattacharyya 距離とは異なり、Hellinger 距離は三角不等式を満たすため、場合によってはより実用的になります。

(3)KLダイバージェンス:

  • 厳密に言えば、それ自体は「距離メトリック」ではありませんが、正規性をテストする際の情報損失の尺度として使用できます。
  • 観測された分布との KL ダイバージェンスが最小となる参照分布が、最も近い分布として選択されます。

これらの距離測定は、観測された分布を複数の参照分布と比較し、データの正規性をより適切に評価するのに役立ちます。観測された分布との距離が最小となる参照分布を選択することで、データが正規分布からのものであるかどうかをより正確に判断できます。

<<:  Google の最新 AI モデル「Gemini」について知っておくべきことすべて

>>:  ITリーダーが避けるべき6つのGenAIの落とし穴

ブログ    

推薦する

...

...

たった5秒でNeRFをトレーニング? ! Nvidia の新技術は Google の研究者の手に負えない | オープンソース

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

...

AIとビッグデータ2017「成長痛」

2017 年、人工知能とビッグデータの開発では次の 10 の成長痛が発生しました。 [[21567...

...

双子: 効率的な視覚的注意モデルの設計を再考する

著者 | 湘湘天志 張波 他Twins は Meituan とアデレード大学が提案した視覚的注意モデ...

自動運転システムにおけるエッジコンピューティング技術

エッジ コンピューティングは、ネットワークのエッジでコンピューティングを実行する新しいコンピューティ...

ゲームオーバー?強いAIと弱いAIの戦い

数週間前、Googleの人工知能(AI)子会社DeepMindが、Gato(同じトレーニング済みモデ...

AI生成画像に追加されたデジタル透かしは簡単に解読できると研究で判明

10月6日、EngadgetやWiredなどの海外メディアの報道によると、メリーランド大学の研究チー...

Appleのアプリランキングアルゴリズム調整の裏側:ランキング管理企業が一夜にして沈黙

4月1日早朝のニュース:3月初旬から、AppleはAppランキングアルゴリズムを徐々に調整し、ランキ...

人工知能の真の可能性

サイエンス フィクションや大衆文化では、人工知能 (AI) 技術に関する大胆な予測や説明がよく取り上...

ビッグデータと人工知能の関係、総合的な分析

ビッグデータはクラウドコンピューティングを採用PaaS レイヤーの複雑な汎用アプリケーションは、ビッ...

アダムはまた「引退」するのでしょうか?イェール大学のチームがAdaBeliefを提案

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...