3

:

これは、データ マイニング クラスの宿題です。

関連するコード スニペットをこの SO 投稿に載せますが、私のプログラム全体はhttp://pastebin.com/CzNFbLJ2にあります。

このプログラムで使用しているデータセットは、http://archive.ics.uci.edu/ml/datasets/Irisにあります。


だから私は得ています: RuntimeWarning: sqrt return np.sqrt(m) で無効な値が見つかりました

指定されたアイリス データセットの平均マハラノビス距離を見つけようとしています (未加工のデータセットと正規化されたデータセットの両方)。エラーはデータセットの正規化されたバージョンでのみ発生しているため、正規化の意味を (コードと数学の両方で) 間違って理解しているのではないかと考えています。

正規化とは、ベクトルの各コンポーネントがそのベクトルの長さで除算されることを意味すると考えました (ベクトルの合計が 1 になります)。私はこのSOの質問How to normalize a 2-dimensional numpy array in python less verbose?を見つけました。そしてそれは私のノーマライゼーションの概念と一致すると考えました。しかし今、私のコードは、正規化されたデータセット上のマハラノビス距離が NAN であることを報告しています

def mahalanobis(data):
   import numpy as np;
   import scipy.spatial.distance;
   avg   = 0
   count = 0

   covar = np.cov(data, rowvar=0);
   invcovar = np.linalg.inv(covar)

   for i in range(len(data)):
      for j in range(i + 1, len(data)):
         if(j == len(data)):
            break
         avg += scipy.spatial.distance.mahalanobis(data[i], data[j], invcovar)
         count += 1
   return avg / count


def normalize(data):
   import numpy as np
   row_sums = data.sum(axis=1)
   norm_data = np.zeros((50, 4))
   for i, (row, row_sum) in enumerate(zip(data, row_sums)):
      norm_data[i,:] = row / row_sum
   return norm_data
4

3 に答える 3

4

遅すぎるかもしれませんが、教科書「Introduction to Data Mining」の 64 ~ 65 ページをご覧ください。「正規化または標準化」というセクションがあり、ハーンが探している正規化されたデータの概念が説明されています。

基本的に、標準化されたデータセット x' = (x - mean(x)) / standardDeviation(x)

Python を使用していることがわかりましたので、SciPy を使用してそれを行う方法を次に示します。

normalizedData = (data - data.mean(axis=0)) / data.std(axis=0, ddof=1)

ソース: http://mail.scipy.org/pipermail/numpy-discussion/2011-April/056023.html

于 2013-04-19T10:47:02.630 に答える
2

このコンテキストでの正規化は、おそらく平均を減算してスケーリングすることを意味し、データが単位共分散行列を持つようにします。

ただし、データセット内のすべてのベクトルを単位ノルムにスケーリングするには、次のように使用しますnorm_data=data/np.sqrt(np.sum(data*data,1))[:,None]

各ベクトルの L2 ノルムで割る必要があります。これは、各要素の値を 2 乗してから、合計の平方根を取ることを意味します。ブロードキャストを使用すると、ループを明示的にコーディングすることを回避できます (引用した質問への回答を参照してください: https://stackoverflow.com/a/8904762/1149913 )。

于 2013-04-19T14:04:16.623 に答える