なぜ回帰を通じて分類にアプローチしませんか?


51

機械学習で見た資料のなかには、回帰を通じて分類問題にアプローチするのは悪い考えだというものがありました。しかし、連続回帰を実行してデータを近似し、連続予測を切り捨てて離散分類を生成することは常に可能であると思います。それで、なぜそれは悪い考えですか?


私は、回帰はいつもより多くの本番環境での分類よりも複雑だと思う

回答:


57

「回帰による分類問題へのアプローチ..」「回帰」によると、線形回帰を意味すると仮定し、このアプローチをロジスティック回帰モデルに適合させる「分類」アプローチと比較します。

これを行う前に、回帰モデルと分類モデルの区別を明確にすることが重要です。回帰モデルは、降雨量や日光強度などの連続変数を予測します。また、画像に猫が含まれる確率など、確率を予測することもできます。確率予測回帰モデルは、決定ルールを課すことにより分類子の一部として使用できます。たとえば、確率が50%以上の場合、それは猫だと判断します。

ロジスティック回帰は確率を予測するため、回帰アルゴリズムです。ただし、一般的に機械学習の文献では分類方法として説明されています。分類器を作成するために使用できる(多くの場合)ためです。結果のみを予測し、確率を提供しないSVMなどの「真の」分類アルゴリズムもあります。ここでは、この種のアルゴリズムについては説明しません。

分類問題の線形回帰とロジスティック回帰

Andrew Ngが説明しているように、線形回帰ではデータを通して多項式を当てはめます。たとえば、次の例のように、{腫瘍サイズ、腫瘍タイプ}サンプルセットを通して直線を当てはめています。

ここに画像の説明を入力してください

上記では、悪性腫瘍は、非悪性腫瘍は取得し、緑の線は仮説です。予測を行うために、与えられた腫瘍サイズについて、がを超えた場合、悪性腫瘍を予測し、そうでなければ良性を予測すると言うことができます。10h(x)xh(x)0.5

このように見えるため、すべてのトレーニングセットのサンプルを正しく予測できますが、タスクを少し変更してみましょう。

直観的には、特定のしきい値を超えるすべての腫瘍が悪性であることは明らかです。それでは、巨大な腫瘍サイズを持つ別のサンプルを追加して、線形回帰を再度実行しましょう。

ここに画像の説明を入力してください

これでは機能しなくなりました。正しい予測を行い続けるには、または何かに変更する必要がありますが、それはアルゴリズムの動作方法ではありません。h(x)>0.5malignanth(x)>0.2

新しいサンプルが到着するたびに仮説を変更することはできません。代わりに、トレーニングセットのデータから学習し、(学習した仮説を使用して)以前に見たことのないデータの正しい予測を行う必要があります。

これが線形回帰が分類問題に最適ではない理由を説明することを願っています!また、VIを見ることもできますロジスティック回帰。ml-class.orgの分類ビデオで、アイデアをさらに詳しく説明しています。


編集

potentialislogicは、優れた分類器が何をするかを尋ねました。この特定の例では、おそらく次のような仮説を学習する可能性のあるロジスティック回帰を使用します(これは単に構成しています)。

ここに画像の説明を入力してください

線形回帰ロジスティック回帰はどちらも直線(または高次の多項式)を提供しますが、これらの線の意味は異なることに注意してください。

  • h(x)線形回帰のは、出力を補間または外挿し、見たこともないの値を予測します。新しいを接続して生の数字を取得するようなもので、{car size、car age}などに基づいて車の価格を予測するなどのタスクにより適していますxx
  • h(x)ロジスティック回帰のは、が「ポジティブ」クラスに属する確率を示します。これが回帰アルゴリズムと呼ばれる理由です-連続的な量、確率を推定します。ただし、確率にしきい値など)を設定すると、分類子が得られます。多くの場合、これはロジスティック回帰モデルからの出力で行われます。これは、プロットに線を引くことに相当します。分類線より上にあるすべてのポイントは1つのクラスに属し、下のポイントは他のクラスに属します。xh(x)>0.5

だから、一番下の行は、分類のシナリオでは、我々が使用していることである完全に異なる推論と完全に異なる回帰シナリオよりもアルゴリズムを。


@andreister:しかし、すべての外れ値が削除または切り捨てられた場合、線形回帰は依然として悪い考えですか?
トメックタルチンスキ

あなたの例は良いですが、「良い分類器」が何をするかを示していません。これを追加できますか?データポイントを追加すると、ほぼすべての方法で行が変更されることに注意してください。なぜこれが悪い変化なのか説明していません。
確率の

