Что такое болезнь Паркинсона?

Болезнь Паркинсона — это прогрессирующее заболевание центральной нервной системы, влияющее на движения и вызывающее тремор и скованность движений. Он имеет 5 стадий и ежегодно поражает более 1 миллиона человек в Индии. Это хроническое заболевание и пока неизлечимо. Это нейродегенеративное заболевание, поражающее нейроны головного мозга, вырабатывающие дофамин.

Для получения дополнительной информации посетите здесь

Симптомы:

Тремор. Тремор или дрожь обычно начинается в конечности, часто в руке или пальцах. Вы можете тереть большим и указательным пальцами вперед и назад, что известно как тремор с катанием таблеток. Ваша рука может дрожать в состоянии покоя.

Замедленные движения (брадикинезия). Со временем болезнь Паркинсона может замедлить ваши движения, что сделает выполнение простых задач трудным и трудоемким. Ваши шаги могут становиться короче при ходьбе. Может быть трудно встать со стула. Вы можете волочить ноги, когда пытаетесь ходить.

Напряженные мышцы. Ригидность мышц может возникать в любой части тела. Скованность мышц может быть болезненной и ограничивать диапазон движений. Нарушение осанки и равновесия. Ваша осанка может стать сутулой, или у вас могут возникнуть проблемы с равновесием в результате болезни Паркинсона.

Потеря автоматических движений. У вас может быть снижена способность выполнять бессознательные движения, включая моргание, улыбку или размахивание руками при ходьбе.

Изменения речи. Вы можете говорить тихо, быстро, невнятно или колебаться, прежде чем говорить. Ваша речь может быть более монотонной, чем иметь обычные интонации.

Внесение изменений. Это может стать трудным для написания.

Резюме XGBoost:

  • XGBoost — это оптимизированная распределенная библиотека повышения градиента, разработанная для обеспечения высокой эффективности, гибкости и портативности.
  • Он реализует алгоритмы машинного обучения в рамках фреймворка Gradient Boosting. XGBoost обеспечивает параллельное повышение дерева (также известное как GBDT, GBM), которое быстро и точно решает многие проблемы науки о данных.
  • Один и тот же код работает в основных распределенных средах (Hadoop, SGE, MPI) и может решать проблемы, число которых превышает миллиарды примеров.

О наборе данных:

  • Ссылка на набор данных
  • name — имя субъекта ASCII и номер записи
  • MDVP:Fo(Hz) — Средняя основная частота вокала
  • MDVP:Fhi(Hz) — Максимальная основная частота вокала
  • MDVP:Flo(Hz) — Минимальная основная частота вокала
  • MDVP:Jitter(%),MDVP:Jitter(Abs),MDVP:RAP,MDVP:PPQ,Jitter:DDP — Несколько показателей изменения основной частоты
  • MDVP: мерцание, MDVP: мерцание (дБ), мерцание: APQ3, мерцание: APQ5,
  • DVP:APQ,Shimmer:DDA — Несколько показателей изменения амплитуды
  • NHR,HNR — Две меры отношения шума к тональным компонентам голоса.
  • status — Состояние здоровья обследуемого (единица) — болезнь Паркинсона, (ноль) — здоров
  • RPDE,D2 — Две нелинейные меры динамической сложности
  • DFA — Экспонента масштабирования фрактала сигнала
  • spread1,spread2,PPE — Три нелинейные меры изменения основной частоты

Давайте закодируем это:

# Importing necessary library
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from xgboost import XGBClassifier
from sklearn.metrics import accuracy_score, confusion_matrix, plot_confusion_matrix, classification_report, roc_auc_score, plot_roc_curve
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split

Давайте загрузим данные

# Reading dataset using pandas 
data=pd.read_csv("../input/parkinsons-data-set/parkinsons.data")
# Displaying few rows of the dataset
data.head()

# displaying the last rows from the dataset

data.tail()

Давайте изучим наши данные

data.info

Отображение типа столбца набора данных

data.dtypes

Проверка нулевых значений

data.isnull().sum()

у нас нет нулевых значений в этом наборе данных, поэтому нам не нужно его предварительно обрабатывать!

