AIプログラミング

scikit-learnの機械学習でロジスティック回帰を行い癌の陽性を判断する

更新日:

scikit-learnの機械学習でロジスティック回帰を行い癌の陽性を判断する

scikit-learnを使用した機械学習で、ロジスティク回帰を使用した癌の判定プログラムを行ってみます。

使用するデータはscikit-learnで提供されている癌の判定を行うデータ(load_breast_cancer)です。

このデータは569人分のデータが存在し、凹み,凹点,対称性等の30個の説明変数があります。

またそれぞれの説明変数に対して実際の結果が悪性だったか陽性だったかの目的変数があります。このデータを8割を訓練用に2割を評価用に分割して使用して評価を行ってみます。

使用するデータ

使用データ:scikit-learn(load_breast_cancer)
全データ:569件 (訓練用:8割、評価用:2割に分割)
説明変数:30個(凹み,凹点,対称性・・・)
目的変数::0:悪性/1:陽性

分類/識別:分類(1ラベル)
識別方法:ロジスティク回帰

ソースコード

ソースコードの詳細

各種ライブラリのImport

numpy,pandas,matlibの3種類のデータをインポートしています。

scikit-learnより癌のデータを抽出する

scikit-learnより癌の判定に使用するデータを抽出しています。scikit-learnからload_breast_cancerのインポートを行い、load_breast_cancer関数で抽出することが出来ます。このデータは569人分のデータがあり、凹み,凹点,対称性等の30個の属性データを持っています。それぞれに対して実際の結果が悪性か陽性かのデータも入っています。

癌のデータ(説明変数)をdataXに格納する

1.pandasデータ

取り出したデータから説明変数となる部分のみを抽出し、dataXという名前のデータフレームに格納しています。

癌のデータ(目的変数)をdataYに格納する

2.pandasデータ

取り出したデータから目的変数となる部分のみを抽出し、dataYという名前のデータフレームに格納しています。

データの分割を行う(訓練用データ 0.8 評価用データ 0.2)

dataXのうち80%を訓練用のデータとして使用します。残り20%は評価用に使用します。同様にdataYのうち80%を訓練用のデータとして使用します。残り20%は評価用に使用します。train_test_split関数を使用することで、ランダムに分割することが出来ます。

線形モデル(ロジスティク回帰)として測定器を作成する

ロジスティク回帰として測定器を作成します。作成した測定器はclfという名前に格納しています。

訓練の実施

先ほど作成した訓練用のデータに対してロジスティク回帰によりモデルを作成しています。

評価の実行(確率)

3.pandasデータ

作成したモデルに対して評価を実施します。今回は悪性、陽性のどちらかを判定することが最終目的となりますが、predict_proba関数を使用した場合、それぞれどちらの疑いが強いか確率値を算出することができます。例えば0番目の場合は悪性の確立が99.9995%となっています。逆に2番目~4番目については陽性の確立の方が高くなっています。

評価の実行(判定)

4.pandasデータ

predict関数を使用することで、悪性、陽性のどちらかに分類されるか識別することができます。確率の結果の通り0番目は悪性、2番目~4番目については陽性となっています。

混同行列

5.pandasデータ

混同行列を行ってみます。混同行列とは縦軸に実際の正解値、横軸に予想の値のクロス表を作成することで、どの程度正解したかどうかを表で分かるようになります。この結果から、実際は0(悪性)のところ1(陽性)と判断されたのは2人になります。逆に1(陽性)のところ0(悪性)と判断されたのは3人になります。

評価の実行(正答率)

実際の正答率を求めてみます。score関数を使用することで正答率が分かります。結果は95%でした。

評価の実行(個々の詳細)

それぞれの個別のデータに対して、予想値と実際の値のデータを比較しています。

-AIプログラミング
-, ,

Copyright© AI人工知能テクノロジー , 2019 All Rights Reserved.