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



Во второй части статьи я обрисую следующие шаги:

  • Обработка дисбаланса данных с помощью метода ROS.
  • Постройте модель логистической регрессии для субъектов с данными о курении и без них.
  • Протестируйте модель машинного обучения в test_dataset.

Обработка дисбаланса данных

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

РОЗА Техника

Случайная передискретизация увеличивает размер обучающего набора данных за счет повторения исходных примеров. Это не приводит к увеличению разнообразия обучающих примеров.

ros = RandomOverSampler (random_state = 0)

РОЗА для набора данных о статусе курения:

X_resampled, y_resampled = ros.fit_sample (training_data_with_smokingstatus.loc [:, training_data_with_smokingstatus.columns! = ’Stroke’],
training_data_with_smokingstatus [‘stroke’])

РОЗА для набора данных о статусе некурящих:

X_resampled1, y_resampled1 = ros.fit_sample (training_data_without_smokingstatus.loc [:, training_data_without_smokingstatus.columns! = ’Stroke’],
training_data_without_smokingstatus [‘stroke’])

Чтобы проверить изменение набора данных (не стесняйтесь повторить то же самое для набора данных без статуса курения (X_resampled1, y_resampled1)):

print (‘Форма входных данных ROS для данных дыма: {}’. format (X_resampled.shape))

print (‘Форма выходных данных ROS для данных дыма: {}’. format (y_resampled.shape))

Train-Test-Split (Курящий статус)

Классификатор логистической регрессии

logmodel = LogisticRegression ()
logmodel.fit (X_train, y_train)

предсказания = logmodel.predict (X_test)

log = LogisticRegression (штраф = ’l2 ', C = 0,1)
log.fit (X_train, y_train)

печать (отчет_классификации (y_test, прогнозы))

Быстрая проверка наиболее важных функций:

impFeatures = pd.DataFrame (log.coef_ [0], index = training_data_with_smokingstatus.loc [:, training_data_with_smokingstatus.columns! = 'stroke']. columns, columns = ['Importance']). sort_values ​​(by = 'Importance', ascending = False)
print (impFeatures)

Train-Test-Split (статус для некурящих)

Повторение описанных выше шагов для набора данных о запрете курения.

предсказания1 = logmodel.predict (X_test1)

печать (отчет_классификации (y_test1, predictions1))

log1 = Логистическая регрессия (штраф = ’l2 ', C = 0,1)
log1.fit (X_train1, y_train1)

Проверка наиболее важных функций:

Прогнозирование целевой переменной (хода) с помощью логистической модели

Как и в случае с набором данных о поездах, я заполнил отсутствующие ячейки ИМТ средним ИМТ.

test_data [«bmi»] = test_data [«bmi»]. fillna (test_data [«bmi»]. mean ())

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

test_data.drop (axis = 1, columns = [‘Smoking_status’], inplace = True)

test_data.drop ([«id»], axis = 1, inplace = True) # удаление столбца id.

pred = log1.predict (test_data) # использование модели статуса отказа от курения для нашего прогноза.

prediction = pd.DataFrame (pred, columns = [‘Pred’]) # создание фрейма данных с добавленными прогнозами.

прогноз [‘Pred’]. value_counts ()

Для test_data модель предсказывает, что у 6707 субъектов будет инсульт.

Хорошая работа, если вы зашли так далеко!

Если вы хотите увидеть репозиторий Github, нажмите на ссылку ниже: