[TIL] Logistic Regression


Logistic Regression


Logistic regressionは回帰というが分類問題を解決する指導学習アルゴリズムモデルである.サンプルがカテゴリに属する確率を推定するために使用されます.

回帰vs分類


まず,回帰問題は予測する変数との関係でよく用いられる.回帰問題は連続変数を予測する.(ex.価格、身長、体重など)しかし連続変数を予測するのは難しいので、分類をよく使います.
分類問題は予測時に分類,予測離散(カテゴリ)データを多く用いる.このとき,データは主にバイナリ(バイナリ)を用いる.回帰と分類の違いは「予測したい」の違いにある.
例えば、映画評論については、映画評論は全部で5つの採点を与えることができます.分類問題の観点から、分類問題は一般的にバイナリ形式で使用されるため、精度は50%であり、5つの採点が可能な映画評論予測を分類したい場合、精度は20%に低下する.したがって,この場合,分類問題として解決する理由はないので,回帰で解決できる.

データセットの検証


Logistic Regressionは、検証データセットを使用します.トレーニングデータはモデルのフィッティングに使用され、検証データは予測エラーを測定して予測モデルを選択するために使用されます.また、スーパーパラメータ調整の効果を決定するために、データセットを検証する必要があります.
検証データは、トレーニングデータのみではモデルを完全に学習することは難しいため、検証データセットを使用してモデルがよく学習されているかどうかを検証し、モデルを選択する必要があります.
検証データは、トレーニングデータの配布とテストデータと同じトレーニングデータの一部を使用します.
from sklearn.model import train_test_split

# 훈련 / 테스트 데이터  7:3으로 나누기
train, test = train_test_split(df, train_size = 0.7, test_size = 0.3, random_state = 2)

# 훈련 / 검증 데이터 7:3으로 나누기
train, val = train_test_split(train, train_size = 0.7, test_size = 0.3, random_state = 2)

データムモデル


分類問題では、通常、ターゲット変数で最も頻繁に発生するカテゴリをベースモデルに設定します.ターゲット変数は通常、カテゴリ比率が偏っているため、ターゲット変数の比率を常にチェックする必要があります.
ターゲット変数が1クラス対0クラスの比が2:8の場合、モデルは0のみで、精度は80%です.したがって、データムモデルは精度が80%のモデルに設定し、パフォーマンスの向上したモデルを作成します.
from sklearn.metrics from accuracy_score

# 타켓 데이터 범주 비율 확인
y_train = train[target]
y_train.value_counts(normalize = True)

# mode() : ~설명 추가 예정~
major = y_train.mode()[0]

# 타겟 샘플 수 만큼 0이 담긴 리스트를 만듬.
# 예제 기준으로 0이 더 많으므로 기준 모델의 범주(majority class)는 0이 된다.
y_pred = [major] * len(y_train)

print('training accuracy :', accuracy_score(y_train, y_pred))

ODS(Ods)


ODSは,イベントが発生する確率をイベントが発生しない確率で除算し,成功確率が失敗確率よりどれだけ高いかを示す.

ここで、pは成功確率を表し、1−pは失敗確率を表す.pが1の場合、確率は正の無限大であり、pが0の場合、確率も0である.

Logit Odds


ODSでのログ変換をログ変換と呼ぶ.ローグ変換により非線形形式のLogistを線形形式とし,回帰係数の意味を説明するのに便利である.既存のLogistic形式のy値は0から1の範囲を持つが,ロッグは負の無限大から正の無限大の範囲を持つ.

上記の方式はLogit ODS方式であり,結果が線形回帰の方式であることが確認できる.

Logistic Regressionモデルの作成


Logistic Regressionは、前に学習した他の回帰モデルと同様にsklearningからモジュールをインポートし、簡単にモデルを作成できます.
from sklearn.linear_model import LogisticRegression

logistic = LogisticRegression()
logistic.fit(X_train_data, y_train_data)

logistic.score(X_val_data, y_val_data)

精度を高める方法は?


精度を高める様々な方法の中で、私が学んだのはSimpleImputerとStandardScalerです.

SimpleImputer


SimpleImputerは、欠落した値を処理するためです.
from sklearn.impute import SimpleImputer

imputer = SimpleImputer(strategy = 'mean')

X_train_imputer = imputer.fit_transform(X_train_data)
X_val_imputer = imputer.transform(X_val_data)

StandardScaler


StanardScaelrは,配合特性の尺度として標準化された正規分布である.
from sklearn.preprocessing import StanardScaler

scaler = StandardScaler()
X_train_scaler = scaler.fit_transform(X_train_imputer)
X_val_scaler = scaelr.transform(X_val_imputer)