前の3回の記事では、我々はk最近傍アルゴリズムを使用して機械学習における分類を説明します。
一般的には、分類(分類)と回帰(回帰)は、機械学習における問題の二つの主要なカテゴリです。出力への入力の変換-実際に、彼らは同じことをやっています。相違点は、分類の出力は、癌および悪性(1)の発行に先立って、そのような良性(0)などの離散値を得られることであり、得られた回帰出力値が連続しています。
この記事では、戻りの問題を議論するために開始されます。私たちは、最も単純なものから線形回帰が開始されます。
1.線形回帰の概念
いわゆる線形回帰は、指定された引数について予測任意の値が与えられる引数の線形関数です。それは非常に簡単で、かつ特定の問題バック、バックグラウンドで非常に良い効果を再生することができます。
のは、(また、単純な線形回帰として知られている)回帰線形1元を検討してみましょう。
我々は、一般的な一次線形関数の式があることを知っています:
機械学習のために、データは直線で完全に自然にすることはできません。これに関連して、データがそれを予測することは、私たちは、このような直線を取り付けることができるかどうか、ほぼ線形分布である場合には?当然の答えは、我々は考慮する必要があり、これは直線を適合させるために使用を決定する方法である、イエスです。
実際には、それがデータポイントのセット近似線形与え、想像するのは簡単ですが、我々はこれらの点に近づくことができるラインの無数を持っています。だから、どのように我々はそれらを評価し、我々はそれについて考える最も適切なものを選択するのですか?
直感的に、我々は、データポイントが直線の両側にできるだけ均等に分散されているしたいです。より深い分析は、そうすることの目的は、可能な限りデータ点と直線との間の距離を低減することです。より長い距離なので、平均誤差がある可能性が高いです。したがって、我々は、回帰直線の長所と短所を測定するために直線で全てのデータ点間の距離の使用を検討してください。
2.最小二乗法
2.1損失とリスク
パート1は、我々は機能を構築します 。私たちは、この機能は、上記の線形回帰と呼ばれる呼び出す二次損失関数。
何が損失関数は?
損失関数は真値と個々のサンプルの予測値との誤差の程度を記載します。モデル予測の品質を測定するために使用されます。
四一般的に使用される損失関数:
- (分類のために使用される、0に設定された分類精度、分類エラーを取る)0-1損失関数
- 二次損失関数(すなわち、予測値と真の値全ての差分の二乗)
- 絶対的な損失関数(すなわち、すべての予測値の絶対値と真値との差)
- 対数損失関数(思考の最尤推定値を使用して、特定の参照https://www.cnblogs.com/klchang/p/9217551.htmlを)
通常、損失の関数として記録単一のデータ・ポイントのため。だから、全体へのローカルから、それはにつながるリスク関数コンセプト。
知られているリスク関数、期待されるリスクは、関数の予想損失を指します。
特定のトレーニングデータセットの下で、我々は、データセットの分布を知らない、希望を計算する方法はありません、我々は唯一の平均を計算することができます。私たちは、この平均と呼ばれるリスクの経験。
知られているERMモデル、最適なモデル。
確率論と数理統計学を教えて、あなたは期待のおおよその分布を推定するためのサンプルの平均を使用することができます。しかし、小さなサンプルサイズは、状況をオーバーフィットがあるかもしれません。したがって、我々はとして知られているリスクの経験、後に(ペナルティの)正則化項を追加した構造リスク。代わりに、リスクのリスク構造を持つ経験は、うまくフィット持っていた問題を回避することができます。
次に、我々は正式に最小二乗法を導入することができます。
最小二乗2.2方法
いわゆる最小二乗法は、必要となる 最小の方法。(イタリアの平方二乗)
線形回帰は、我々は最小二乗法により算出される値aとbのタイプに最も時間を作りたいです。
、極値偏導関数、我々が必要とする可能性のある値の即ち最適値とbの零点である偏微分のAおよびB。次のように最終的な結果は以下のとおりです。
詳細な導出はより複雑であり、本明細書中で展開していない、参照https://www.cnblogs.com/code-juggler/p/8406449.html
3.コードの実装
第二部では、最適値が最小二乗法により、単純な線形回帰係数が導出された有します。その結果、我々のコードの実装は非常に簡単です。
1 x_mean = np.mean(X) 2 y_mean = np.mean(Y) 3 4 NUM = 0.0 5 D = 0.0 6 ため X_I、Y_I にジッパー(X、Y): 7 NUM = NUM +(X_I - x_mean) *(Y_I - y_mean) 8 、D = D +(X_I - x_mean)** 2 9 A = NUM / D 10 B = y_mean - * x_mean
私たちは、ループ、aとbの計算値を使用します。xの任意の値が要件を満たすためにこのように、我々は、回帰予測のY = AX + B yの値を使用することができます。
しかし、我々は実際には、2つのベクトルの積の数として表すことができ、上記の操作を行っています。製品番号を算出し、大幅に計算時間を短縮することができます。このように、我々は我々の計算プロセスを最適化するために、ドットnumpyのライブラリ関数を使用し、その後、ベクターを構築することができます。
我々の見解では、製品計算の数は、巡回加算とベクトル演算を直接使用することは、まったく同じプロセスであるために見えますが、実際には、製品の動作サイクルの数は、我々は合計を考えた場合ではなく、特性行列の最適化を使用するが、操作。したがって、効率はループ(特に特に大きなデータセット)のための私達の直接の構成よりもはるかに高くなります。
4.複数の線形回帰
各データポイント上記線形回帰である唯一の入力変数線形回帰です。
実際には、(そのような癌の発見の時間、大きさの癌のような)複数の入力変数があるとき、我々はまた、線形回帰を実行することができます。これは、複数の線形回帰。
簡単に形成するために、我々は、直接データセットを表すために行列表記法を使用します。行列X- Bは、入力データセットを表し、各列ベクトルは各インデックスのデータポイントを表し、列ベクトルの各インデックス値は、すべてのデータポイントを表します。ベクターは、θ =(θ 1、θは2、θが3、...、θはN-)我々は、線形回帰関数を必要とする係数です。我々は= Y-を線形回帰関数を構築X-用・θは 、プロセスは、実際には、リスク機能を発見している(| Y - 、θ・X-のB)T ・(θは・X-のB)|最小のベクトル、θ。
結果は以下の通りであります:
私たちは、その導出を知っている必要はありません。この結果は直接、我々は我々が必要とする回帰式を得ることができます。