Болезнь Паркинсона — это заболевание, которое поражает центральную нервную систему, а также другие части тела, которые контролируются этими нервами. Симптомы заболевания включают отсутствие мимики, отсутствие движения рук при ходьбе, а также более мягкую или невнятную речь. Макс Литтл из Оксфордского университета составил набор данных, содержащий результаты записи речевых сигналов. Этот набор данных можно использовать для обнаружения болезни Паркинсона, и я расскажу о процедуре, которую я использовал для выполнения этой задачи, используя библиотеку Sci-Kit Learn на python.

Первым шагом в этом проекте было чтение и изучение данных. Я поместил данные во фрейм данных pandas и начал с проверки распределения целевой переменной. В этом случае, если целевая переменная имеет значение 1, у пациента есть болезнь Паркинсона, а если целевая переменная имеет значение 0, у пациента нет болезни Паркинсона.

Из визуализации видно, что положительные диагнозы болезни Паркинсона встречаются чаще, чем отрицательные. Поэтому наша модель должна быть чрезвычайно точной, чтобы ее использование было более эффективным, чем просто диагностика болезни Паркинсона у каждого пациента. Набор данных включает 23 различных переменных (22, не включая целевую переменную). Все переменные представляют собой различные измерения, полученные из речевых сигналов. Я решил создать тепловую карту, чтобы отобразить корреляции между различными переменными.

Как видно из тепловой карты, многие переменные сильно коррелируют друг с другом, что говорит нам о большой вероятности того, что наша модель будет успешна в предсказаниях. Следующим шагом в этом процессе является разделение наших данных на переменные X и Y, а затем разделение этих переменных на наборы данных для обучения и тестирования. Это достигается с помощью приведенного ниже кода.

y = df['status']
X = df.drop('status', axis=1)
X = X.drop('name', axis=1)
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size = 0.3)

Первой моделью, которую я решил использовать, была модель логистической регрессии. Эта модель использует независимые переменные в сигмовидной функции, чтобы выполнить задачу бинарной классификации. Модель выводит вероятность от 0 до 1, что в данном случае является вероятностью заражения пациента болезнью Паркинсона. Я подогнал эту модель к обучающим данным и сделал прогнозы по данным тестирования. Я оценил данные, используя прогнозы, сделанные моделью, и сравнив их с истинными значениями.

from sklearn.linear_model import LogisticRegression
sigmoid_model = LogisticRegression()
sigmoid_model.fit(X_train, y_train)
predictions_logreg = sigmoid_model.predict(X_test)
from sklearn.metrics import confusion_matrix,classification_report,ConfusionMatrixDisplay
cm_logreg = confusion_matrix(y_test,predictions_logreg)
logregcm_plot = ConfusionMatrixDisplay(cm_logreg).plot()
print(classification_report(y_test, predictions_logreg))

Следующей моделью, которую я попытался использовать для выполнения задачи бинарной классификации, была модель K-ближайших соседей со значением K, равным 9. Чтобы предсказать класс нового наблюдения, модель берет девять ближайших наблюдений, и класс, представленный больше среди этих девяти ближайших наблюдений, является классом, присвоенным новому наблюдению. Эта модель оказалась немного менее успешной, чем модель логистической регрессии, поскольку в отчете о классификации указано, что точность модели составляет 83%.

Другой моделью, которую я использовал для предсказания болезни Паркинсона, была модель случайного леса. Модель случайного леса работает, по сути, задавая «вопросы» данных и используя ответы на эти вопросы для прогнозирования класса каждого наблюдения. Каждый из этих вопросов называется деревом решений, и эти деревья решений объединяются для создания «случайного леса». В этом случае я установил количество оценщиков равным 250, что означает, что в случайном лесу будет 250 различных деревьев решений, и эти деревья будут использоваться для завершения бинарной классификации. В отчете о классификации указано, что эта модель имеет точность 93%, что делает ее наиболее эффективной моделью, используемой в этом проекте.

В целом, модель случайного леса была самой эффективной моделью из трех, использованных в проекте, в этой модели была только одна ошибка типа 1 и 3 ошибки типа 2. Модель K-ближайших соседей имела две ошибки первого типа и 6 ошибок второго типа. Модель логистической регрессии содержала 1 ошибку 1-го типа и 6 ошибок 2-го типа. В этом случае ошибка типа 1 намного серьезнее, чем ошибка типа 2, поскольку она предсказывает, что пациент здоров, хотя на самом деле он инфицирован, в отличие от предсказания того, что пациент инфицирован, когда он действительно здоров. В целом, это был интересный способ попрактиковаться в прикладном машинном обучении.