機械学習の実践 複数モデルに基づく自閉症の9つのスクリーニングと予測分析

みなさん、こんにちは。私は Wei Xue AI です。今日は、複数のモデルに基づく自閉症の機械学習の実践 9 つのスクリーニングと予測分析を紹介します。自閉症は神経発達障害であり、主に対人コミュニケーションと社会的相互作用に現れます。相互作用の困難、コミュニケーション障壁、および反復的な常同行動。自閉症児の診断と介入には、早期のスクリーニングと分析が非常に重要です。

目次
1. プロジェクトの背景 2.
研究の意義
3. コードの実践とデータ分析
3.1 データの前処理
3.2 データ グラフ分析
4. 機械学習モデルの分析
4.1 データのワンホット エンコーディング
4.2 データの並べ替え
4.3 ロジスティック回帰モデル
4.4 ランダム フォレスト モデル
4.5 K 最近傍モデル
4.6 実行結果
5. まとめ

1. プロジェクトの背景

自閉症は過去数十年にわたって広く注目されており、その有病率の高さと患者とその家族への長期的な影響が認識されています。しかし、自閉症の症状は多様であり、特定のバイオマーカーが存在しないため、その診断と治療は大きな課題に直面しています。したがって、自閉症のスクリーニングと分析プロジェクトを実施することは、早期診断の精度と介入の効果を向上させるのに役立ちます。

2. 研究の意義

早期介入: 自閉症に対する早期介入は、子供の発達にとって非常に重要です。スクリーニングおよび分析プログラムを通じて、子供たちが明らかな症状を示す前に、患者を早期に発見し、タイムリーな介入を行うことができます。これは、患者の社会的相互作用、言語スキル、および行動の発達を改善するのに役立ちます。

診断精度の向上: 自閉症の診断は専門の医師の臨床評価に依存しますが、この方法には主観と誤診のリスクがあります。スクリーニングと分析プロジェクトを通じて、高度な科学技術とデータ分析手法を使用して、自閉症の診断精度を向上させ、見逃しや誤診を減らすことができます。

リソース配分の最適化: 自閉症の診断と治療には、多大な時間、財政、人的資源が必要です。スクリーニングおよび分析プロジェクトを通じて、自閉症の疫学的特徴と社会的影響をより深く理解することができ、リソースの配分を最適化し、より効果的なサポートとサービスを提供することができます。

研究と知識の蓄積を促進する: スクリーニングと分析プロジェクトは大量のデータを収集し、自閉症研究に貴重なリソースと情報を提供します。これは、自閉症の病因、遺伝的要因、潜在的な治療法についての洞察を得るのに役立ち、自閉症の分野における科学の進歩を促進するでしょう。

3. コード戦闘とデータ分析

3.1 データの前処理

まず第一に、データセット、データセットのダウンロードアドレスをロードする必要があります:
リンク: https://pan.baidu.com/s/1sfb3_w2o5X7ya7Z0R51Npw?pwd=94we
抽出コード: 94we

# 第三方库导入
import numpy as np # 导入numpy库用于进行线性代数计算
import pandas as pd # 导入pandas库用于数据处理
import matplotlib.pyplot as plt # 导入matplotlib库用于数据可视化
import seaborn as sns # 导入seaborn库用于数据可视化
# 读取数据集1和数据集2
df1 = pd.read_csv('Autism_Data.arff', na_values='?')
df2 = pd.read_csv('Toddler Autism dataset July 2018.csv', na_values='?')

sns.set_style('whitegrid') # 设置seaborn风格为白色网格

# 提取ASD类别为YES的数据(成年人)
data1 = df1[df1['Class/ASD'] == 'YES']

# 提取ASD Traits为Yes的数据(幼儿)
data2 = df2[df2['Class/ASD Traits '] == 'Yes']

# 计算ASD阳性成年人的比例
print("成年人: ", len(data1) / len(df1) * 100)

# 计算ASD阳性幼儿的比例
print("幼儿:", len(data2) / len(df2) * 100)

# 创建一个包含2个子图的画布,设置大小为20x6
fig, ax = plt.subplots(1, 2, figsize=(20, 6))

3.2 データグラフィック分析

成人向けデータセットの欠損値のヒートマップ

sns.heatmap(data1.isnull(), yticklabels=False, cbar=False, cmap='viridis', ax=ax[0])
ax[0].set_title('成年人数据集')
ax[0].set_ylabel('样本索引')

幼児データセットのヒートマップ欠損値

sns.heatmap(data2.isnull(), yticklabels=False, cbar=False, cmap='viridis', ax=ax[1])
ax[1].set_title('幼儿数据集')
ax[1].set_ylabel('样本索引')

plt.show() # 显示图形

ASD 陽性の成人および小児の出生時の黄疸のカウント ヒストグラムを描画する

# 创建一个包含2个子图的画布,设置大小为20x6
fig, ax = plt.subplots(1, 2, figsize=(20, 6))