1
@andreister:あなたの例は、いくつかの悪いデータが線形回帰を損なうかもしれないことを示しました。しかし、二次回帰またはさらに複雑な仮説を使用して、「回帰」を優れた分類器にすることはできますか?
ストリン

1
@probabilityislogic-良い点、答えを更新しました。
アンドレイスター

2
@Strin:より複雑な仮説は、データをオーバーフィットする可能性が高くなります。(つまり、手元にあるデータの癖に合わせて、将来のデータにはあまり当てはまらないことになります。)最前列の男が教授が私たちを遠慮していると確信していたクラスを覚えています電力市場で私たちを殺すことができるような洗練されたアルゴリズムを私たちに与えていない...彼は過剰適合を本当に理解しなかった。
ウェイン

14

分類が実際に最終的な目標である例を考えることはできません。ほとんどの場合、本当の目標は、確率などの正確な予測を行うことです。その精神では、(ロジスティック)回帰はあなたの友人です。


5
何である私には思える効果的な分類は、最終的に人間の介入や判断力を持ってすることは非現実的または不可能であるほとんどすべて自動化されたプロセスでの目標です。受信、たとえば、ノイズの多いデジタル信号を送信するとき、受信機は、特定のビットは、0.97の代わりに、0または1であることを決めることができない
カーディナル

6
偽陽性のコストまたは偽陰性のコストが分類を行ったアナリストの管理下にあることはめったにないため、元のアナリストは分類のための「正しい」カットポイントを確実に選択することはできません。さらに、分類が行われず、推奨事項が「より多くのデータを取得する」という中間リスクの「グレーゾーン」を持つことが賢明です。
フランクハレル

1
私はこの答えの主張の正反対を信じており、機械学習の大学教育全体でこの視点に出会ったことはないと思います。誰かがこれを言うのは私にとって非常に驚くべきことです。実際には、ほとんどの場合、人々は連続量を予測したいと思うが、実際にはその量の異なるカテゴリバケットのメンバーシップを予測したいという問題に直面しています。実際に連続量を予測することが、問題の根底にある実質的な推論の観点から有用である事例を見つけるのに苦労しています。
エリー

9
機械学習の教義を十分に理解していると思います。多数の不当な仮定を行っています。それらの1つは、人々がカテゴリバケットへの強制的な選択を実際に必要とすることです。彼らはこれを望んでいると主張するかもしれませんが、ほとんどの状況で本当にこれを必要としません。選択を強制する必要はありません。最適な選択は、「決定なし、より多くのデータを取得」です。通常、基礎となる連続量の予測が必要です。最適な(ベイズ)決定理論を研究することは、あなたにとってしばらく価値があるでしょう。具体的な例を提供できる場合は、さらにコメントします。
フランクハレル

11
@Frank Harrellのコメントの+1。たとえば、気温、降雨量、河川の水位を予測することは、暑い、湿っている、または洪水になるという予測よりも非常に役立ちます。問題が羊やヤギであったとしても?pr(sheep)の推定値は、バイナリの「羊」または「ヤギ」よりも有益です。
ニックコックス

1

いくつかの証拠を見てみませんか?多くの人が線形回帰は分類に適さないと主張しますが、それでも機能する可能性があります。直感を得るために、scikit-learnの分類子の比較に線形回帰(分類子として使用)を含めました。ここで何が起こるかです:

ここに画像の説明を入力してください

決定境界は他の分類器よりも狭くなりますが、精度は同じです。線形サポートベクトル分類子と同様に、回帰モデルは特徴空間でクラスを分離する超平面を提供します。

ご覧のように、分類子として線形回帰を使用することはできますが、いつものように、予測を相互検証します。

記録のために、これは私の分類子コードがどのように見えるかです:

class LinearRegressionClassifier():

def __init__(self):
    self.reg = LinearRegression()

def fit(self, X, y):
    self.reg.fit(X, y)

def predict(self, X):
    return np.clip(self.reg.predict(X),0,1)

def decision_function(self, X):
    return np.clip(self.reg.predict(X),0,1)

def score(self, X, y):
    return accuracy_score(y,np.round(self.predict(X)))


0

さらに、2変量を超える分類タスクの場合、すでに適切な回答を展開するには、回帰を使用して、クラス間に距離と順序を課す必要があります。言い換えると、クラスのラベルをシャッフルするか、割り当てられた数値のスケールを変更するだけで、異なる結果が得られる可能性があります(たとえば対とラベル付けされたクラス) 、分類問題の目的に反します。1,10,100,...1,2,3,...

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