Weka は初めてです。私のデータには学生名の列が含まれています。列全体で、これらの名前を数値に変換したいと考えています。例: abcd、cdef、xyz など 10 個の名前があるとします。abcd が 1 に変更され、 cdef が 2 に変更されるなど、各名前に対応する個別の数値が存在するように、データを前処理したいと考えています。
また、2 つ以上の行に同じ名前を付けることができます。したがって、この場合、同じ名前は同じ値を持つ必要があります。
私を助けてください...
Weka は初めてです。私のデータには学生名の列が含まれています。列全体で、これらの名前を数値に変換したいと考えています。例: abcd、cdef、xyz など 10 個の名前があるとします。abcd が 1 に変更され、 cdef が 2 に変更されるなど、各名前に対応する個別の数値が存在するように、データを前処理したいと考えています。
また、2 つ以上の行に同じ名前を付けることができます。したがって、この場合、同じ名前は同じ値を持つ必要があります。
私を助けてください...
Weka は、名義、数値、文字列、日付の 4 つの非リレーショナル属性タイプをサポートしています。詳細については、Weka マニュアル (Weka をダウンロードしたのと同じフォルダーにあります) の「ARFF ヘッダー セクション」の章を参照してください。
「学生の名前」属性の型 (おそらく文字列ですが、名義の可能性があります) を調べ、変換された値 (数値、名義、または文字列) を持つ属性の型を決定する必要があります。
2 つのシナリオが考えられます。
(1) 既存の属性と目的の属性のタイプが同じ場合 (文字列-文字列または公称-名義、つまり、属性タイプではなく値のみを変更する場合)、
(a) 手動でデータ ファイルを開きます。 Weka Explorer で [編集...] ボタンをクリックするか、 (b) Weka の Attribute クラス関数と
を使用して小さなプログラムを作成します。value
setValue
(2) タイプが異なる - Weka 属性タイプは変換できないため、変換された値で新しい属性を作成して挿入し、古い属性を削除する必要があります。新しい属性を作成する方法の例は、 http://weka.wikispaces.com/Programmatic+Use#Stepにあります。
私が理解している限りでは、名前を「数値」型に厳密に変換することは、WEKA のコンテキスト内では最善のアプローチとは思えません。WEKA は数値属性を「文字列」または「名義」属性とは異なる方法で扱います (たとえば、 、特定の「属性選択」アルゴリズムを実行するために、「数値」型を使用することはできません。「離散化」するか、公称形式に変換する必要があります)。
したがって、あなたの場合、 StringToNominalクラスを使用して「文字列」名を単に「公称」型に変換できると思います(このクラスはWEKA「フィルター」として機能し、特定の「文字列」属性を型の属性に変換するのに役立ちます「公称」)。これにより、繰り返しの名前も考慮されます。名前の「公称」値のリスト (このフィルターを適用した後に生成されます) には、任意の名前 (何度でも表示される) が 1 回だけ含まれます。
「公称」属性には、暗黙的に数値表現 (値のセット内の値のインデックス。Java の「列挙型」に数値インデックスがあるのと同様) があるという利点もあります。したがって、それを名前に対応する「数値」情報として利用できます(ただし、前述したように、「名目」属性として使用するのがおそらく最善です。実際には、特定のユースケースによって異なります)。