こんにちは、学習者の皆さん。今日はPythonを使って、事前に取得した情報をもとにパーキンソン病を検出する基本的なMLモデルを構築します。
まず、パーキンソン病とモデルに使用するデータセットについて理解することから始めましょう。私たちのプロジェクトでは、parkinson.data
ファイルを使用します。
パーキンソン病は、体の動きに影響を与える中枢神経系の疾患です。今のところ、この病気に対する実用的な治療法はありません。
必要なライブラリのインポート
どのようなプロジェクトでも、最初のステップは必要なモジュールをすべてプロジェクトにインポートすることです。numpy、pandas、matplotlib などの基本的なモジュールは、それぞれデータの準備、読み込み、プロットのために必要です。
また、学習と精度の推定のために、いくつかのsklearnモデルと関数が必要です。最後に、私たちは xgboost
ライブラリを使用する予定です。
XGBoostライブラリは決定木ベースのGradient Boostingモデルで、システムの速度と精度を向上させるために設計されています。
1
2
3
4
5
6
7
|
import numpy as np
import pandas as pd
import os, sys
from sklearn.preprocessing import MinMaxScaler
from xgboost import XGBClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
|
データセットの読み込み
次のステップは、先ほどダウンロードしたデータをコードファイルと同じフォルダにロードすることです。そのために、pandasモジュールを使用します。そのコードは以下の通りです。
1
2
3
4
|
dataframe = pd.read_csv( 'parkinsons.csv' )
print ( "The shape of data is: " ,dataframe.shape, " )
print ( "FIRST FIVE ROWS OF DATA ARE AS FOLLOWS: )
dataframe.head() |
プログラムの出力はデータセットの最初の5行を表示し、合計24列、195点のデータから構成されます。次のステップは、ラベルとデータを互いに分離することです。
そのためのコードを以下に示す。ここでは、ラベル列は状態列です。
1
2
|
data = dataframe.loc[:,dataframe.columns! = 'status' ].values[:, 1 :]
label = dataframe.loc[:, 'status' ].values
|
データの正規化
次のステップは、すべてのデータポイントを-1から+1までの間でスケーリングすることです。ここでは MinMaxScaler を使って特徴量を変換し、パラメータとして指定した範囲にスケーリングすることにします。fit_transform` 関数は、データをフィットさせてから変換/正規化するのに役立ちます。
ラベルはすでに0と1の2つの値しか持っていないので、ラベルのスケーリングは必要ありません。
1
2
3
|
Normalizing_object = MinMaxScaler(( - 1 , 1 ))
x_data = Normalizing_object.fit_transform(data)
y_data = label
|
Train-Test データの分割
次のステップは、80-20ルール(データの80%をトレーニング、残りの20%をテストに回す)に従って、データをトレーニングとテストに分割することです。
ここでは、sklearn モジュールの train_test_split
関数を使用して、同じことを実現する予定です。そのコードは以下の通りです。
1
|
x_train,x_test,y_train,y_test = train_test_split(x_data,y_data,test_size = 0.2 )
|
XGBClassifierの初期化とmodekの学習
私たちのデータは、XBGClassifierに学習させ、適合させる準備ができました。そのために、分類器オブジェクトを作成し、学習データを分類器に当てはめることになります。
そのためのコードを以下に示します。
1
2
|
model = XGBClassifier()
model.fit(x_train,y_train) |
出力には分類器の学習情報が表示され、テストデータに対する予測を行い、精度を得る準備が整いました。
予測と精度を得る
次の最後のステップは、テストデータセットの予測値を取得し、モデルの精度を評価することです。これを行うためのコードを以下に示します。
1
2
|
predictions = model_obj.predict(x_test)
print (accuracy_score(y_test,predictions) * 100 )
|
このコードを実行した結果、モデルの精度は97.43%以上となり、非常に良い結果であることがわかりました。というわけで、これで完成です。私たちは独自のパーキンソン病分類器を構築しました。
まとめ
この記事では、様々な要因によって個人のパーキンソン病の存在を検出する方法について学びました。
このプロジェクトでは、高速かつ正確な検出のためにXGBClassifierを使用しました。このモデルは、97.43%以上の精度を達成し、素晴らしい結果でした。
お読みいただきありがとうございました。