回帰(Regression)


指導学習について、問題は分類と回帰問題の2種類に分けられる.
  • 分類入力データの特性(特徴)を用いて当該データの種別(ラベル)
  • を推定する.
  • は、入力データの特性(特徴)により他の関連データの正確な値
  • を推定することに復帰する.
    分類では,クラスに対する推定問題であるため,出力値はクラスに対する確率であり,回帰では出力値は従属変数に対する予測値である.簡単に言えば、数値値を回帰出力し、文字値を分類出力する

    回帰解析とは


    回帰解析(Regression Analysis)は,依存変数に対する独立変数の影響を理解し,独立変数の一定値に対応する依存変数値の予測モデルを算出する方法である.

    独立変数バー


    実験で実験者が直接変更した変数は,数学ではxxxで表される.

    従属変数とは


    独立変数の値変化に応じて変化する変数は,数学的にyyで表される.

    y=ax+by=ax+by=ax+by=ax+bでよいと考えられています。これは線形回帰において単純な線形回帰解析と呼ばれ、独立変数が多い場合、y=a 1 x 1+a 2 x 2+a 3 x 3+引数+anxn+by=a 1 x 1+a 2 x 2+a 3+点+a nx n+by=a 1 xx 1+a 3+a 3+a 3+a+a+a+a+a+a+axn+bのような方程式を多重線形回帰解析と呼ぶ。


    簡単に言えば,独立変数の因果関係を把握する解析と考えられる.
    これは,データに基づいて連続型変数間の関係をモデリングし,その適合度を測定する解析法である.
    簡単な例を挙げる.
  • 親の身長と子供の身長の関係
  • 自動車規格による価格予測
  • 一人当たりの国民所得と排ガス排出量の関係予測
  • せんけいかいきかいせき


    線形回帰解析は回帰解析の代表といえ,基本中の基本である.名前の通り、線形回帰は、従属変数と1つ以上の独立変数との間の線形相関関係をモデリングする回帰解析法である.
    上述したように、線形回帰式はy=ax+by=ax+by=ax+b、aaaは回帰係数、bbbは従属変数および独立変数の誤差を表すことができる.これらの値は、データから推定する必要があるパラメータです.
    操作手順は次のとおりです.
  • x、yx、yx、yデータがある場合、これらのデータからa、ba、ba、bは
  • と推定する.
    推定値
  • に基づいてモデリング
  • このモデルを使用してxxx値を入力し、yyy値
  • を予測する.

    要するに,所与のデータをモデリングする線形表現において適切な回帰係数および誤差を求める.


    機械学習における線形回帰モデル表現


    機械学習では,線形回帰モデルは他の変数値で表される.
    H=Wx+bH = Wx + bH=Wx+b
    HHは仮定であり,WWは重み付けであり,bbbは偏向である.
    変数だけが異なり、解の値と順序は同じです.

    誤差と残差


    誤差はよく知られている言葉ですが、残差は見慣れない用語かもしれません.誤差と残差を比較し,差異(誤差と残差は全く異なる値)を理解する.
    結論から言う.
  • 誤差:募集団の回帰予測値-実績データ値
  • 残差:サンプルグループの回帰推定値-実際のデータ値
  • 簡単に言えば、誤差と残差は募集団を基準とするか、サンプル集団を基準とするか、誤差と残差の違いである.
    残差は,回帰モデルを用いて推定した値と実際のデータ値との差であり,例えば線形回帰モデルの式y=2 x+3 y=2 x+3 y=2 x+3,実際のデータは(3,10)である.(10=実データ値、9=線形回帰モデルの予測値)
    これらの残差を用いてデータをよく記述できる回帰モデルを探す方法の1つは최소제곱법である.
    最小二乗法
  • ∑i=1nresidual2\displaystyle\sum_{i=1}^{n} residual^2i=1∑n​residual2
  • ∑i=1n(yi−f(xi,β)2\displaystyle\sum_{i=1}^{n}(y_i - f(x_i,\beta)^2i=1∑n​(yi​−f(xi​,β)2
  • f(xi,β)=axi+bf(x_i,\beta) = ax_i + bf(xi​,β)=axi​+b
  • β\betaβ 定数
  • 上記式では、n個の入力データに対して、β\betaβ 値を求めればいい.
    リファレンス
  • さいしょうへいきんほう
  • 最小平方-ウィキペディア
  • 最小二乗法のような回帰係数の関数を求め,損失関数と呼ぶ.
    損失関数はいろいろありますが、今回は最小二乗法のみ
    また,回帰モデルが正しいかどうかを決定する際,参照する指標には決定係数(R−squaredまたはR 2 score)がある.これは0から1の間の値を表し,1に近づくほど回帰モデルはデータをよりよく表現できる.
    募集団と標本グループ
  • 募集団:情報を取得したいすべての人または集合
  • サンプル群:募集団により抽出された募集団の一部集合
  • 例えば、20代男性と30代男性の身長を比較すると、募集団は20代男性と30代男性の全体的な身長になる。実際、20~30代の男性は身長を測るのが難しいため、2つの募集団の中から約1000人を抽出して比較することができる。このとき、1000人ずつが募集団を代表する標本群だそうです。


    チェックコード


    実際のコードで線形回帰をチェックしましょう.
    Bostonデータセットを用いて各特性(特徴)の線形回帰モデルを解き,そのモデルの決定係数を調べた.
    from sklearn.datasets import load_boston
    from sklearn.model_selection import train_test_split
    import pandas as pd
    import numpy as np
    
    boston = load_boston()
    data, price = boston['data'], boston['target']
    x_train, x_test, y_train, y_test = train_test_split(data, price, test_size=0.2, random_state = 10)
    
    df = pd.DataFrame(x_train, columns=boston['feature_names'])
    print("boston dataset의 차원 : ", data.shape)
    print("price의 차원 : ", price.shape)
    print("boston train dataset의 차원 : ", x_train.shape)
    print("boston test dataset의 차원 : ", x_test.shape)
    
    print("Boston dataset의 예시")
    df.head()
    出力値をチェックします.Bostonデータセットは506行、13個のフィーチャーで構成されています.
    私たちが推測する答え(label)は価格で価格に保存されています.
    各プロパティの情報は次のとおりです.
    print(boston["DESCR"])
    確認したら、それぞれの特性の説明が出てきます.
    Boostonデータセットに線形回帰を適用するようになりました.
    import pandas as pd
    from sklearn import datasets
    from sklearn.model_selection import train_test_split
    from sklearn.linear_model import LinearRegression
    from sklearn import metrics
    import matplotlib.pyplot as plt
    
    fig = plt.figure(figsize=(10,35))
    fig.suptitle('Boston dataset = (X:Y = each attr: price) with R2', fontsize=16, y=0.9)
    
    # boston dataset에서 i번째 attribute(column) 확인하기
    for i in range(data.shape[1]):
        # i번째 attribute에 대한 data 및 이름
        single_attr, attr_name = data[:, i].reshape(-1, 1), boston['feature_names'][i]
        # 선형회귀모델
        estimator = LinearRegression()
    
        # x에 single_attr, y에는 price에 해당하는 데이터 대입 최소제곱법을 사용해 W, b 구하기
        estimator.fit(single_attr, price)
    
        # fit으로 구한 회귀계수 기반 회귀모델이 X값 대입했을 때 예측한 Y값 확인
        pred_price = estimator.predict(single_attr)
    
        # 결정계수 구하기
        score = metrics.r2_score(price, pred_price)
    
        # 그래프 그리기
        graph = fig.add_subplot(7, 2, i+1)
        graph.scatter(single_attr, price) # 실제 데이터 산포도
        graph.plot(single_attr, pred_price, color='red') # 선형회귀모델 추세선
        graph.set_title("{} x price, R2 score={:.3f}".format(attr_name, score))
        graph.set_xlabel(attr_name)
        graph.set_ylabel('price')
    13個の属性ごとにグラフが描かれています.13では,決定係数(R 2 score)の高いLSTAT,RMで描かれた線形回帰モデルを用いてデータを良く説明できる.

    ろんりかいふく


    日常生活では、2つの選択肢から正解を選ぶ必要がある質問がたくさんあります.たとえば、メールボックスの分類がスパムなどの問題で、「はい」または「いいえ」のどちらかを選択する必要がある問題がたくさんあります.このように,両者の1つを決定する問題をバイナリ分類と呼ぶ.
    論理回帰はバイナリ分類を解決する古典的なアルゴリズムである.
    論理回帰解析は,あるカテゴリにデータが属する確率を0から1の間の値と予測し,確率に基づいて分類する指導学習アルゴリズムである.
    論理回帰解析において最も適切な関数は信号関数である.

    しんごうかんすう


    信号関数は、出力値が0~1のS字型の関数です.下図に示します.

    オズビー


    信号関数はオズ比(obersity ratio)を統計的に確立した関数である.
    オズ比は成功確率と失敗確率の比の統計であり,以下にまとめる.


    pが0から1に増加すると,オズ比は緩やかに増加し,pが1に近づくと急激に増加した.

    ろんりかんすう


    Ozbyログから作成した関数を論理関数(Logit Function)と呼びます.


    ロッグ関数はpが0.5のとき0,pが0,1のとき無限大に近い.
    縦軸をz,横軸をpとすると,確率pが0から1になると,zは非常に大きな負数から非常に大きな正の値になると考えられる.表現は以下の通り.

    ろんりかんすう


    上の式をzに整理し,次の式を導いた.(zを整理するのは、zを横軸に置くためです)


    信号関数はグラフィックで描画する場合,ロッグ関数では横軸と縦軸の反対の反転形状でS字形を呈する.この形状のため、信号関数とも呼ばれる.

    チェックコード


    乳がんデータセットを使ってLogistic回帰分析の例を見てみましょう
    from sklearn.datasets import load_breast_cancer
    from sklearn.model_selection import train_test_split
    import pandas as pd
    
    # 데이터 로드
    cancer = load_breast_cancer()
    
    cancer_data, cancer_target = cancer.data, cancer['target']
    
    # 데이터 분류 y가 0일때 악성 종양, 1일때 양성 종양
    x_train, x_test, y_train, y_test = train_test_split(cancer_data, cancer_target, test_size=0.2, random_state=10)
    print("전체 검사자 수 : ", len(cancer_data))
    print("특성 수 : ", len(cancer_data[0]))
    print("Train dataset에 사용되는 검사자 수 : ", len(x_train))
    print("Test dataset에 사용되는 검사자 수 : ", len(x_test))
    cancer_df = pd.DataFrame(cancer_data, columns=cancer['feature_names'])
    cancer_df.head()
    データは準備ができています.ロジャーズ回帰解析モデルに適用しましょう.
    from sklearn.linear_model import LogisticRegression
    from sklearn.metrics import classification_report
    
    lr = LogisticRegression()
    lr.fit(x_train, y_train)
    lr_pred = lr.predict(x_test)
    
    # 회귀분석 모델 예측값과 실제값 비교
    print(classification_report(y_test, lr_pred))

    ロジスティックの復帰は復帰ですか?、分類ですか?


    ロジスティック回帰名前は回帰ですが、さっき使用した例は乳がんデータセットのバイナリ分類の問題です.
    論理回帰は正しい.線形回帰方式を分類アルゴリズムに適用するだけである.
    論理回帰は,非独立変数の重み付けが線形であるか否かに基づいて回帰の線形と非線形を決定する.一般的な回帰モデルは誤差二乗和(SSE)の最小の回帰線を探すが,Logistic回帰解析は信号関数を探す最適線であり,信号関数の戻り値を確率として分類する.
    論理回帰は確率が分類問題に近い核心思想を提供するので、覚えておいたほうがいい.