ニューラルネットワークでバイナリ入力と連続入力が混在する場合の対処方法


14

Rでnnetパッケージを使用して、コンドミニアム(個人プロジェクト)の不動産価格を予測するANNを構築しようとしています。私はこれに新しく、数学の背景を持っていないので、私と一緒に裸にしてください。

バイナリと連続の両方の入力変数があります。たとえば、元々はyes / noだった一部のバイナリ変数は、ニューラルネット用に1/0に変換されました。他の変数はのように連続していSqftます。

入力データのサンプル

すべての値を0〜1のスケールで正規化しています。たぶん、Bedrooms及びBathroomsその範囲のみであるため、正規化すべきではありません0-4?

これらの混合入力は、ANNに問題を引き起こしますか?私は大丈夫な結果を得ましたが、綿密な調査で、ANNが特定の変数に選択した重みは意味をなさないようです。私のコードは下にありますが、提案はありますか?

ANN <- nnet(Price ~ Sqft + Bedrooms + Bathrooms + Parking2 + Elevator + 
            Central.AC + Terrace + Washer.Dryer + Doorman + Exercise.Room + 
            New.York.View,data[1:700,], size=3, maxit=5000, linout=TRUE, decay=.0001)

更新: バイナリ入力を各値クラスの個別のフィールドに分割することに関する以下のコメントに基づいて、私のコードは次のようになりました。

ANN <- nnet(Price ~ Sqft + Studio + X1BR + X2BR + X3BR + X4BR + X1Bath
        + X2Bath + X3Bath + X4bath + Parking.Yes + Parking.No + Elevator.Yes + Elevator.No 
        + Central.AC.Yes + Central.AC.No + Terrace.Yes + Terrace.No + Washer.Dryer.Yes 
        + Washer.Dryer.No + Doorman.Yes + Doorman.No + Exercise.Room.Yes + Exercise.Room.No 
        + New.York.View.Yes + New.York.View.No + Healtch.Club.Yes + Health.Club.No,
    data[1:700,], size=12, maxit=50000, decay=.0001)

上記のコードの非表示ノードは12ですが、3〜25の範囲の非表示ノードを試しましたが、投稿された元のコードで上記の元のパラメーターよりも悪い結果が得られます。また、線形出力= true / falseで試しました。

私の推測では、バイナリ入力を適切に解釈していないため、データを別の方法でnnetにフィードする必要があります。それか、別のパラメーターを指定する必要があります。

何か案は?


1
ニューラルネットワーク入力としてバイナリデータまたはカテゴリデータを使用する標準的な方法は、フィールドをインジケーターベクトルに拡張することです。たとえば、値1、2、または3を取得できるフィールドがある場合、1は[1,0,0]、2-> [0,1,0]、および3-> [に展開されます0,0,1]。通常、実際の値の入力はそのまま保持されます。
user1149913

1
あなたがこれに言及した今、私は答えを探している間にどこかでこれを読んだことを思い出すようです。情報ソースはcsvファイルにあるので、実際には各バイナリ入力の新しいフィールドに対応する列を追加する必要がありますか?たとえば、寝室の入力範囲が0〜4の場合、上記の例を使用して4つの追加列(「0」の寝室はスタジオを意味するため合計5)を作成し、3BRコンドミニアムは0,0,0,1と表現されます。 、0?
ChrisArmstrong

回答:


8

この状況に対処する1つの方法は、入力の分散がほぼ同じスケールになるように入力を再スケーリングすることです。このアドバイスは一般に回帰モデリングに適用されますが、異なるスケールで測定された変数を含むすべてのモデリング状況に実際に適用されます。これは、バイナリ変数の分散が多くの場合、連続変数の分散とはまったく異なるためです。Gelman and Hill(2006)は、連続入力を2つの標準偏差で再スケーリングして、(スケーリングされていない)バイナリ入力と同等にすることを推奨しています。この推奨事項は、論文ブログ投稿にも反映されています。

ニューラルネットワークのより具体的な推奨事項は、「ダミーコーディング」(0および1)の代わりにバイナリ入力(つまり、-1および1)に「効果コーディング」を使用し、連続変数をセンタリングする追加の手順を実行することです。これらの推奨事項は、特に「バイナリ入力を0と1としてコーディングしないのはなぜですか?」というセクションのWarren Sarleによる広範なFAQに基づいています。「入力変数を標準化する必要がありますか?」ただし、要点は同じです:

入力の寄与は、他の入力と比較したその変動性に大きく依存します。

順序付けられていないカテゴリ変数については、バイナリインジケータに分解する必要あります。それ以外の場合は、単に意味がありません。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.