Menu
CoddyTech

Два лучших признака

Часть раздела Статистика для машинного обучения путешествия по Machine Learning на Coddy. Урок 59 из 64.

Вот изображение, которое обещала эта глава: два наиболее сильных признака по среднему значению на одном графике рассеяния, по одному цвету на класс.

Образцы тканей по среднему значению вогнутых точек по горизонтали и среднему периметру по вертикали: доброкачественные образцы сгруппированы внизу слева, злокачественные — выше и правее, облака образцов встречаются в узкой полосе

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

Ещё одна проверка: являются ли эти два набора почти копиями?

first = strength.index[0]
second = strength.index[1]
print(np.round(df[first].corr(df[second]), 2))

Это выводит 0.85: признаки связаны, но не являются копиями. При значении 0.99 второй признак повторял бы первый и почти ничего нового не добавлял.

challenge icon

Задание

Средне

Признаки error показывают, насколько измерение менялось в разных клетках одного образца. Смогут ли два самых сильных признака различить классы? Стартовый код ранжирует их и сохраняет в first и second; label(ax) задаёт подписи графика.

  1. Выведи r between them: и их r с точностью до 2 знаков после запятой.
  2. Построй диаграмму рассеяния для каждого класса, отложив first по горизонтальной оси и обозначив точки названием класса.
  3. Вызови label(ax), добавь легенду и покажи график.

Пример для самой сильной пары worst (r 0.82):

Диаграмма рассеяния с заголовком Worst Features: worst concave points по горизонтальной оси, worst perimeter по вертикальной; образцы malignant синим цветом вверху справа, benign оранжевым внизу слева

Затем оцени свой график: облака точек разделены? И соответствует ли этому твоё значение r?

Попробуйте сами

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer

cancer = load_breast_cancer(as_frame=True)
df = cancer.frame
y = cancer.target
# Десять признаков погрешности: насколько каждое измерение различалось между клетками одного образца
X = cancer.data[cancer.feature_names[10:20]]

# Упорядочены по силе: first и second — два самых сильных признака
strength = np.abs(X.corrwith(y)).sort_values(ascending=False)
first = strength.index[0]
second = strength.index[1]


# Задаёт заголовок графика и подписывает оси именами признаков из пары
def label(ax):
    ax.set_title("Error Features")
    ax.set_xlabel(first)
    ax.set_ylabel(second)


# Напишите свой код ниже
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Статистика для машинного обучения

Потренируйтесь самостоятельно: Онлайн-компилятор Python