One-Hot符号化

1712 ワード

独熱符号化はOne-Hot符号化であり、Nビット状態レジスタを用いてN個の状態を符号化する方法であり、各状態は独立したレジスタビットであり、いずれの場合も1ビットしか有効ではない.独熱符号化は上記の問題を解決する良い方法である.しかし、データもまばらになった.[{‘city’:‘北京’,‘location’:‘北方’,‘temperature’:100},{‘city’:‘上海’,‘location’:‘南方’,‘temperature’:60},{‘city’:‘深セン’,‘location’:‘南方’,‘temperature’:30},{‘city’:‘深セン’,‘temperature’:20}]上記ではcityカテゴリをデジタル化し,123分表を用いて北京,北京,上海、深セン特徴量が非常に少ない場合,このような単純デジタル化方式を用いて1つのカテゴリを表すことは可能であるが,大量の特徴に直面した場合,この方式を用いて1つのカテゴリを一意に表すことはできないことが分かった.one-hot符号化がちょうど合っているという問題は、cityの特徴について、ここで3つのカテゴリがあることを発見しました.では、3つのステータスビットを使ってそれぞれ表すことができますか.locationについては2つのステータスビットを使って表すことができますか.特徴city:北京:100上海:010深セン:001
特徴locationについて:北01南方10
フィーチャーtemperatureでは、one-hot符号化は使用されません.
サンプル1については、100,01,100と符号化される
from sklearn.feature_extraction import DictVectorizer
import numpy as np

def dictvec():
    '''
     
    return None
    '''
    #  
    # dict = DictVectorizer() # sparse True
    dict = DictVectorizer(sparse=False)  # data ndarray 

    #  fit_transform
    data = dict.fit_transform([{'city': ' ','location':' ','temperature':100},
{'city': ' ','location':' ','temperature':60},
{'city': ' ','location':' ','temperature':30},
{'city': ' ','location':' ','temperature':20}])
    print(dict.get_feature_names())
    #  : , 
    print(data)

    return None

if __name__ == '__main__':
    dictvec()

得られた出力結果は、ndarray配列である.[‘city=上海’,‘city=北京’,‘city=深セン’,‘location=北方’,‘location=南方’,‘temperature’][[0.1.1.100.][ 1. 0. 0. 0. 1. 60.] [ 0. 0. 1. 0. 1. 30.] [ 0. 0. 1. 0. 1. 20.]]