Урок машинного обучения
Набор данных о пингвинах архипелага Палмера (Антарктида), по-видимому, является заменой набора данных Iris. Это отличный вводной набор данных для исследования и визуализации данных. Но набор данных по пингвинам имеет разное количество образцов для каждого вида. Можно заметить, что в отличие от набора данных Iris, эти данные содержат разное количество записей для каждого вида.
Что такое кульмен? Верхний край клюва или клюва называется стеблем, и измерение проводится с помощью штангенциркуля с одной челюстью на кончике верхней челюсти, а другой - у основания черепа или первых перьев в зависимости от выбранного стандарта.
Исследование данных
import numpy as np import pandas as pd from io import StringIO import matplotlib.pyplot as plt import seaborn as sns df = sns.load_dataset("penguins") sns.pairplot(df, hue="species") figfile = StringIO() plt.savefig(figfile, format="svg") plt.show() print(df.info())
Точечная диаграмма (также известная как точечная диаграмма, точечная диаграмма) использует точки для представления значений двух разных числовых переменных. Положение каждой точки на горизонтальной и вертикальной осях указывает значения для отдельной
точки данных. Диаграммы рассеивания используются для наблюдения взаимосвязей между переменными.
Распространенной модификацией базовой диаграммы рассеяния является добавление третьей переменной. Значения третьей переменной можно закодировать, изменив способ построения точек. Для третьей переменной, которая указывает
категориальные значения (например, географический регион или пол), наиболее распространенным кодированием является цвет точки.
Seaborn позволяет создавать реляционные графики с помощью функции relplot(). Технически функция позволяет создавать не только диаграммы рассеяния.
RangeIndex: 344 entries, 0 to 343 Data columns (total 7 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 species 344 non-null object 1 island 344 non-null object 2 bill_length_mm 342 non-null float64 3 bill_depth_mm 342 non-null float64 4 flipper_length_mm 342 non-null float64 5 body_mass_g 342 non-null float64 6 sex 333 non-null object dtypes: float64(4), object(3) memory usage: 18.9+ KB None pip install seaborn
или альтернативное исследование данных
#Or alternate #df = pd.read_csv('../input/palmer-archipelago-antarctica-penguin- #data/penguins_size.csv') p2data = "https://raw.githubusercontent.com/allisonhorst/palmerpenguins/master/data-raw/penguins_raw.csv p2data = https://raw.githubusercontent.com/rianrajagede/penguin-python/master/Datasets/penguins.csv df.head()
видовой остров bill_length_mm bill_depth_mm flipper_length_mm body_mass_g пол 0 Адели Торгерсен 39,1 18,7 181,0 3750,0 Самец 1 Адели Торгерсен 39,5 17,4 186,0 3800,0 Самка 2 Адели Торгерсен 40,3 18,0 195,0 3250,0 Самка 3 Адели Торгерсен NaN NaN NaN NaN NaN 4 Адели Торгерсен 36,7 19,3 193,0 3450,0 Женщины
Итак, набор данных состоит из 7 столбцов:
• виды: виды пингвинов (Чинстрап, Адели или Генту).
• culmen_length_mm
• глубина стебля (мм)
• flipper_length_mm: длина плавника (мм)
• body_mass_g: масса тела (г)
• остров: название острова (Дрим, Торгерсен или Биско) в архипелаге Палмера (Антарктида)
• секс: секс пингвинов
Предварительная обработка
Мы должны предварительно обработать данные, иначе мы получим исключение: ValueError: Input содержит NaN, бесконечность или значение, слишком большое для dtype(‘float64’). Итак, мы очищаем эти NaN и альтернативно можем также удалить целевой столбец:
print(df.isnull().sum()) df = df.dropna() # df = df.drop(df[df['species'] == 'Gentoo'].index) species 0 island 0 bill_length_mm 2 bill_depth_mm 2 flipper_length_mm 2 body_mass_g 2 sex 11 dtype: int64
Pandas как df — это популярная библиотека Python, используемая для работы с табличными данными. Он предоставляет универсальный объект dataframe, который может считывать данные из многих популярных форматов, таких как Excel, SQL, CSV и других.
Стиль Pandas
импортировать панд как pd
data = {
«калории»: [420, 380, 390],
«длительность»: [50, 40, 45]
}
#загрузить данные в объект DataFrame :
df = pd.DataFrame(data)
print(df)
Кластер
Чтобы лучше понять, мы хотим сгруппировать данные. «Ковариация» указывает направление линейной зависимости между переменными. С другой стороны, «корреляция» измеряет как силу, так и направление линейной зависимости между двумя переменными.
from sklearn.cluster import KMeans print("CLUSTERING ON CULMEN LENGTH AND CULMEN DEPTH") X = df[["bill_length_mm","bill_depth_mm"]] kmeans = KMeans(n_clusters=3) kmeans.fit(X) y_kmeans = kmeans.predict(X) plt.scatter(X.loc[:,"bill_length_mm"],X.loc[:,"bill_depth_mm"],c=y_kmeans,s=50,cmap="viridis") centers = kmeans.cluster_centers_ plt.scatter(centers[:, 0], centers[:, 1], c="black", s=200, alpha=0.5) plt.show()
График Cluster взят из import matplotlib.pyplot as plt. Базовый вызов pip установит seaborn и, при необходимости, его обязательные зависимости. Можно включить необязательные зависимости, дающие доступ к нескольким расширенным функциям:
pip install seaborn[stats].
Массивы Numpy — хорошая замена спискам Python. Они лучше, чем списки Python. Они обеспечивают более высокую скорость и занимают меньше места в памяти. Начнем с его определения для тех, кто не знает о массивах numpy. Это многомерные матрицы или списки фиксированного размера с похожими элементами.
классифицировать
Точечная диаграмма в начале (парная диаграмма) от Seaborn, которая показывает нам корреляцию по отношению к другим функциям. Этот метод помогает просто выяснить важные признаки, которые в наибольшей степени учитывают классификацию в нашей модели. Теперь я устанавливаю «виды» в качестве целевой переменной y и 3 признака как X для классификации видов:
X = df[["bill_length_mm", "bill_depth_mm","flipper_length_mm"]] y = df["species"] print(X.shape) print(y.shape) (333, 3) (333,)
Когда вы слышите слово «байесовский», вы можете подумать о наивном байесовском подходе. Однако байесовские принципы также можно использовать для выполнения регрессии. В этой статье мы обсудим и реализуем байесовскую гребенчатую регрессию, которая отличается от обычной гребенчатой регрессии. Чтобы узнать больше о регулярной регрессии гребня, вы можете перейти по этой ссылке.
Алгоритм использует гиперпараметр для управления силой регуляризации и полностью интегрирует гиперпараметр в апостериорном распределении, применяя гиперприор, выбранный таким образом, чтобы он был приблизительно неинформативным.
Алгоритм Scikit-learn использует сопряженное априорные значения, и из-за этого ограничено использование априорной гаммы, которая требует, чтобы четыре гиперпараметра были выбраны произвольно, чтобы они были небольшими значениями. Кроме того, для этого требуются начальные значения параметров αα и λλ, которые затем обновляются на основе данных.
Поскольку пропущенные значения уже удалены с помощью dropna, нам не нужно беспокоиться об этом сейчас, и мы готовы классифицировать с небольшой предварительной обработкой:
from sklearn import preprocessing X = preprocessing.scale(X) #splitting the data from sklearn.model_selection import train_test_split X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.4,random_state=13) # model fitting and prediction from sklearn.linear_model import LogisticRegression model = LogisticRegression().fit(X_train, y_train) pred = model.predict(X_test) print(pred[1:50])
При использовании набора данных для анализа вы должны проверить свои данные, чтобы убедиться, что они содержат только конечные числа и не содержат значений NaN (не числа). Если вы попытаетесь передать набор данных, содержащий значения NaN или бесконечность, в функцию для анализа, вы получите сообщение об ошибке: ValueError: input содержит nan, бесконечность или значение, слишком большое для dtype(‘float64’).
['Chinstrap' 'Adelie' 'Adelie' 'Gentoo' 'Gentoo' 'Adelie' 'Adelie' 'Adelie' 'Adelie' 'Gentoo' 'Adelie' 'Adelie' 'Adelie' 'Chinstrap' 'Gentoo' 'Chinstrap' 'Gentoo' 'Gentoo' 'Gentoo' 'Adelie' 'Adelie' 'Adelie' 'Chinstrap' 'Gentoo' 'Chinstrap' 'Adelie' 'Adelie' 'Gentoo' 'Chinstrap' 'Gentoo' 'Chinstrap' 'Adelie' 'Gentoo' 'Gentoo' 'Adelie' 'Gentoo' 'Chinstrap' 'Adelie' 'Chinstrap' 'Adelie' 'Adelie' 'Gentoo' 'Adelie' 'Adelie' 'Adelie' 'Gentoo' 'Adelie' 'Gentoo' 'Adelie']
Бенчмаркинг
У нас есть 333 (266) выборок с 3 функциями для классификации с помощью логистической регрессии, но насколько хороша производительность:
# checking performance of model from sklearn.metrics import classification_report, confusion_matrix, roc_curve, roc_auc_score print('CONFUSION MATRIX') print(confusion_matrix(y_test, pred)) print('CLASSIFICATION REPORT\n') print(classification_report(y_test, pred)) sns.heatmap(confusion_matrix(y_test, pred), annot=True) plt.show() CONFUSION MATRIX [[63 1 0] [ 1 28 0] [ 0 0 41]] CLASSIFICATION REPORT precision recall f1-score support Adelie 0.98 0.98 0.98 64 Chinstrap 0.97 0.97 0.97 29 Gentoo 1.00 1.00 1.00 41 accuracy 0.99 134 macro avg 0.98 0.98 0.98 134 weighted avg 0.99 0.99 0.99 134
Оценивать
Оценка классификатора означает измерение того, насколько точно предсказанные классы или метки соответствуют истинным меткам в оценочном наборе. В бинарной классификации мы обычно называем меньший и более интересный из двух классов положительным, а больший/другой класс отрицательным. В проблеме медицинского диагноза пациенты, у которых есть заболевание, обычно будут положительными, а остальные - отрицательными.
Папуасский пингвин — это вид пингвинов из рода Pygoscelis, наиболее
родственный пингвину Адели и антарктическому пингвину. Как мы видели, каждый пингвин принадлежит к одному из трех следующих видов: Адели,
Генту и Антарктический. См. иллюстрацию выше (и ниже), сначала изображающую в парной корреляционной матрице три разных вида пингвинов. Но Gentoo легко восстановить как почти четкое различие.
Попробуйте на ноутбуке Jupyter: