0

ロジスティック回帰を使用して映画の興行収入を予測します。俳優や監督を含むいくつかの列車データを取得しました。これは私のデータです:

Director1|Actor1|300 million
Director2|Actor2|500 million

整数を使用して監督と俳優をエンコードします。

1|1|300 million
2|2|300 million

それはそれを意味しX={[1,1],[2,2]} y=[300,500]、それfit(X,y) は機能しますか?

4

1 に答える 1

6

そのような線形回帰ではカテゴリ変数を使用できません。線形回帰は、すべての変数を数値変数のように扱います。したがって、Director1 を 1 としてコーディングし、Director2 を 2 としてコーディングすると、線形回帰はそのコーディング スキームに基づいて関係を見つけようとします。Director2 は Director1 の 2 倍のサイズであると仮定します。実際には、これらの数字は何の意味もありません。それらを 143 および 9879 としてコーディングしても、違いはありません。数値的な意味はありません。線形回帰がそれらを正しく処理することを確認するには、ダミー変数を使用する必要があります。

ダミー変数を使用すると、カテゴリ レベルごとに変数があります。たとえば、取締役が 3 人いる場合、変数は D1、D2、D3 の 3 つになります。対応する映画が Director1 によって監督された場合、D1 の値は 1 になり、それ以外の場合は 0 になります。映画が Director2 によって監督された場合、D2 の値は 1 になり、それ以外の場合は 0 になります。したがって、一連の値 D2 D1 D2 D3 D1 D2 を使用すると、ダミー変数は次のようになります。

    D1 D2 D3
D2  0  1  0
D1  1  0  0
D2  0  1  0
D3  0  0  1
D1  1  0  0
D2  0  1  0

線形回帰では、多重共線性を避けるために、カテゴリの数 (この例では取締役の数) でn-1あるこれらの変数のみを使用します。nディレクターの 1 人がベースとして選択され、回帰モデルの定数で表されます。どちらでも構いません。たとえば、D3 を除外すると、 と の場合、映画が Director3 によって監督されたことがわかりD1=0ますD2=0。を指定する必要はありませんD3=1

scikit-learn では、この変換はOneHotEncoderで行われます。例は、scikit-learn のドキュメントからのものです。

性別、地域、閲覧者の 3 つのカテゴリ変数があります。性別には 2 つのレベルがあります: ["male", "female"]、地域には 3 つのレベルがあります:["from Europe", "from US", "from Asia"]およびブラウザには 4 つのレベルがあります: ["uses Firefox", "uses Chrome", "uses Safari", "uses Internet Explorer"]。それらがゼロベースの数字でコード化されていると仮定します。So[0, 1, 2]は、Safari を使用している米国出身の男性を意味します。

>>> enc = preprocessing.OneHotEncoder()
>>> enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])  
OneHotEncoder(categorical_features='all', dtype=<... 'float'>,
       handle_unknown='error', n_values='auto', sparse=True)
>>> enc.transform([[0, 1, 3]]).toarray()
array([[ 1.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  1.]])

enc.fitscikit-learn を使用すると、各変数のレベル数が推測されます。[0, 1, 3] のような観測の場合、呼び出すenc.transformとダミー変数が表示されます。結果の配列の長さは 2 + 3 + 4 = 9 であることに注意してください。最初の 2 つは性別 (男性の場合、最初の 1 は 1)、次の 3 つは地域などです。

于 2016-05-10T16:41:07.843 に答える