目次
第 1 章: ロジスティック回帰の応用シナリオ
- 広告クリック率
- スパムですか?
- 病気ですか?
- 金融詐欺
- 偽のアカウント
上記の例を見ると、それらはすべて 2 つのカテゴリーの間の判断に属しているという特徴がわかります。ロジスティック回帰は、二項分類問題を解決するための強力なツールです。
注: ロジスティック回帰の名前には回帰という言葉が含まれていますが、これは回帰アルゴリズムではなく、分類アルゴリズムです。
第 2 章: ロジスティック回帰の原則
1.入力
これは線形回帰出力の結果であり、通常は行列形式で記述することができます。次のように:
重みとバイアスをそれぞれ行列で表すと、上記の式は次のように記述できます。
キーポイント: ロジスティック回帰の入力は線形回帰の結果です。
2. シグモイド関数
画像は次のとおりです。
この画像を見ると、独立変数の値の範囲は (-∞, +∞)、従属変数の値の範囲は (0,1) です。つまり、独立変数の値がどのようなものであっても、シグモイド関数 )between を介して (0,1) にマッピングできます。
概要: シグモイド関数は線形回帰の結果を [0,1] にマッピングします。0.5 をしきい値とすると、デフォルトでは、0.5 未満の値は 0、0.5 より大きい値は 1 になります。という分類ができるということです。
仮定: 予測関数は次のとおりです。
で
上の 2 つの式の意味は、まず線形回帰の結果を行列として表現し、次に表現された結果をシグモイド関数に代入することです。
分類タスク:
理解: コインを投げる確率を例にとると、表の確率が 0.7 の場合、裏の確率は 1-0.7=0.3 となります。
上記の 2 つの方程式を統合すると、次のようになります。
この式の特徴は、y=0の場合は全体が右の式と等しく、y=1の場合は全体が左の式と等しくなることです。
3. 損失関数
適切なロジスティック回帰を見つけるために、損失関数が導出されます。
①損失関数とは、「予測値」と「実際の値」の類似度を反映する関数です。
②損失関数が小さいほど、モデルは優れている
ロジスティック回帰の損失は対数尤度損失と呼ばれ、式は次のとおりです。
この式も見慣れないものではありませんが、上記の積分式の対数をとったときの元の掛け算は掛け算であり、対数をとった後に足し算をしたり、指数を前に移動したりすることもできます。
サンプルが互いに独立していると仮定すると、サンプルセット全体の生成確率は、すべてのサンプルの生成確率の積となり、式を対数化すると、次の式が得られます。
例: 損失を求める
このうち、y は実際の結果を表し、h(x) または 1-h(x) は値を引き込むことで得られるロジスティック回帰結果 (予測値も含む) を表します。
4. 損失の最適化
勾配降下法を使用します。
理解: α は学習率であり、手動で指定する必要があります。α の横の全体は方向を示します。
この関数の減少方向に沿って探索すると、最終的に谷の最低点が見つかり、W 値を更新します。
使用法: トレーニング データ サイズが非常に大きいタスクに直面すると、より良い結果が得られます。
画像は次のように表現されます。
それは、常に自分自身の価値を減らし、最終的に最低点を見つけることを意味します。
第 3 章 ロジスティック回帰の適用事例
1. データセット
生のデータセットのダウンロード
開いたら赤枠の2つをダウンロードしてください。
このうち、データには合計 699 サンプルと 11 列のデータが含まれており、最初の列は用語で取得された ID、次の 9 列は腫瘍に関連する医学的特徴、最後の列は値を表します腫瘍の種類。「?」でマークされた 16 個の欠損値が含まれています。
名前にはデータ ファイルの説明が含まれており、主にデータ内の各列の説明が含まれ、最後の列はカテゴリです。
2. 具体的なプロセス
1. データの読み取り
なお、データとリストは分かれているので、読み込む際はまとめて読み込む必要があります。
import pandas as pd
import numpy as np
# 1.读取数据
path = "breast-cancer-wisconsin.data"
column_name = ['Sample code number', 'Clump Thickness', 'Uniformity of Cell Size', 'Uniformity of Cell Shape',
'Marginal Adhesion', 'Single Epithelial Cell Size', 'Bare Nuclei', 'Bland Chromatin',
'Normal Nucleoli', 'Mitoses', 'Class']
data = pd.read_csv(path, names=column_name)
# print(data)
2. 欠損値の処理
# 2、缺失值处理
# 1)替换-》np.nan
data = data.replace(to_replace="?", value=np.nan)
# 2)删除缺失样本
data.dropna(inplace=True)
3. データセットを分割する
# 3、划分数据集
from sklearn.model_selection import train_test_split
# 筛选特征值和目标值
x = data.iloc[:, 1:-1]
y = data["Class"]
x_train, x_test, y_train, y_test = train_test_split(x, y)
4.標準化
元のデータを平均 0、標準偏差 1 の範囲に変換します。
# 4、标准化
from sklearn.preprocessing import StandardScaler
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
5. 予測プロセス
from sklearn.linear_model import LogisticRegression
# 5、预估器流程
estimator = LogisticRegression()
estimator.fit(x_train, y_train)
# 逻辑回归的模型参数:回归系数和偏置
# estimator.coef_
# estimator.intercept_
6. モデルの評価
# 6、模型评估
# 方法1:直接比对真实值和预测值
y_predict = estimator.predict(x_test)
print("y_predict:\n", y_predict)
print("直接比对真实值和预测值:\n", y_test == y_predict)
# 方法2:计算准确率
score = estimator.score(x_test, y_test)
print("准确率为:\n", score)
7.結果表示
コードはまだ終わっていません。その後ろに評価コードがあります
第4章 分類評価アルゴリズム
1. 分類評価方法-----適合率と再現率
私たちは多くの場合、精度ではなく、がん患者の中からがん患者が検出されるかどうかに注意を払うため、適合率と再現率が存在します。
分類タスクでは、予測結果 (予測条件) と正しいラベル (真の条件) の間に 4 つの異なる組み合わせがあり、混同行列を形成します。
正確さ:
予測結果は、真の結果が正の例である正の例の割合であり、混同行列で示される状況は次のとおりです。
再現率:
予測結果が正の例である場合に、実際の結果が正の例であるサンプルの割合は、混同行列で次のように示されます。
要約:
適合率とは、予測結果の正の例が実際にどれだけ正確に予測されるかを示します。
再現率は、実際の結果の肯定的な例が正しく予測された数です。
上記は適合率と再現率でしたが、次にF1スコアを紹介します。
F1 スコア
モデルの堅牢性を反映しており、F1 値が大きいと適合率や再現率も大きくなります。
コードを使用して精度、再現率、F1 スコアを実装します。
# 查看精确率、召回率、F1-score
from sklearn.metrics import classification_report
report = classification_report(y_test, y_predict, labels=[2, 4], target_names=["良性", "恶性"])
print(report)
結果は次のとおりです。
ROC 曲線と AUC 指標を紹介する前に、アンバランスなサンプルの例を示します。
考える?
このような状況を想定すると、99 個のサンプルが癌であり、1 個のサンプルが癌ではない場合、何があってもすべてが陽性であると予測します (デフォルトの癌は陽性です)。
次のように、この情報を混同行列に書き込みます。
個別に計算します:
精度: 99%
精度: 99/(99+1)=99%
再現率: 99/(99+0)=100%
F1 スコア:2*99%*100%/99%+100%=99.497487%
これは無責任なモデルであることがわかりますが、根本的な理由は、サンプルが不均衡であり、肯定的な例が多すぎる一方、否定的な例が少なすぎることにあります。ROC曲線とAUC指標を紹介します。
2. 分類評価方法-----ROC曲線とAUC指数
ROC 曲線と AUC 指標を導入する前に、TPR と FPR についても理解する必要があります。
TPR = TP / (TP + FN)
真のクラス 1 を持つすべてのサンプルのうち、予測されたクラス 1 の割合
FPR = FP / (FP + TN)
真のクラス 0 を持つすべてのサンプルのうち、予測されたクラス 1 の割合
分類評価方法-----ROC曲線とAUC指数
青い線は ROC 曲線であり、AUC 指標は ROC 曲線と縦軸および横軸の間の領域です。
ここでこの写真を紹介します。
ROC 曲線の横軸は FPRate、縦軸は TPRate です。この 2 つが等しい場合、真のカテゴリが 1 か 0 かに関係なく、サンプルに対して分類器が 1 を予測する確率は等しいことを意味します。 . この時点で、AUC は 0.5 (つまり、ランダムな推測) です。
AUC の最小値は 0.5、最大値は 1 です。値が大きいほど優れています。
AUC=1、完全な分類子。この予測モデルを使用すると、しきい値が設定されていても完全な予測が得られます。ほとんどの予測状況では、完璧な分類子は存在しません。
0.5<AUC<1、ランダムな推測よりも優れています。しきい値が適切に設定されていれば、この分類子 (モデル) は予測値を持つことができます。
結論は:
最終的な AUC の範囲は [0.5, 1] で、1 に近いほど良好です。
コードを通じて実装され、ROC 曲線領域、つまり AUC インジケーターを計算します。
# y_true:每个样本的真实类别,必须为0(反例),1(正例)标记
# 将y_test 转换成 0 1
y_true = np.where(y_test > 3, 1, 0)
from sklearn.metrics import roc_auc_score
print("AUC指标:",roc_auc_score(y_true, y_predict))
結果は次のようになります。
要約:
AUC は 2 つのカテゴリを評価するためにのみ使用できます
AUC はサンプルの不均衡における分類器のパフォーマンスを評価するのに非常に適しています
ROC曲線とAUC指数がわかったところで、先ほどのサンプルの不均衡の例に戻り、つまりその場所について考えてみましょう。
TPR:99/99+0=100%
FPR:1/1+0=100%
TPR=FPR
AUC=0.5
このアンバランスなサンプル状況では、AUC インデックスは 0.5 であり、モデルが非常に貧弱であることを示しています。
注記:
上記のコンテンツは、ダークホース プログラマーによる機械学習ビデオの研究に基づいていることに注意してください。
上記の内容も機械学習コースの先生が残してくださった課題で、元々はPPT形式でしたが、全体的には比較的完成度が高いと思ったので、自分や他の人の勉強のためにブログに投稿しました。2022.6.16