ロジステック回帰 まとめ
scikit-learnを用いたirisの分類
1. scikit-learn の準備
from sklearn import datasets from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split
※クロスバリデーションの使い方の変更
scikit-learn 0.20からクロスバリデーション関係のモジュール(sklearn.cross_vlidation
)は廃止されている。
scikit-learn 0.18でも既にDeprecationWarning
が表示される。
- from sklearn.model_cross_varidation import train_test_split + from sklearn.model_selection import train_test_split
詳しくは以下を参照
2. scikit-learnからirisデータを取得
iris.data
: 説明変数(特徴量)の行列iris.target
: 目的変数
iris = datasets.load_iris() x = iris.data[:100] # 説明変数(1 - 100) y = iris.target[:100] # 目的変数(1 - 100)
3. 教師データとテストデータの分割
- 第1引数に入力データ, 第2引数に正解ラベルの配列を渡す。
test_size
: テストデータのサイズ(割合)。0.0~1.0の実数で指定。random_state
: データを分割する際の乱数のシード値
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.20, random_state=25)
順番がシャッフルされデータが分割されている。シャッフルを防ぐためには、shuffle=False
とすると良い。
詳しくは以下の記事を参照。
4. ロジスティック回帰を用いた学習
# 学習する model = LogisticRegression() model.fit(X_train, y_train) results = model.predict(X_test) # 予測結果 print("予測結果 : " + str(results)) print("正解データ: " + str(y_test))
予測結果 : [0 0 0 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 0] 正解データ: [0 0 0 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 0]
4. 分類結果の精度を評価
# 精度評価の計算 tp = 0 tn = 0 fn = 0 fp = 0 for result, answer in zip(results, y_test): if result == 1: if answer == 1: tp += 1 else: fp += 1 else: if answer == 1: fn += 1 else: tn += 1 accuracy = float(tp + tn)/(tp + tn + fn + fp) precision = float(tp)/(tp + fp) recall = float(tp)/(tp + fn) f_measure = 2*precision*recall/(precision + recall) print("accuracy is {}".format(accuracy)) print("precision is {}".format(precision)) print("recall is {}".format(recall)) print("f_measure is {}".format(f_measure))
accuracy is 1.0 precision is 1.0 recall is 1.0 f_measure is 1.0
ロジステック回帰について
(標準)シグモイド関数を用いた線形分類
(標準)シグモイド関数(Sigmoid function)はロジステック回帰に用いられたり、NN(Neural Network)における活性化関数といてよく用いられる。
シグモイド関数は以下のような性質を持つ。
となり、値を確率としてみることも多い。
であり、点
に対して点対称となる。
- 微分可能である。(
)
シグモイド関数を用いた2値分類をする際は、基本的には以下のようになる。
以下は、シグモイド関数の描画のためのPythonのソースコードである。
機械学習の評価
正解データ: 1 | 正解データ: 0 | |
---|---|---|
予測結果: 1 | 真陽性 TP: True Positive |
偽陽性 FP: False Positive |
予測結果: 0 | 真陰性 TN: True Negative |
偽陰性 FN: False Negative |
以下のような指標を用いて,予測結果を評価することができる。
- 正解率 (Accuracy):
予測結果全体と、答えがどれぐらい一致しているかを判断
$$Accuracy = \frac{TP + TN}{TP + FP + TN + FN}$$ - 適合率 (Precision):
偽陽性を低く抑えることを目的とする場合には適合率が高いモデルを採用
$$Precision = \frac{TP}{TP + FP}$$ - 再現率 (Recall): 偽陰性を低く抑えたい場合に採用
$$Accuracy = \frac{TP}{TP + FN}$$ - F値 (F-measure, F-score): 適合率と再現率の調和平均
$$F_measure = \frac{2 \times Precision \times Recall}{Precision + Recall}$$