このような線形回帰では、カテゴリ変数を使用することはできません。線形回帰は、数値変数のようなすべての変数を扱います。したがって、Director1を1、Director2を2と記述すると、線形回帰はそのコーディングスキームに基づいて関係を見つけようとします。 Director2はDirector1の2倍の大きさであると仮定します。実際には、それらの数字は何も意味しません。あなたは143と9879としてそれらをコードするかもしれませんが、違いはありません。彼らは数値的な意味を持っていません。線形回帰がそれらを正しく扱うためには、ダミー変数を使用する必要があります。
ダミー変数では、すべてのカテゴリレベルの変数があります。たとえば、3人の取締役がいる場合、3つの変数、D1、D2、D3があります。対応するムービーがDirector1によって指示された場合、D1は値1を、それ以外の場合は0を有する。映画はDirector2によって指示された場合、D2は、値1を持つことになり、そうでなければ0 ...値D2 D1 D2 D3 D1 D2のセットをので、あなたのダミーvariblesは次のようになります。線形回帰で
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を除外すると、D1=0
とD2=0
の場合、Director3によって監督された映画を知ることができます。 D3=1
を指定する必要はありません。
scikit-learnでは、この変換はOneHotEncoderで行われます。例はscikit-learnのものですdocumentation:
あなたには、性別、地域、ブラウザの3つのカテゴリ変数があります。性別は2レベル:["male", "female"]
、地域は3レベル:["from Europe", "from US", "from Asia"]
、ブラウザのレベルは["uses Firefox", "uses Chrome", "uses Safari", "uses Internet Explorer"]
です。それらがゼロベースの数でコード化されていると仮定してください。したがって、[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.fit
とすると、scikit-learnは各変数のレベル数を表します。 [0、1、3]のような観測の場合、enc.transform
を呼び出すと、ダミー変数が表示されます。結果として得られる配列の長さは2 + 3 + 4 = 9であることに注意してください。性別の最初の2つ(男性の場合は最初の1つ)、次の3つは領域のように続きます。
スカラーを予測しようとすると線形回帰かそれ以外のものでなければなりません。ロジスティック回帰は、y_hatがタイプAまたはBであることを示す予測子の集合を分類することです –
movie_revenueを使用してDirectorがDirector1かDirector2かを予測する可能性があります –
はい、線形回帰です! – KengoTokukawa