こんにちは、学習者の皆さん。今日は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%以上の精度を達成し、素晴らしい結果でした。
お読みいただきありがとうございました。