2022年のトップ心臓病予測プロジェクト
公開: 2021-05-26私たちの心臓病予測プロジェクトのこのステップバイステップのチュートリアルへようこそ。 ここでは、患者が心臓病と診断できるかどうかを予測する機械学習モデルを作成します。
このプロジェクトに取り組むには、機械学習とデータ分析の基本に精通している必要があります。 このプロジェクトでは、ランダムフォレスト、K-NN(K最近傍法)など、複数のMLアルゴリズムに精通している必要があります。
データのラングリング、フィルタリングを実行し、6つの異なるMLアルゴリズムをテストして、データセットに最適な結果を提供するアルゴリズムを見つけます。 さぁ、始めよう:
目次
心臓病予測プロジェクトの目的
私たちの心臓病予測プロジェクトの目標は、患者が心臓病と診断されるべきかどうかを判断することです。これは、2つの結果です。
陽性結果=1、患者は心臓病と診断されます。
否定的な結果=0、患者は心臓病と診断されません。
どの分類モデルが最も精度が高いかを見つけ、データ内の相関関係を特定する必要があります。 最後に、心臓病の診断に最も影響を与える機能を特定する必要もあります。
特徴
次の13の特徴(X)を使用して、予測子(Y)を決定します。
- 年。
- 性別:1 =男性、0=女性。
- (cp)胸痛タイプ(4つの値–序数)、1番目の値:典型的な狭心症、2番目の値:非典型的な狭心症、3番目の値:非狭心症の痛み、4番目の値:無症候性。
- (trestbps)安静時血圧。
- (コレステロール)血清コレステロール。
- (Fbs)–空腹時血糖> 120mg/dl。
- (restecg)–安静時の心電図検査の結果。
- (thalach)–達成された最大心拍数。
- (exang)–運動誘発性狭心症。
- (オールドピーク)–休息と比較した運動によって引き起こされるST低下。
- (勾配)–ピーク運動STセグメントの勾配。
- (ca)–透視室で着色された主要な血管の数。
- (thal)–達成された最大心拍数(序数)、3 =正常、6 =固定欠陥、7=可逆欠陥。
ステップ1:データラングリング
最初に、使用しているデータセットをより単純で理解しやすい形式に変換して確認します。 データをより適切に使用するのに役立ちます。
numpyをnpとしてインポートします
パンダをpdとしてインポートします
matplotlibをpltとしてインポートします
Seabornをsnsとしてインポートする
matplotlib.pyplotをpltとしてインポートします
filePath ='/Users/upgrad/Downloads/datasets-33180-43520-heart.csv'
データ=pd.read_csv(filePath)
data.head(5)
年 | セックス | cp | trestbps | chol | fbs | restecg | タラック | exang | オールドピーク | スロープ | ca | タル | 目標 | |
0 | 63 | 1 | 3 | 145 | 233 | 1 | 0 | 150 | 0 | 2.3 | 0 | 0 | 1 | 1 |
1 | 37 | 1 | 2 | 130 | 250 | 0 | 1 | 187 | 0 | 3.5 | 0 | 0 | 2 | 1 |
2 | 41 | 0 | 1 | 130 | 204 | 0 | 0 | 172 | 0 | 1.4 | 2 | 0 | 2 | 1 |
3 | 56 | 1 | 1 | 120 | 236 | 0 | 1 | 178 | 0 | 0.8 | 2 | 0 | 2 | 1 |
4 | 57 | 0 | 0 | 120 | 354 | 0 | 1 | 163 | 1 | 0.6 0.6 | 2 | 0 | 2 | 1 |
上記のコードがデータを表形式で表示するのに役立ったように、さらにデータをラングリングするために次のコードを使用します。
print(“(行、列):” + str(data.shape))
data.columns
上記のコードは、データセット内の行と列の総数と列名を示しています。 データの行と列の総数は、それぞれ303と14です。 次に、次の関数を使用して、すべての変数の一意の値の数を見つけます。
data.nunique(axis = 0
同様に、次の関数は、数値変数の平均、カウント、標準偏差、最小値、および最大値を要約します。
data.describe()
ステップ2:EDAの実施
データラングリングが完了したので、探索的データ分析を実行できます。 心臓病予測プロジェクトのこの段階で実行する主なタスクは次のとおりです。
相関関係を見つける
さまざまな変数間の相関関係を確認するのに役立つ相関行列を作成します。
corr = data.corr()
plt.subplots(figsize =(15,10))
sns.heatmap(corr、xticklabels = corr.columns、yticklabels = corr.columns、annot = True、cmap = sns.diverging_palette(220、20、as_cmap = True))
sns.heatmap(corr、xticklabels = corr.columns、
yticklabels = corr.columns、
annot = True、
cmap = sns.diverging_palette(220、20、as_cmap = True))
機能間の即時の相関関係を見つけるために、ペアプロットを作成することもできます。 連続変数のみを含む小さなペアプロットを使用して、関係を詳しく調べます。
subData = data [['age'、'trestbps'、'chol'、'thalach'、'oldpeak']]
sns.pairplot(subData)
ヴァイオリンと箱ひげ図の使用
ヴァイオリンと箱ひげ図を使用すると、基本的な統計とデータの分布を確認できます。 これを使用して、さまざまなカテゴリにわたる特定の変数の分布を比較できます。 データ内の外れ値を特定するのにも役立ちます。 次のコードを使用します。
plt.figure(figsize =(12,8))
sns.violinplot(x ='target'、y ='oldpeak'、hue =” sex”、inner ='quartile'、data = data)
plt.title( "Thalach Level vs. Heart Disease"、fontsize = 20)
plt.xlabel( "心臓病のターゲット"、fontsize = 16)
plt.ylabel( "Thalachレベル"、fontsize = 16)
最初のバイオリンと箱ひげ図では、陽性の患者は陰性の患者よりもST低下の中央値が低いことがわかります。 そこで、プロットを使用して、ST低下レベルと心臓病を比較します。
plt.figure(figsize =(12,8))
sns.boxplot(x ='target'、y ='thalach'、hue =” sex”、data = data)
plt.title(「ST低下レベルと心臓病」、fontsize = 20)
plt.xlabel( "心臓病のターゲット"、fontsize = 16)
plt.ylabel(「休息と比較した運動によって誘発されるST低下」、fontsize = 16)
ここで、陽性患者は陰性患者と比較してST低下レベルの中央値が高かった。
データのフィルタリング
次に、心臓病の陽性患者と陰性患者に応じてデータをフィルタリングします。 まず、陽性の心臓病患者によるデータのフィルタリングから始めます。
pos_data = data [data ['target'] == 1]
pos_data.describe()
同様に、心臓病の陰性患者に応じてデータをフィルタリングします。
pos_data = data [data ['target'] == 0]
pos_data.describe()
ステップ3:機械学習アルゴリズムの使用
準備
ここでは、特徴をXに割り当て、最後の列を予測子Yに割り当てることにより、トレーニング用のデータを準備します。
X = data.iloc [:、:-1] .values
Y = data.iloc [:、-1} .values
次に、データをトレーニングセットとテストセットの2つのセットに分割します。
sklearn.model_selectionからimporttrain_test_split
x_train、x_test、y_train、y_test = train_test_split(X、y、test_size = 0.2、random_state = 1)
最後に、データを正規化して、その分布の平均が0になるようにします。
sklearn.preprocessingからインポートStandardScaler
sc = StandardScaler()
x_train = sc.fit_transform(x_train)
x_test = sc.transform(x_test)
モデルのトレーニング
このセクションでは、複数の機械学習アルゴリズムを使用して、最高の精度を提供するアルゴリズムを見つけます。
1番目のモデル:ロジスティック回帰
sklearn.metricsからimportclassification_report
sklearn.linear_modelからimportLogisticRegression
model1 = LogisticRegression(random_state = 1)#モデルのインスタンスを取得
model1.fit(x_train、y_train)#Train/Fitモデル
y_pred1 = model1.predict(x_test)#y個の予測を取得
print(classification_report(y_test、y_pred1))#出力精度
このモデルの精度は74%でした。
2番目のモデル:K-NN(K最近傍)
sklearn.metricsからimportclassification_report
sklearn.neighboursからインポートKNeighboursClassifier
model2 = KNeighboursClassifier()#モデルのインスタンスを取得
model2.fit(x_train、y_train)#Train/Fitモデル
y_pred2 = model2.predict(x_test)#y個の予測を取得
print(classification_report(y_test、y_pred2))#出力精度
このモデルの精度は75%でした。
3番目のモデル:サポートベクターマシン(SVM)
sklearn.metricsからimportclassification_report
sklearn.svmからインポートSVC
model3 = SVC(random_state = 1)#モデルのインスタンスを取得
model3.fit(x_train、y_train)#Train/Fitモデル
y_pred3 = model3.predict(x_test)#y個の予測を取得
print(classification_report(y_test、y_pred3))#出力精度
このモデルの精度は75%でした。
4番目のモデル:単純ベイズ分類器
sklearn.metricsからimportclassification_report
sklearn.naive_bayesからGaussianNBをインポート
model4 = GaussianNB()#モデルのインスタンスを取得
model4.fit(x_train、y_train)#Train/Fitモデル
y_pred4 = model4.predict(x_test)#y個の予測を取得
print(classification_report(y_test、y_pred4))#出力精度
このモデルの精度は77%でした。
5番目のモデル:ランダムフォレスト
sklearn.metricsからimportclassification_report
sklearn.ensembleからインポートRandomForestClassifier
model6 = RandomForestClassifier(random_state = 1)#モデルのインスタンスを取得
model6.fit(x_train、y_train)#Train/Fitモデル
y_pred6 = model6.predict(x_test)#y個の予測を取得
print(classification_report(y_test、y_pred6))#出力精度
このモデルの精度は80%と最も高かった。
6番目のモデル:XGBoost
xgboostからインポートXGBClassifier
model7 = XGBClassifier(random_state = 1)
model7.fit(x_train、y_train)
y_pred7 = model7.predict(x_test)
print(classification_report(y_test、y_pred7))
このモデルの精度は69%でした。
さまざまなMLアルゴリズムをテストした結果、80%の最適な精度が得られたため、ランダムフォレストが最適であることがわかりました。
80%を超える精度のパーセンテージは、あまりにも適切であるとは言えないことに注意してください。これは、過剰適合が原因である可能性があります。 そのため、80%が到達するのに最適な数です。
ステップ4:機能スコアを見つける
ここに、機能スコアがあります。これは、モデルにとってどの機能が最も有用であったかを示すことにより、重要な決定を下すのに役立ちます。
#重要性を得る
重要度=model6.feature_importances_
#機能の重要性を要約する
enumerate(importance)のi、vの場合:
print('機能:%0d、スコア:%.5f'%(i、v))
上位4つの特徴は、胸痛のタイプ(cp)、達成された最大心拍数(thalach)、主要血管の数(ca)、および安静時と比較した運動によって引き起こされたST低下(oldpeak)であることがわかりました。
結論
おめでとうございます。これで、心臓病予測プロジェクトが正常に完了しました。 13の機能があり、そのうち最も重要な機能は胸痛のタイプと達成された最大心拍数であることがわかりました。
6つの異なるMLアルゴリズムをテストしたところ、最も正確なアルゴリズムはランダムフォレストであることがわかりました。 このモデルをテストセットでテストし、このモデルがどの程度うまく機能するかを確認する必要があります。
一方、機械学習とAIについて詳しく知りたい場合は、 AIコースを確認することをお勧めします。 業界の専門家から直接学び、知識をテストできる業界プロジェクトに取り組みます。 機械学習とAIのキャリアに興味がある場合は、ぜひチェックしてください。
機械学習について詳しく知りたい場合は、IIIT-BとupGradの機械学習とAIのエグゼクティブPGプログラムをご覧ください。このプログラムは、働く専門家向けに設計されており、450時間以上の厳格なトレーニング、30以上のケーススタディと課題、IIITを提供しています。 -B卒業生のステータス、5つ以上の実践的なキャップストーンプロジェクト、トップ企業との雇用支援。
機械学習はヘルスケアセクターにどのように役立ちますか?
今日のヘルスケア分野では、機械学習の興味深い用途が数多くあります。 とりわけ、その主な用途の1つは、病気の検出と診断です。 まれな遺伝病の検出から癌の初期段階まで、機械学習はこの点で非常に役立つことが証明されています。 薬の発見、画像診断、スマートな健康記録の維持、行動の修正などの予防医学、病気の発生と再発の予測、放射線療法の改善、効率的な臨床研究と患者の試験など、他にも多くの用途があります。
どうすれば医療データサイエンティストになることができますか?
ヘルスケア業界が世界で最も膨大なデータソースの1つであることを考えると、ヘルスケアデータ科学者の需要は増加すると予想されます。 ヘルスケアとデータサイエンスの融合は有望で実り多い道であり、意欲的なヘルスデータサイエンティストはこの状況を利用することができます。 ヘルスケアデータサイエンスは比較的新しい分野です。 それは、統計学、数学、バイオインフォマティクス、コンピューターサイエンス、および疫学の組み合わせです。 データサイエンティストになるための基礎とスキルセットは同じですが、焦点はヘルスケアデータとアプリケーションのみになります。 Python、R、およびSASを使用したコンピュータープログラミングの知識が役立ちます。 世界のトップ大学は、ヘルスケアデータサイエンスの専門大学院プログラムを提供しています。
医師はデータサイエンスを知る必要がありますか?
AIとデータサイエンスが急速に主流になりつつある現在、これらはヘルスケア分野の単なる流行語ではありません。 データセットの膨大なチャンクから臨床的に有用な情報を抽出する上でのこれらのテクノロジーの計り知れない重要性は、医師と医師がこれらの分野に新たな関心を抱くことを奨励しています。 データサイエンスを知ることは、医師がマルチパラメータ情報と継続的な監視から得られた膨大なデータセットを使用して希少疾患を迅速かつ正確に診断できるため、医師に追加の利点を提供します。 AIは、効果的なデータ視覚化技術を通じて診断を支援し、臨床研究の統計的重要性を理解するのに役立ちます。