EDA (исследовательский анализ данных)

# Plotting the histogram of dataset

data.hist(figsize=(25,16))
plt.show()

# Plotting pairplot using Seaborn

sns.pairplot(data.iloc[: ,0:6])
plt.show()

# Now we will find correlation and plot it using heatmap

data.corr()

data.corr()['status'][:-1].sort_values().plot(kind='bar')
plt.show()

# Plotting Heatmap of correlation
f,ax = plt.subplots(figsize=(20, 20))
sns.heatmap(data.corr(), annot = True, fmt= '.2f')
plt.show()

Получите функции и метки из DataFrame (набора данных). Функции — это все столбцы, кроме «статуса», а метки — те, что в столбце «статус».

features=data.loc[:,data.columns!='status'].values[:,1:]
labels=data.loc[:,'status'].values

Столбец «статус» имеет значения 0 и 1 в качестве меток; давайте получим количество этих меток как для 0, так и для 1.

print(labels[labels==1].shape[0], labels[labels==0].shape[0])

147 148

У нас есть 147 единиц и 48 нулей в столбце статуса в нашем наборе данных.

Инициализируйте MinMaxScaler и масштабируйте функции от -1 до 1, чтобы нормализовать их. MinMaxScaler преобразует объекты, масштабируя их до заданного диапазона. Метод fit_transform() подгоняет данные, а затем преобразует их. Нам не нужно масштабировать метки.

scaler=MinMaxScaler((-1,1))
x=scaler.fit_transform(features)
y=labels

Теперь разделите набор данных на наборы для обучения и тестирования, оставив 20% данных для тестирования.

x_train,x_test,y_train,y_test=train_test_split(x, y, test_size=0.2, random_state=7)

Построение модели XGBoost

Инициализируйте XGBClassifier и обучите модель. Это классифицирует использование eXtreme Gradient Boosting - использование алгоритмов повышения градиента для современных задач науки о данных. Он подпадает под категорию ансамблевого обучения в машинном обучении, где мы обучаем и прогнозируем, используя множество моделей для получения одного превосходного результата.

model = XGBClassifier(learning_rate=0.1, max_depth=20,verbosity=2,random_state=42,
                    scale_pos_weight=1.5, eval_metric='mlogloss',use_label_encoder =False)
model.fit(x_train, y_train)

# Finally, generate y_pred (predicted values for x_test)

y_pred=model.predict(x_test)

Давайте найдем Aточность модели с помощью SKlearn

# Calculate the accuracy for the model. Print it out.

print(accuracy_score(y_test, y_pred))

# 92.3076923076923 -with MinMaxscalar

Давайте теперь рассчитаем матрицу путаницы

# Calculate the Confusion Matrix for the model. Print it out.

print(confusion_matrix(y_test, y_pred))
plot_confusion_matrix(model, x_test, y_test)
plt.show()

Теперь время для отчета о классификации

# Displaying the classification report using sklearn

print(classification_report(y_test, y_pred))

# Plotting ROC Curve

plot_roc_curve(model, x_test, y_test) 
plt.show()

Прогноз с использованием пользовательских значений

# we took random values for this prediction, we can play with values to see the different output

newinput=[[274.688,240.005,174.287,0.01360,0.01008,0.00624,0.00564,0.01873,
           1.02308,0.256,0.51268,0.01365,0.81667,0.63804,0.10715,6.883,0.607567,0.158453,3.679772,0.131728]]

Здесь мы будем использовать нашу модель для прогнозирования вывода на основе новых значений.

output=model.predict(newinput)
output

# label 1 means True
# label 0 means False


if output == 1:
    print(True)
else:
    print(False)

Краткое содержание

  • В этом проекте машинного обучения Python мы научились выявлять наличие болезни Паркинсона у людей с использованием различных факторов.
  • Для этого мы использовали XGBClassifier и использовали библиотеку sklearn для усовершенствования модели.
  • Это дает нам точность 94,87%, что отлично, учитывая количество строк кода в этом проекте.
  • Мы также протестировали нашу модель на пользовательских данных, и она была довольно точной.