# 绘制成年人ASD阳性中出生时黄疸情况的计数柱状图
sns.countplot(x='jundice', data=data1, hue='gender', ax=ax[0])
ax[0].set_title('成年人ASD阳性中出生时黄疸情况的性别分布')
ax[0].set_xlabel('出生时黄疸情况')

# 绘制幼儿ASD阳性中出生时黄疸情况的计数柱状图
sns.countplot(x='Jaundice', data=data2, hue='Sex', ax=ax[1])
ax[1].set_title('幼儿ASD阳性中出生时黄疸情况的性别分布')
ax[1].set_xlabel('出生时黄疸情况')

plt.show() # 显示图形

ここに画像の説明を挿入

ここに画像の説明を挿入

成人と幼児における ASD 陽性者の年齢分布のヒストグラムをプロットする


# 创建一个包含2个子图的画布,设置大小为20x6
fig, ax = plt.subplots(1, 2, figsize=(20, 6))

# 绘制成年人ASD阳性年龄分布的直方图
sns.distplot(data1['age'], kde=False, bins=45, color='darkred', ax=ax[0])
ax[0].set_xlabel('年龄(岁)')
ax[0].set_title('ASD阳性成年人年龄分布')

# 绘制幼儿ASD阳性年龄分布的直方图
sns.distplot(data2['Age_Mons'], kde=False, bins=30, color='darkred', ax=ax[1])
ax[1].set_xlabel('年龄(月)')
ax[1].set_title('ASD阳性幼儿年龄分布')

plt.show() # 显示图形

ここに画像の説明を挿入

ポジティブ ASD を持つ成人の国別分布マッピングの分析

plt.figure(figsize=(20,6))
sns.countplot(x='contry_of_res',data=data1,order= data1['contry_of_res'].value_counts().index[:15],hue='gender',palette='viridis')
plt.title('Positive ASD Adults country wise distribution')
plt.xlabel('Countries')
plt.tight_layout()
plt.show() # 显示图形
# 输出种族的计数值
print(data1['ethnicity'].value_counts())
data2['Ethnicity'].value_counts()

# 绘制白人和欧洲人种族在各个国家的分布图
plt.figure(figsize=(15,6))
sns.countplot(x='contry_of_res',data=data1[data1['ethnicity']=='White-European'],order=data1[data1['ethnicity']=='White-European']['contry_of_res'].value_counts().index[:10],palette='viridis')
plt.title('Positive ASD of White and European Ethnicities country wise distribution')
plt.xlabel('Countries')
plt.tight_layout()
plt.show() # 显示图形
# 绘制不同种族的 ASD 成人亲属中有无自闭症分布和不同种族的 ASD 儿童亲属中有无自闭症分布
fig, ax = plt.subplots(1,2,figsize=(20,6))
sns.countplot(x='austim',data=data1,hue='ethnicity',palette='rainbow',ax=ax[0])
ax[0].set_title('Positive ASD Adult relatives with Autism distribution for different ethnicities')
ax[0].set_xlabel('Adult Relatives with ASD')
sns.countplot(x='Family_mem_with_ASD',data=data2,hue='Ethnicity',palette='rainbow',ax=ax[1])
ax[1].set_title('Positive ASD Toddler relatives with Autism distribution for different ethnicities')
ax[1].set_xlabel('Toddler Relatives with ASD')
plt.tight_layout()

ここに画像の説明を挿入
ここに画像の説明を挿入

4. 機械学習モデルの分析

4.1 データのワンホットエンコーディング

within24_36= pd.get_dummies(df2['Age_Mons']>24,drop_first=True)  # 大于24个月的为1,否则为0
within0_12 = pd.get_dummies(df2['Age_Mons']<13,drop_first=True)  # 小于13个月的为1,否则为0
male=pd.get_dummies(df2['Sex'],drop_first=True)  # 性别为男性的为1,否则为0
ethnics=pd.get_dummies(df2['Ethnicity'],drop_first=True)  # 使用独热编码表示种族
jaundice=pd.get_dummies(df2['Jaundice'],drop_first=True)  # 是否有黄疸,有黄疸为1,否则为0
ASD_genes=pd.get_dummies(df2['Family_mem_with_ASD'],drop_first=True)  # 亲属中是否有自闭症,有自闭症为1,否则为0
ASD_traits=pd.get_dummies(df2['Class/ASD Traits '],drop_first=True)  # ASD 特征,有特征为1,否则为0

4.2 データ照合

import pandas as pd

# 将多个数据集按列合并
final_data = pd.concat([within0_12, within24_36, male, ethnics, jaundice, ASD_genes, ASD_traits], axis=1)

# 设置列名
final_data.columns = ['within0_12', 'within24_36', 'male', 'Latino', 'Native Indian', 'Others', 'Pacifica', 'White European', 'asian', 'black', 'middle eastern', 'mixed', 'south asian', 'jaundice', 'ASD_genes', 'ASD_traits']

# 显示合并后的数据的前几行
final_data.head()

