【Scikit-learn】ロジスティック回帰の使い方・分類

この記事では、Python用機械学習ライブラリ「scikit-learn」を用いて、ロジスティック回帰する方法をまとめました。

ロジスティック回帰の使い方

ロジスティック回帰とは、多変量解析の1つです。
線形回帰を応用(線形回帰の出力をロジット関数に入力)したもので、2分類問題(2値の目的変数をもつ問題)に対して利用します。
2分類問題数とは、例えば「生存・死亡」や「陽性・陰性」を判別するといったものです。

今回はこれをPython用機械学習ライブラリ「scikit-learn」で実装してみます。

サンプルコード(Python3)

サンプルプログラムのソースコードです。

# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
from sklearn import linear_model
from sklearn.externals import joblib

def main():
    # 学習用のデータを読み込み
    data = pd.read_csv("train.csv", sep=",")

    # 説明変数:x1, x2
    X = data.loc[:, ['x1', 'x2']].as_matrix()

    # 目的変数:x3
    y = data['x3'].as_matrix()

    # 学習(ロジスティック回帰)
    clf = linear_model.LogisticRegression(random_state=0)
    clf.fit(X, y)

    # ロジスティック回帰の学習結果
    a = clf.coef_
    b = clf.intercept_  
    print("回帰係数:", a)
    print("切片:", b) 
    print("決定係数:", clf.score(X, y))

    # テスト用データの読み込み
    data = pd.read_csv("test.csv", sep=",")

    # 学習結果の検証(テスト用データx1, x2を入力)
    X_test = data.loc[:, ['x1', 'x2']].as_matrix()
    y_predict = clf.predict(X_test)

    # 検証結果の表示
    print("検証結果:", y_predict)

    # 学習結果を出力
    joblib.dump(clf, 'train.learn') 

if __name__ == "__main__":
    main()

学習用データ

train.csv

"x1","x2","x3"
3,2,0
1,2,0
5,6,1
6,7,1
5,5,1
4,5,0
3,6,0
8,0,0
9,6,1
6,2,0
7,8,1

x1とx2の和が1以上・・・x3は1
x1とx2の和が1未満・・・x3は0

テスト用データ

"x1","x2"
4,2
6,7
8,5
3,3

実行結果

サンプルプログラムの実行結果です。

回帰係数: [[-0.02217148  0.31554403]]
切片: [-1.06960241]
決定係数: 0.818181818182
検証結果: [0 1 1 0]

検証結果をみると、「x1とx2の和が1以上・・・x3は1、x1とx2の和が1未満・・・x3は0」と判別していることがわかります。

関連記事
1 Scikit-learn入門・使い方
2 Scikit-learnをインストールする方法
3 Python入門 サンプル集
関連記事