順序データを出力するようにニューラルネットワークを設定する方法は?


20

出力変数が序数である場所を予測するために、ニューラルネットワークを設定しています。3つの可能な出力A <B <Cを使用して以下に説明します。

ニューラルネットワークを使用してカテゴリデータを出力する方法は非常に明白です。出力は最後の(通常は完全に接続された)レイヤーのソフトマックスであり、カテゴリごとに1つであり、予測カテゴリは最大の出力値を持つものです(これは多くの一般的なモデルのデフォルト)。序数値には同じ設定を使用しています。ただし、この場合、出力は意味をなさないことがよくあります。たとえば、AとCのネットワーク出力は高くてもBは低くなります。これは順序値には当てはまりません。

これには、出力をAの1 0 0、Bの1 1 0、Cの1 1 1と比較して損失を計算するというアイデアがあります。正確なしきい値は、別の分類器(たとえば、ベイジアンを使用して後で調整できます。 )しかし、これは、特定の間隔スケールを規定することなく、入力の順序付けの本質的なアイデアを捉えているようです。

この問題を解決する標準的な方法は何ですか?さまざまなアプローチの長所と短所を説明する研究や参考文献はありますか?


1
Googleで「通常のロジスティック回帰」について多くの興味深いヒットを得ました。たとえば、この論文
shadowtalker

@ssdecontrol:興味深い。私はそれを試してみました; 結果は、最高の値を持つ1つの出力を選択するよりも優れていますが、他の方法(単純ベイズなど)よりもわずかに劣っています。これは便利ですが、ネットワークのトレーニングには役立ちません。事実を少し改善しただけです...または少なくとも、ネットワークのトレーニングに役立つようにする方法がわかりません。
アレックスI

どの「それ」を試しましたか?私の唯一のポイントは、検索エンジンは、あなたが想像するより多くの役に立つことができることである
shadowtalker

また、「AとCのネットワーク出力は高いが、Bは低い。これはもっともらしい」という意味がわからない。あなたは多くのAsとCsを予測しているが、Bsはほとんどいないということですか?あなたがそう考える実質的またはドメイン特別な理由がない限り、それは信じがたいする必要がありますなぜ私は表示されません
shadowtalker

また、「1 1 0」のような出力がどのように得られるかもわかりません。ここで用語に関する混乱があると思います。累積的な順序の結果について説明していますか?累積ロジットモデルのように?
シャドウトーカー

回答:


15

KK

しかし、いくつかの人々はあなたの序数クラスのための巧妙なエンコーディングを発明することに成功しました(このstackoverflowの回答を参照してください)。これは一種のワンホットエンコーディングです。

  • クラス1は[0 0 0 0 ...]として表されます

  • クラス2は[1 0 0 0 ...]として表されます

  • クラス3は[1 1 0 0 ...]として表されます

P(y^<k。アクティベーション関数としてシグモイドを使用する必要がありますが、これはネットワークがクラ​​ス間のある程度の連続性を理解するのに役立つと思います、私は知りません。その後、後処理を行います(np.sum)を実行して、バイナリ出力をクラスに変換します。

この戦略はFrankとHallのアンサンブルに似ており、私はこれがそのような最初の出版物だと思います。


このアプローチは、はるかに魅力的です。予測モードを使用してこれを分類問題に変えることは良い考えではないことを理解することが重要です。予測された累積確率は、予測された個々の確率に変えることができるため、最終決定を行うためのユーティリティ関数は、ユーティリティが知られているずっと後に挿入できます。fharrell.com/post/classificationを参照してください。
フランクハレル

1
@RicardoCruz-うーん、それは私が提案したものによく似ています:「Aに1 0 0、Bに1 1 0、Cに1 1 1」。それが機能することを知っているのは良いことです!また、2007年からの論文でした。このアイデアは長い間存在していました
アレックスI

ええ、その論文を見つけたとき、私は自分自身を驚かせました!
リカルドクルス

注:「順序回帰へのニューレルネットワークアプローチ」で述べたように、「...出力ノードに独立したシグモイド関数を使用しても、単調な関係(o1> = o2> = ....> = oK)は保証されません。必要ではありませんが、予測を行うために望ましいものです。」したがって、予測時に「np.sum」を実行するだけでは最適な方法ではありません。
sccrthlt

1
上記の私のコメントを編集してください:ニューラルネットワークの出力で「np.sum」を実行するのは誤解を招きます。出力ベクトルが[0 1 0 1 0]の場合、次の状況が発生する可能性があります。このベクトルで加算を実行すると、実際にはニューラルネットワークが不明な場合、クラス予測が2になります。
sccrthlt
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.