[ミキシングマー]ロジスティック回帰



  • ろんりかいふく
    これは線形方程式を用いた分類アルゴリズムである.クラス確率は、信号関数またはソフトMax関数を使用して出力できます.


  • マルチカテゴリ
    ターゲットクラス2つ以上の分類問題.Logistic回帰はソフトMax関数を用いてクラスを多分類予測する.

  • しんごうかんすう
    バイナリ分類に使用し、線形方程式の出力を0~1の値に圧縮します.

  • ソフトMax関数
    多重分類に用い,複数の線形方程式の出力結果を正規化し,和を1とする.

  • LogisticRegression
    これは線形分類アルゴリズムrogestics回帰のためのクラスである.

  • predict_proba()
    予測確率を返します.

  • decision_function()
    モデル学習の線形方程式の出力を返します.
    バイナリ分類であれば、陽性カテゴリの確率を返します.
    多重分類の場合,各クラスは線形方程式を計算し,最大値のクラスが予測クラスとなる.
  • 
    import pandas as pd
    
    fish = pd.read_csv('https://bit.ly/fish_csv')
    fish.head()
    
    print(pd.unique(fish['Species']))
    
  • pd.unique()を使用して種の固有値を出力する(set概念?)
  • には7種がある.
  • fish_input = fish[['Weight','Length','Diagonal','Height','Width']].to_numpy()
    fish_target = fish['Species'].to_numpy()
    
    
  • 入力とtargetはnumpy配列
  • として格納.
    
    from sklearn.model_selection import train_test_split
    
    train_input, test_input, train_target, test_target = train_test_split(
        fish_input, fish_target, random_state=42)
    
    from sklearn.preprocessing import StandardScaler
    
    ss = StandardScaler()
    ss.fit(train_input)
    train_scaled = ss.transform(train_input)
    test_scaled = ss.transform(test_input)
    
  • データ分離とデータ標準化
  • 1.k最近接分類器の確率予測

    
    from sklearn.neighbors import KNeighborsClassifier
    
    kn = KNeighborsClassifier(n_neighbors=3)
    kn.fit(train_scaled, train_target)
    
    print(kn.score(train_scaled, train_target))
    print(kn.score(test_scaled, test_target))
    
    print(kn.classes_)
    
  • KNEIghborsClassifierでソートされたターゲット値はclassのプロパティに
  • 格納されます.
  • 印刷(pd.unique(fish[「species」)の順序が異なり、アルファベットは
  • にソートされます.
    
    
    print(kn.predict(test_scaled[:5]))
    
  • 最初の5つのサンプルの目標値について
  • を予測する.
    import numpy as np
    
    proba = kn.predict_proba(test_scaled[:5])
    print(np.round(proba, decimals=4))
    
  • predict probaを使用して、各レベルの確率を表示します.
  • 行:5つの例/列:各クラス
  • np.round(pre,decimals=4)は小数点以下で5番目から4番目の位置に切り捨てられる.
  • distances, indexes = kn.kneighbors(test_scaled[3:4])
    print(train_target[indexes])
    
    待って!
  • n隣接=最も近い3つの隣接を使用し、確率は0、1/3、2/3、および1のみです.
  • Logistic回帰を用いて連続確率
  • を表す.

    2.Logistic回帰(バイナリ分類)

  • 名は回帰可能ですが、分類には
  • を使用します.
    bream_smelt_indexes = (train_target == 'Bream') | (train_target == 'Smelt')
    train_bream_smelt = train_scaled[bream_smelt_indexes]
    target_bream_smelt = train_target[bream_smelt_indexes]
    
  • bream smelt indexes配列は、多メートルおよび氷魚の場合trueであり、その他はfalseの値を含む.
  • bream summet indexesの配列を使用して、train scaleとtrain targetの中から鯛と氷魚だけを選ぶことができます.
  • from sklearn.linear_model import LogisticRegression
    lr=LogisticRegression()
    lr.fit(train_bream_smelt,target_bream_smelt)
    
    print(lr.predict(train_bream_smelt[:5]))
    print(lr.predict_proba(train_bream_smelt[:5]))
    
  • 第1列:音声カテゴリパーセント(bream)
  • 第2列:陽性カテゴリのパーセント(smelt)
  • print(lr.coef_,lr.intercept_)
    
    
    decisions = lr.decision_function(train_bream_smelt[:5])
    print(decisions)
    
  • train bream spermの5サンプルのz値
  • 
    from scipy.special import expit
    print(expit(decisions))
    
  • の間で、パイライブラリから信号関数を読み込み、z値を加えると、その確率に変換できます.
  • から出力値を見るとpredict probaの2列目の確率と同じ
  • である.
  • decision function()は、陽性クラスのz値を返します.
  • 3.論理回帰(多分類)

    
    lr=LogisticRegression(C=20,max_iter=1000)
    lr.fit(train_scaled,train_target)
    print(lr.score(train_scaled,train_target))
    print(lr.score(test_scaled,test_target))
    
  • ロジス回帰は基本的に反復アルゴリズム(max iterに調整)
  • を採用する.
  • 論理回帰において、制御法規のパラメータはC(小さいほど法規が大きい)
  • である.
    print(lr.classes_)
    
    print(lr.predict(test_scaled[:5]))
    proba=lr.predict_proba(test_scaled[:5])
    print(np.round(proba,decimals=3))
    

  • 5つの例の予測(行)

  • 7匹の魚の確率(熱)

  • K近傍の確率は0,1/3,2/3,1離散)

  • 論理回帰二重分類では鯛と氷魚に対する確率のみが出力される)
  • print(lr.coef_,lr.intercept_)
    print(lr.coef_.shape,lr.intercept_.shape)
    
  • 多分類クラス別z値
  • 
    decisions=lr.decision_function(test_scaled[:5])
    print(np.round(decisions,decimals=2))
    
    from scipy.special import softmax
    proba=softmax(decisions,axis=1)
    print(np.round(proba,decimals=3))
    
  • バイナリ分類は信号関数を用い,多重分類はソフトMax関数を用いてz値を変換する.
  • axis=1を指定して、行ごとにソフトmaxを計算します.
  • 参考文献:混球機