Добавьте ковариаты в задачу классификации в scikit-learn - PullRequest
0 голосов
/ 09 марта 2020

Для моего проекта я хочу построить классификатор, который предсказывает класс моих субъектов (пациенты в сравнении со здоровыми контролями) на основе набора характеристик значений вокселей из структурных данных МРТ. Я использую sklearn.linear_model.LogisticRegression в качестве классификатора. Поскольку возраст и пол влияют на интенсивность вокселей в данных МРТ, я хотел бы включить их в качестве ковариат в мою задачу классификации. Как я могу сделать это в scikit-learn? Я просто добавляю их в свой набор функций? Если да, как мне работать с различными шкалами ковариат (возраст непрерывен, пол категоричен)?

Вот простой пример:

import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression

rng = np.random.RandomState(42)

# dummy feature set (columns represent voxels)
X = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])

# dummy labels (1 = patients, 0= healthy controls)
y = np.array([1,0,1,0])

# dummy covariates (age and gender) - These should be included in my classification task
age = np.array([18,25,31,55])
gender = np.array([1,1,0,0])

# z-standardize features
scaler = StandardScaler()
X = scaler.fit_transform(X)

# classification task
lr = LogisticRegression(random_state=rng)
lr.fit(X, y)
predictions = lr.predict(X)

Эта запись может быть связана с более ранней

1 Ответ

1 голос
/ 09 марта 2020

Для моих нейровизуальных прогностических моделей я обычно строю 2 модели. Один с данными, представляющими интерес, и другой, включая возраст и c. Если производительность существенно не меняется, то возраст и c не влияют на прогнозирующую способность данных.

Конечно, для этих типов вопросов следует использовать схему перекрестной проверки.

import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression

rng = np.random.RandomState(42)

# dummy feature set (columns represent voxels)
X = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])

# dummy labels (1 = patients, 0= healthy controls)
y = np.array([1,0,1,0])

# dummy covariates (age and gender) - These should be included in my classification task
age = np.array([18,25,31,55])
gender = np.array([1,1,0,0])

Xfull = np.concatenate([X,age.reshape(-1,1),gender.reshape(-1,1)], axis = 1)

# z-standardize features
scaler = StandardScaler()
X = scaler.fit_transform(X)

# z-standardize features with covariates 
scaler2 = StandardScaler()
Xfull = scaler2.fit_transform(Xfull)


# classification task - model 1
lr1 = LogisticRegression(random_state=rng)
lr1.fit(X, y)
print("Score using only voxel data: {}".format(lr.score(X,y)))

# classification task - model 2
lr2 = LogisticRegression(random_state=rng)
lr2.fit(Xfull, y)
print("Score using voxel data & covariates: {}".format(lr2.score(Xfull,y)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...