2017-06-05 7 views
-3

私は大きな文字列を持っています。各文字列はトレーニングデータセットの異なる例であり、カテゴリのリストを含み、各カテゴリはコンマで区切られています。例えば。カテゴリデータ - ワンホットエンコーディング

mesh = ['aligator, dog, cat', 'cat, mouse, aligator', ''] 

一部の例は、どのカテゴリにも属していない可能性があります。したがって、空の文字列として表されます。

機械学習で使用するために、これらのカテゴリをエンコードするためにワンホットエンコーディングを使用したいと考えています。

どうすればいいですか?私はカテゴリーの完全なリストを持っておらず、およそ5,000のカテゴリーがあります。

+0

あなたの 'mesh'は' 1次元numpy配列の文字列 'のようには見えません... 1D配列の文字列か文字配列の配列を持っていますか? – MaxU

+0

@MaxU編集済み – scutnex

+0

@MaxUからの回答に問題はありましたか?それは空の文字列のために働くはずです – elphz

答えて

1

デモ:

In [64]: from sklearn.feature_extraction.text import CountVectorizer 

In [65]: cv = CountVectorizer() 

In [66]: X = cv.fit_transform(mesh) 

In [67]: X.A 
Out[67]: 
array([[1, 1, 1, 0], 
     [1, 1, 0, 1]], dtype=int64) 

列名:

In [68]: cv.get_feature_names() 
Out[68]: ['aligator', 'cat', 'dog', 'mouse'] 

我々はPandas.SparseDataFrameを使用して、それを可視化することができます:

In [135]: import pandas as pd 

In [136]: pd.SparseDataFrame(X, columns=cv.get_feature_names(), default_fill_value=0) 
Out[136]: 
    aligator cat dog mouse 
0   1 1 1  0 
1   1 1 0  1 
+0

Ocassioanlyいくつかの例は、空の文字列(つまり、カテゴリに属していない)かもしれないし、このコードを使用するとクラッシュします... – scutnex

+0

@scutnex、カテゴリの完全なリストはありますか? __再現可能なサンプルデータセットを提供できますか? – MaxU

+0

この_list_の文字列内のテキストはすべてカテゴリです。 – scutnex

0

カテゴリ変数をコード化するさまざまな方法の束があります。機械学習のために、私たちはscikit-learn-contに少数(One-Hotを含む)を実装しますリブパッケージ:category_encoders:あなたはすでにscikit学習および/またはパンダを使用している場合

https://github.com/scikit-learn-contrib/categorical-encoding

、それは簡単な溶液であってもよいです。あなたが言及しているような非常に高い次元と、すべてのカテゴリを必ずしも前もって知っているわけではない場合、HashingEncoderのようなもので運が良いかもしれません。

関連する問題