Это продолжение предыдущей статьи о среде. Щелкните ссылку ниже для просмотра.
Во второй части статьи я обрисую следующие шаги:
- Обработка дисбаланса данных с помощью метода 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, нажмите на ссылку ниже: