情報エントロピーの例のPython計算

情報エントロピーの計算式:nはカテゴリの数、p(xi)はi番目のカテゴリの確率です。

データセットにm行、つまりmサンプルがあり、各行の最後の列がサンプルのラベルであるとすると、データセットの情報エントロピーを計算するためのコードは次のようになります。

from math import log
 
def calcShannonEnt(dataSet):
 numEntries =len(dataSet) #サンプル数
 labelCounts ={} #データセット内の各カテゴリの頻度
 for featVec in dataSet: #各行のサンプル
 currentLabel = featVec[-1] #サンプルのラベル
 if currentLabel not in labelCounts.keys(): labelCounts[currentLabel]=0
 labelCounts[currentLabel]+=1 
 shannonEnt =0.0for key in labelCounts:
 prob =float(labelCounts[key])/numEntries #pを計算する(xi)
 shannonEnt -= prob *log(prob,2) # log base 2return shannonEnt

補足知識:pythonは、情報エントロピー、条件付きエントロピー、情報ゲイン、Gini係数を実現します

ナンセンスなことはあまり言いませんが、みんなコードを見てください〜

import pandas as pd
import numpy as np
import math
## 情報エントロピーを計算する
def getEntropy(s):
 # 異なる値の出現数を見つける
 if not isinstance(s, pd.core.series.Series):
 s = pd.Series(s)
 prt_ary = pd.groupby(s , by = s).count().values /float(len(s))return-(np.log2(prt_ary)* prt_ary).sum()
## 条件付きエントロピーを計算する:条件s1でのs2の条件付きエントロピー
def getCondEntropy(s1 , s2):
 d =dict()for i inlist(range(len(s1))):
 d[s1[i]]= d.get(s1[i],[])+[s2[i]]returnsum([getEntropy(d[k])*len(d[k])/float(len(s1))for k in d])

## 情報ゲインを計算する
def getEntropyGain(s1, s2):returngetEntropy(s2)-getCondEntropy(s1, s2)

## ゲインレートを計算する
def getEntropyGainRadio(s1, s2):returngetEntropyGain(s1, s2)/getEntropy(s2)

## 離散値の相関を測定する
import math
def getDiscreteCorr(s1, s2):returngetEntropyGain(s1,s2)/ math.sqrt(getEntropy(s1)*getEntropy(s2))

# ######## 二乗の確率和を計算する
def getProbSS(s):if not isinstance(s, pd.core.series.Series):
 s = pd.Series(s)
 prt_ary = pd.groupby(s, by = s).count().values /float(len(s))returnsum(prt_ary **2)
######## ジニ係数を計算する
def getGini(s1, s2):
 d =dict()for i inlist(range(len(s1))):
 d[s1[i]]= d.get(s1[i],[])+[s2[i]]return1-sum([getProbSS(d[k])*len(d[k])/float(len(s1))for k in d])
## 離散変数の相関係数を計算し、ヒートマップを作成します,相関行列を返します
def DiscreteCorr(C_data):
 ## 離散変数の場合(C_data)相関係数を計算する
 C_data_column_names = C_data.columns.tolist()
 ## ストアC_データ相関係数のマトリックス
 import numpy as np
 dp_corr_mat = np.zeros([len(C_data_column_names),len(C_data_column_names)])for i inrange(len(C_data_column_names)):for j inrange(len(C_data_column_names)):
  # 2つの属性間の相関係数を計算します
  temp_corr =getDiscreteCorr(C_data.iloc[:,i], C_data.iloc[:,j])
  dp_corr_mat[i][j]= temp_corr
 # 相関係数グラフを描く
 fig = plt.figure()
 fig.add_subplot(2,2,1)
 sns.heatmap(dp_corr_mat ,vmin=-1, vmax=1, cmap= sns.color_palette('RdBu', n_colors=128), xticklabels= C_data_column_names , yticklabels= C_data_column_names)return pd.DataFrame(dp_corr_mat)if __name__ =="__main__":
 s1 = pd.Series(['X1','X1','X2','X2','X2','X2'])
 s2 = pd.Series(['Y1','Y1','Y1','Y2','Y2','Y2'])print('CondEntropy:',getCondEntropy(s1, s2))print('EntropyGain:',getEntropyGain(s1, s2))print('EntropyGainRadio',getEntropyGainRadio(s1 , s2))print('DiscreteCorr:',getDiscreteCorr(s1, s1))print('Gini',getGini(s1, s2))

上記のPythonでの情報エントロピーの計算例は、エディターが共有するすべてのコンテンツです。参考にしてください。

Recommended Posts

情報エントロピーの例のPython計算
IOU計算ケースのPython実装
pythonアクセスAlipayの操作例
派生物を計算してプロットするpythonの例
pythonからsqlを読み取る方法の例
Python3.9の7つの機能
Pythonオブジェクト指向の例
AI自動マットサンプル分析のPython実装
手描き効果の例の共有のPython実装
Pythonで実装された特徴抽出操作の例
Python3.7デバッグサンプルメソッド
Python構文の基本
Pythonの基本構文
Pythonの基礎知識(1)
pythonで写真を自動的にダウンロードする方法の例
pythonのPrettytableモジュール
Python補間補間の例
09.Python3の共通モジュール
Pythonの基盤を統合する(4)
Python(7)の基盤を統合する
pythonリスト(LIST)の深い理解
Pythonのタプルの添え字
wavファイルのPython分析
Python(6)の基盤を統合する
Pythonの負の弾性率の操作例
PythonクローラーのJSの分析
栄光のパイソンキング壁紙
Python(5)の基盤を統合する
Python3ロギングログパッケージの例
gomokuプログラムのPython実装
Pythonサンドボックスエスケープの分析
Python3.10のいくつかの新機能
Python正規式サンプルコード
Pythonマルチスレッドの深い理解
Python出力数学記号の例
Pythonオブジェクト指向プログラミングの分析
Python反復可能オブジェクトの重複排除の例
OpenCVインストールのPythonバージョン
Python一次元二次元補間の例
Pythonドローバーグラフ(バーグラフ)の例
Pythonの9つの機能エンジニアリング手法
Pythonの右揃えの例の方法
python描画モジュールのmatplotlib
パラメータを渡すPythonメソッド
Pythonの基盤を統合する(3)
Python共通モジュールのコレクション
Python算術シーケンス計算方法