from sklearn.model_selection import train_test_split
# 划分特征和标签
X = final_data.iloc[:, :-1]
y = final_data.iloc[:, -1]

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=101)

4.3 ロジスティック回帰モデル

from sklearn.linear_model import LogisticRegression

# 创建逻辑回归模型
logmodel = LogisticRegression()

# 在训练集上训练逻辑回归模型
logmodel.fit(X_train, y_train)
from sklearn.model_selection import GridSearchCV

# 设置网格搜索的参数
param_grid = {
    
    'C': [0.01, 0.1, 1, 10, 100, 1000]}

# 创建逻辑回归模型的网格搜索对象
grid_log = GridSearchCV(LogisticRegression(), param_grid, refit=True)

# 在训练集上进行网格搜索
grid_log.fit(X_train, y_train)

print('GridSearchCV')
# 输出网格搜索得到的最佳模型参数
print(grid_log.best_estimator_)

# 使用网格搜索得到的最佳模型在测试集上进行预测
pred_log = grid_log.predict(X_test)

from sklearn.metrics import classification_report, confusion_matrix

# 输出逻辑回归模型在测试集上的混淆矩阵和分类报告
print(confusion_matrix(y_test, pred_log))
print(classification_report(y_test, pred_log))

4.4 ランダムフォレストモデル

from sklearn.ensemble import RandomForestClassifier

# 创建随机森林分类器
rfc = RandomForestClassifier(n_estimators=100)

# 在训练集上训练随机森林分类器
rfc.fit(X_train, y_train)

# 使用随机森林分类器在测试集上进行预测
pred_rfc = rfc.predict(X_test)

print('RandomForestClassifier')
# 输出随机森林分类器在测试集上的混淆矩阵和分类报告
print(confusion_matrix(y_test, pred_rfc))
print(classification_report(y_test, pred_rfc))

4.5K 最近傍モデル

from sklearn.preprocessing import StandardScaler

# 对特征进行标准化处理
scaler = StandardScaler()
scaler.fit(X)
scaled_features = scaler.transform(X)
X_scaled = pd.DataFrame(scaled_features, columns=X.columns)

X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=101)

from sklearn.neighbors import KNeighborsClassifier

# 计算不同的K值下的分类错误率
error_rate = []
for i in range(1, 50):
    knn = KNeighborsClassifier(n_neighbors=i)
    knn.fit(X_train, y_train)
    pred_i = knn.predict(X_test)
    error_rate.append(np.mean(pred_i != y_test))

# 绘制K值和错误率的关系图
plt.figure(figsize=(10, 6))
plt.plot(range(1, 50), error_rate, color='blue', linestyle='dashed', marker='o', markerfacecolor='red', markersize=10)
plt.title('Error rate vs K-value')
plt.xlabel('K')
plt.ylabel('Error Rate')

# 根据错误率最低的K值创建K近邻分类器
knn = KNeighborsClassifier(n_neighbors=13)
knn.fit(X_train, y_train)

# 使用K近邻分类器在测试集上进行预测
pred_knn = knn.predict(X_test)

print(confusion_matrix(y_test, pred_knn))
print(classification_report(y_test, pred_knn))

4.6 実行結果

ロジスティック回帰モデル:

       precision    recall  f1-score   support

           0       0.00      0.00      0.00        78
           1       0.63      1.00      0.77       133

    accuracy                           0.63       211
   macro avg       0.32      0.50      0.39       211
weighted avg       0.40      0.63      0.49       211

ランダムフォレストモデル:

          precision    recall  f1-score   support

           0       0.71      0.37      0.49        78
           1       0.71      0.91      0.80       133

    accuracy                           0.71       211
   macro avg       0.71      0.64      0.64       211
weighted avg       0.71      0.71      0.68       211

K 最近傍分類モデル:

            precision    recall  f1-score   support

           0       0.68      0.32      0.43        78
           1       0.70      0.91      0.79       133

    accuracy                           0.69       211
   macro avg       0.69      0.62      0.61       211
weighted avg       0.69      0.69      0.66       211

5. まとめ

この記事では、Toddler Autism dataset July 2018.csv データセットを通じて自閉症の状況を分析し、関数を使用して列ごとにpd.concat()複数のデータセットを 1 つのデータセットに結合するコードとチャートを通じて視覚的な分析を実行します。final_data次に、特徴とラベルを分離し、train_test_split()関数を使用してデータをトレーニング セットとテスト セットに分割します。

この論文では、グリッド検索ロジスティック回帰モデル、ランダム フォレスト モデル、および K 最近傍分類器を使用してトレーニング セットをトレーニングし、テスト セットで予測を行います。最後に、モデルの混同行列と分類レポートを出力して、モデルのパフォーマンスを評価します。

その中で、特徴を標準化した後、K値を使用して1から49の範囲で検索し、最も誤り率が低いK値を見つけ、最終的なK最近傍分類器を作成して予測および評価します。 。

おすすめ

転載: blog.csdn.net/weixin_42878111/article/details/131782415
おすすめ