Что вы узнаете из этого блога?
Вы узнаете о некоторых основных способах использования pandas, которые помогают обрабатывать ваши данные, например iloc, isnull (), head (). Вы узнаете о кодировании - почему и типах - LabelEncoder и One Hot Encoder. Мы также увидим, как можно обучить классификатор случайного леса и как матрицы путаницы помогают нам определить точность нашей модели. Мы будем использовать sklearn на протяжении всего блога
Найдите ядро kaggle здесь и проект github здесь
Введение
Из всех случаев рака довольно часто встречается рак груди. Фактически, в Соединенных Штатах рак груди является наиболее распространенным видом рака, который диагностируется у женщин после рака легких, который приводит к смерти. Рак груди может встречаться как у мужчин, так и у женщин, но он гораздо чаще встречается у женщин.
Достижения в области скрининга и лечения резко повысили показатели выживаемости с 1989 года. В Соединенных Штатах (США) около 3,1 миллиона выживших после рака груди. Вероятность смерти любой женщины от рака груди составляет около 1 из 37 или 2,7 процента. Но даже в 2017 году у женщин ожидается около 252 710 новых диагнозов рака груди, и около 40 610 женщин, вероятно, умрут от этого заболевания. С тех пор эти цифры улучшились в основном благодаря осведомленности о раке груди и хорошему лечению.
Раннее обнаружение рака груди
По данным Breastcancer.org,
Самостоятельное обследование груди или регулярное самостоятельное обследование груди может быть важным способом раннего выявления рака груди, когда вероятность его успешного лечения выше. Хотя ни один тест не может обнаружить все виды рака груди на ранней стадии, они считают, что выполнение самообследования груди в сочетании с другими методами скрининга может повысить шансы раннего обнаружения.
Под самообследованием груди мы подразумеваем проверку на наличие шишек. Но дело в том, что не все шишки злокачественные.
Итак, в этом блоге мы попытаемся предсказать вероятность того, что опухоль будет злокачественной или доброкачественной. Это довольно распространенная и простая проблема, вот мой взгляд на нее.
Набор данных
Я использовал этот набор данных из Kaggle.
import pandas as pd data.shapedata= pd.read_csv('data.csv') data.shape #To find the dimensions of the dataset data.head()
Data.shape предоставит вам (569, 33), что означает, что у вас есть 569 строк / точек данных с 33 атрибутами.
Вот как выглядит ваш набор данных.
Подготовка / предварительная обработка данных
Отсутствующие значения
Давайте проверим, есть ли в нашем наборе данных нулевые или пустые значения.
# Missing values data.isnull().sum() data.isna().sum()
Он вернет ноль для всех атрибутов, если ни один из них не пропущен.
Вход и выход
Рассмотрим наш набор данных. Имея список признаков, мы пытаемся предсказать, является ли опухоль / уплотнение злокачественной или доброкачественной. Итак, столбец 2 - это наш результат, который нужно предсказать или вывести, а все остальное - наши входные данные. Идентификатор столбца не имеет отношения к нашей проблеме.
Давайте разделим это.
X = data.iloc[:,2:32].values Y = data.iloc[:,1].values
iloc в Pandas Dataframe используется для индексации / выбора на основе целочисленного местоположения по позиции. Синтаксис индексатора iloc - data.iloc [‹выбор строки›, ‹выбор столбца›]
Проще говоря, iloc в пандах используется для выбора строк и столбцов по номеру в том порядке, в котором они появляются во фрейме данных.
Кодирование
Теперь обратите внимание на вашу букву Y.
В самом общем смысле модели машинного обучения не понимают текст как таковой. Поэтому мы переводим их на понятный им язык - числа.
Это преобразование наших текстовых значений в число называется кодировкой ML.
В ML есть два типа кодирования.
- Кодировка метки
- Один горячий кодировщик
Кодировка ярлыка
Это простое прямое кодирование. Мы преобразуем категориальные текстовые данные в понятные модели числовые данные, в данном случае используя класс Label Encoder программы sklearn. Итак, все, что нам нужно сделать, чтобы пометить кодирующий столбец, - это импортировать класс LabelEncoder из библиотеки sklearn, подогнать и преобразовать первый столбец данных, а затем заменить существующие текстовые данные новыми закодированными данными.
from sklearn.preprocessing import LabelEncoder
labelencoder = LabelEncoder()
x[:, 0] = labelencoder.fit_transform(x[:, 0])
Быстрый кодировщик
Кодирование метки создает новую проблему. Иногда мы кодируем категориальные данные, которые не имеют никакого отношения между строками. Поскольку в одном столбце указаны разные числа, модель неправильно поймет, что данные расположены в каком-то порядке. Например: 3 ›2› 1 ›0. Но это совсем не так. Чтобы решить эту проблему, мы используем One Hot Encoder.
Итак, он делает следующее.
Во-первых, он принимает столбец с уже закодированными метками категориальных данных. Затем он разбивает столбец на несколько столбцов, столько же, сколько и категорий. Теперь каждое из значений столбца этих категорий заменяется на 1 или 0 в зависимости от того, находится ли оно в правильной категории или нет.
Итак, вместо ответа в одном столбце, давайте скажем, что представляет собой каждый фрукт. У нас есть несколько рядов для каждого фрукта. Итак, в нашем столбце, скажем, Apple есть 1 для всех строк, которые являются яблоками, и 0 в противном случае.
from sklearn.preprocessing import OneHotEncoder
onehotencoder = OneHotEncoder(categorical_features = [0])
x = onehotencoder.fit_transform(x).toarray()
В нашем случае подойдет простой LabelEncoder.
#Encoding categorical data values from sklearn.preprocessing import LabelEncoder labelencoder_Y = LabelEncoder() Y = labelencoder_Y.fit_transform(Y)
Набор данных для тестирования и обучения
Итак, как и в случае с любой другой проблемой машинного обучения, нам придется разделить наш набор данных на два: один для обучения, а другой для тестирования. Мы оставим 25% всех данных для тестирования.
from sklearn.model_selection import train_test_split X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.25, random_state = 0)
Масштабирование функций
Поэтому в большинстве случаев наши данные содержат значения, которые сильно различаются, например, от нанометров до километров. Проблема в том, что большинство алгоритмов просто учитывают величину отбрасывания единиц, поэтому функции с большой величиной будут весить больше, чем другие.
Посмотрите на наши значения данных. Диапазон слишком велик. Итак, масштабируем их до приемлемого диапазона.
#Feature Scaling from sklearn.preprocessing import StandardScaler sc = StandardScaler() X_train = sc.fit_transform(X_train) X_test = sc.transform(X_test)
Теперь все готово!
Тренируйте свою модель
Мы собираемся использовать классификатор случайного леса. Какую модель использовать и где - это обсуждение отдельного подробного блога.
Классификатор случайного леса - это ансамблевый алгоритм, то есть они объединяют один или несколько алгоритмов одного и того же типа для классификации объектов.
Проще говоря, классификатор случайного леса создает набор деревьев решений из случайно выбранного подмножества обучающего набора. Затем он объединяет голоса из разных деревьев решений, чтобы определить окончательный класс тестового объекта.
Это хорошее чтение, если вы хотите узнать больше об нем.
Посмотрим, как это будет реализовано в нашем случае.
from sklearn.ensemble import RandomForestClassifier classifier = RandomForestClassifier(n_estimators = 10, criterion = 'entropy', random_state = 0) classifier.fit(X_train, Y_train)
Здесь n_estimators обозначают количество деревьев решений, критерий определяет меру качества разделения. «Джини» для примеси Джини и «энтропия» для получения информации. random_state, если int, - это начальное число, используемое генератором случайных чисел. Если None, генератор случайных чисел - это экземпляр RandomState, используемый np.random
.
Протестируйте свою модель
Теперь, когда вы создали и обучили свою модель, давайте посмотрим, насколько хорошо она работает.
Сохраним все прогнозы в Y_predict
Y_pred = classifier.predict(X_test)
Теперь, чтобы увидеть, насколько хорошо наша модель предсказала, я собираюсь взглянуть на ее матрицу неточностей.
from sklearn.metrics import confusion_matrix cm = confusion_matrix(Y_test, Y_pred)
Он действительно хорошо зарекомендовал себя! 89 из одного класса и 52 из другого были предсказаны правильно. Только один экземпляр обоих классов был предсказан неверно. Это неплохой результат.
Посмотрим на точность.
from sklearn.metrics import accuracy_score accuracy = accuracy_score(Y_test,Y_pred)
98% - довольно высокая точность.
Если вы нашли проект полезным, пожалуйста, проголосуйте за ядро kaggle.
Вывод
Мы успешно загрузили набор данных, подготовили данные путем кодирования и масштабирования функций, обучили классификатор случайного леса и протестировали его. Надеюсь, вы хорошо провели время, узнав о подходе к решению этой проблемы. Не стесняйтесь оставлять отзывы и интересные задачи, которые вы хотели бы видеть решенными таким образом.