Классификация листьев растений: исследовательский анализ - часть 1

  1. вменение в вину
  2. Корреляционный анализ
  3. Маржинальная черта
  4. Форма фигуры
  5. Текстурная черта
  6. Рекомендации
  7. связанные с

категории

  1. Получение данных

Теги

  1. Управление данными
  2. Визуализация данных
  3. Исследовательский анализ
  4. R Программирование

В этом посте я собираюсь провести предварительный анализ набора данных листьев растений, предоставленного репозиторием машинного обучения UCI по адресу эта ссылка , Ожидается, что набор данных будет состоять из шестнадцати образцов каждого из ста видов растений. Его анализ был введен в работе. [1]. В этой статье описывается метод, разработанный для работы в условиях небольшого размера обучающего набора и, возможно, неполного извлечения признаков.

Это мотивировано отдельной обработкой трех типов объектов:

Затем они объединяются для обеспечения общего указания вида (и соответствующей вероятности). Для точного описания этих функций, пожалуйста, см. [1] где классификация реализуется оценщиком плотности K-Nearest-Neighbor. Ссылка [1] авторы показывают точность, достигнутую классификацией K-Nearest-Neighbor для любой комбинации используемых наборов данных (см. [1] Таблица 2).

пакеты

suppressPackageStartupMessages (library (caret)) suppressPackageStartupMessages (library (dplyr)) suppressPackageStartupMessages (library (ggplot2)) suppressPackageStartupMessages (library (corrplot)) suppressPackageStartupMessages (библиотека (hmisc))

Получение данных

Мы можем загрузить набор данных листа в виде zip-файла, воспользовавшись следующей ссылкой UCI Machine Learning.

URL

Интересующие файлы:

margin_file

это может быть так извлечено.

files_to_unzip

Мы читаем их как файлы CSV. Заголовок изначально не предоставляется.

margin_data

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

dim (margin_data) ## [1] 1600 65 dim (shape_data) ## [1] 1600 65 dim (texture_data) ## [1] 1599 65

Мы заметили, что набор данных текстуры имеет на одну строку меньше. Такая проблема будет исправлена ​​позже.

sum (complete.cases (margin_data)) == nrow (margin_data) ## [1] TRUE sum (complete.cases (shape_data)) == nrow (shape_data) ## [1] TRUE sum (complete.cases (texture_data) ) == nrow (texture_data) ## [1] TRUE

Нет значения NA присутствуют. Наименование столбца необходимо из-за отсутствия заголовка.

n_features

Мы подсчитываем количество записей для каждого вида в каждом наборе данных.

margin_count

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

which (margin_count! = texture_count) ## Acer Campestre ## 1 which (shape_count! = texture_count) ## Acer Campestre ## 1

Отсутствующая запись о текстуре связана с видами Acer Campestre. Добавление столбца идентификатора ко всем наборам данных для возможности объединения (объединения) наборов данных.

margin_data

вменение в вину

Далее мы исправим пропущенную запись методом вменения, основанным на медиане. Мы предполагаем, что пропущенная запись связана с 16-й выборкой текстурных данных Acer Campestre, которая является первым видом растений из наших наборов данных. Для этой цели мы используем временный набор данных, состоящий из первых 15 записей, а затем добавляем такую ​​новую строку с медианными вычисленными данными. После этого мы «связываем строки» такого временного набора данных с остальными исходными образцами текстуры.

дд ## [1] 1600 66

Вот что мы получили в конце.

str (margin_data) ## 'data.frame': 1600 наб. из 66 переменных: ## $ разновидностей: фактор с 100 уровнями "Acer Campestre", ..: 1 1 1 1 1 1 1 1 1 1 ... ## $ margin1: num 0,00391 0,00586 0,01172 0,01367 0,00781 ... # # $ margin2: число 0,00391 0,01367 0,00195 0,01172 0,00977 ... ## $ margin3: число 0,0273 0,0273 0,0273 0,0371 0,0273 ... ## $ margin4: число 0,0332 0,0254 0,0449 0,0176 0,0254 ... ## $ margin5: число 0,00781 0,01367 0,01758 0,01172 0,00195 ... ## $ margin6: число 0,01758 0,0293 0,04297 0,08789 0,00586 ... ## $ margin7: число 0,0234 0,0195 0,0234 0,0234 0,0156 ... ## $ margin8: число 0,00586 0 0 0 0 ... ## $ margin9: num 0 0.00195 0.00391 0 0.00586 ... ## $ margin10: num 0.0156 0.0215 0.0195 0.0273 0.0176 ... .... .... str (shape_data) ## 'data.frame': 1600 obs. из 66 переменных: ## $ разновидностей: фактор с 100 уровнями "Acer Campestre", ..: 2 2 2 2 2 2 2 2 2 2 ... ## $ shape1: num 0.000579 0.00063 0.000616 0.000613 0.000599 ... # №: 0.000643 0.000616 ... ## $ shape6: num 0.000614 0.00064 0.000552 0.000647 0.000639 ... ## $ shape7: num 0.000611 0.000646 0.000551 0.000663 0.000631 ... ## $ shape8: num 0.000611 0.000624 0.000552 0.000658 0.000634 ... ## shape9: num 0.000611 0.000584 0.000531 0.000635 0.000639 ... ## $ shape10: num 0.000594 0.000546 0.00053 0.0006 0.000596 ... ... str (texture_data) ## 'data.frame': 1600 obs. из 66 переменных: ## $ разновидностей: фактор с 100 уровнями "Acer Campestre", ..: 1 1 1 1 1 1 1 1 1 1 ... ## $ texture1: число 0,02539 0,00488 0,01855 0,03516 0,03809 ... # # $ texture2: число 0,0127 0,0186 0,0137 0,0234 0,0146 ... ## $ texture3: число 0,003906 0,00293 0,00293 0,000977 0,003906 ... ## $ texture4: число 0,004883 0 0,00293 0 0,000977 ... ## $ texture5: число 0,0391 0,0693 0,0518 0,0615 0,0469 ... ## $ texture6: число 0 0 0 0 0 0 0 0 0 0 ... ## $ texture7: число 0,0176 0,0137 0,0195 0,0215 0,0225 ... ## $ texture8: число 0,0352 0,0439 0,0352 0,0615 0,0537. .. ## $ texture9: число 0,0234 0,0264 0,0225 0,0107 0,0195 ... ## $ texture10: число 0,013672 0 0,000977 0,001953 0,004883 ... ... ...

Корреляционный анализ

Поскольку ковариаты полей, формы и текстуры являются количественными переменными, интересно оценить корреляцию между такими характеристиками листьев.

Мы делаем это, используя преимущества корреляционного графика. Мы покажем это для функции margin1.

M_L

График корреляции не так легко интерпретировать. Поэтому мы внедряем процедуру, способную отфильтровывать значимые и наиболее важные корреляции. Для этой цели мы используем вспомогательную функцию с именем flattenCorrMatrix, которую можно найти в ссылке. [3].

flattenCorrMatrix

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

Фильтр Most_correlated% (фильтр p% (abs (cor)> порог)) flat_cor [, - 4] # избавление от столбца p-значения}

Вот что мы получаем в качестве матрицы корреляции для набора данных margin_data и функции margin2 с порогом, равным 0,7.

corr_margin2 ## строка столбец ## кор 1 клёна змеекорого багрянника европейского 0,7038700 ## 2 багрянника европейского Cornus Controversa -0,7294585 ## 3 Acer Моно лириодендрон тюльпанового -0,7032354 ## 4 падуба остролистного Morus Nigra 0,7647532 ## 5 Acer Opalus Populus Grandidentata -0,7751047 # # 6 Cercis Siliquastrum Prunus Avium 0.7295616 ## 7 Cornus Chinensis Pterocarya Stenoptera 0.7345398 ## 8 Alnus Cordata Quercus Brantii 0,7257876 ## 9 Acer Campestre Quercus Phillyraeoides -0,7150759 ## 10 Cercus 0,55-го класса в мире # 12 Castanea Sativa Quercus Variabilis 0.7299116 ## 13 Acer Rufinerve Quercus Vulcanica 0.7180856

Если мы хотим собрать все матрицы корреляции для margin_data, вот как мы можем это сделать.

margin_names

Давайте посмотрим на матрицу корреляции как элемент такого списка.

margin_corr_l [["margin32"]] ## столбец строки cor ## 1 Эвкалипт Urnigera Morus Nigra 0.7623514 ## 2 Эвкалипт Urnigera Olea Europaea 1.0000000 ## 3 Morus Nigra Olea Europaea 0.7623514 ## 4 Cercis Siliqurifph Quérus 0,73 (5) Cercis Siliqurifrum Quercus Quercus Brantii 0.8071712 ## 6 Populus Adenopoda Quercus Castaneifolia 0.7092994 ## 7 Quercus Coccifera Quercus Crassipes 0,7422717 ## 8 Arundinaria Simonii Quercus Ellipsoidalis 0,7625542 ## 9 Cornus Controversa Quercus Gulfg # 0 # 10 0.7682705 ## 12 Cytisus Battandieri Quercus Shumardii -0.7324311 ## 13 Quercus Ilex Quercus Suber 0.8382549 ## 14 Quercus Dolicholepis Quercus Texana 0,7090909 ## 15 Quercus Pubescens Salix Intergra 0,7603719 ## 16-го желтого кишечника (0,75 лет) - 0-я пятнисто-желтая пятнистая клозоподобная мышца (Vlex). ## 18 Betula Pendula Viburnum x Rhytidophylloides -0.7224267 ## 19 Populus Grandidentata Зелькова Серра та 0,7453458

Здесь мы делаем то же самое для наборов характеристик формы и текстуры. Для набора данных формы мы показываем результат матрицы корреляции признаков shape3.

shape_names shape_corr_l [["shape3"]] ## строка столбца cor ## 1 Acer Campestre Arundinaria Simonii 0.7643580 ## 2 Alnus Viridis Callicarpa Bodinieri -0.7467261 ## 3 Acer Platanoids Morus Nigra -0.7674200 ## 4 Магнолия 0,730 5 Prunus Avium Pterocarya Stenoptera 0.7042563 ## 6 Morus Nigra Quercus Cerris -0.7316674 ## 7 Quercus Alnifolia Quercus Chrysolepis 0,7019743 ## 8 Eucalyptus Glaucescens Quercus Crassifolia 0,7414744 ## 9 Quercus Cerris Cerris Cergis 0,741480 # 8 11 Quercus Castaneifolia Quercus Phillyraeoides 0.7305218 ## 12 Cornus Macrophylla Quercus Rubra 0.8231097 ## 13 Morus Nigra Quercus Texana 0,7232813 ## 14 Populus Nigra Quercus Трояна -0,7157611 ## 15 Quercus Alnifolia Quercus # 2 080 2 Vul. # 17 Quercus Castaneifolia Ulmus Bergmanniana 0.7747396

Для набора данных текстуры мы показываем результат матрицы корреляции признаков текстуры19.

texture_names texture_corr_l [["texture19"]] ## строка столбца cor ## 1 Acer Palmatum Callicarpa Bodinieri -0.8069241 ## 2 Cornus Macrophylla Ilex Aquifolium 0.7243966 ## 3 Eucalyptus Glaucescens Лириодендрон Tulipifera 0,75–5-ый кишечный кустарник # 5605385 (560) - 5-го рода, 5-го рода, обыкновенный, пятнистый, пятнистый, пятнистый, пятнистый, пятнистый, пятнистый, пятнистый, пятнистый, пятнистый. Acer Моно Оле Еуропеа 0.8007114 ## 6 ольха красной Олеа Еуропеа 0.7121676 ## 7 ликвидамбар смолоносного Quercus Chrysolepis 0.7252803 ## 8 магнолия Heptapeta Quercus Coccinea 0.7512588 ## 9 магнолия Heptapeta Quercus Crassifolia 0.8270324 ## 10 Quercus Quercus Coccinea Crassifolia 0.7479191 ## 11 Lithocarpus Cleistocarpus Quercus Crassipes 0.7031255 ## 12 Cotinus Coggygria Quercus Palustris 0.7104135 ## 13 Alnus Sieboldiana Quercus Pyrenaica 0.7401955 ## 14 Ilex Cornuta Quercus Trojana 0,7432011 ## 15 Morus Nigra Quercus Trojana 0,7238492 # 163-го шиповника 17-го поколения в своем составе Quicus Cragus Pyracica 0,7012955 ## 15 Morus Nigra Quercus Trojana 0,7238492 # 163-го шиповника 17-го поколения в своем роде Ария 0,7345942 ## 18 Eucalyptus Neglecta Tilia Oliveri 0.7565882 ## 19 Prunus Avi гм Viburnum x Rhytidophylloides -0,7451209 ## 20 Alnus Viridis Zelkova Serrata -0,7052669

Кроме того, собирая количество рядов таких корреляционных матриц, можно выявить наиболее коррелированные признаки среди ста видов листовых растений.

t ggplot (data = margin_c, aes (x = функция, y = значение, заливка = функция)) + theme_bw () + theme (legend.position = "none") + geom_histogram (stat = 'identity') +ordin_flip ()

position = none) + geom_histogram (stat = 'identity') +ordin_flip ()

ggplot (data = margin_c, aes (x = функция, y = значение, заливка = функция)) + theme_bw () + theme (legend.position = "none") + geom_histogram (stat = 'identity') +ordin_flip ()

position = none) + geom_histogram (stat = 'identity') +ordin_flip ()

ggplot (data = margin_c, aes (x = функция, y = значение, заливка = функция)) + theme_bw () + theme (legend.position = "none") + geom_histogram (stat = 'identity') +ordin_flip ()

position = none) + geom_histogram (stat = 'identity') +ordin_flip ()

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

species_boxplot

Маржинальная черта

Для каждого элемента поля можно создать коробочную диаграмму, как показано ниже. Здесь блокпост, связанный с функцией margin1.

kind_boxplot (margin_data, "margin1")

kind_boxplot (margin_data, margin1)

Если вы заинтересованы в получении сводного отчета, вы можете воспользоваться следующей строкой кода.

с (margin_data, tapply (margin1, разновидности, резюме))

Форма фигуры

Мы покажем блокпост для элементов формы, рассмотрев в качестве примера shape20.

kind_boxplot (shape_data, "shape20")

kind_boxplot (shape_data, shape20)

Текстурная черта

Мы покажем блокпост для текстурных объектов, рассмотрев фактуру31 в качестве примера.

pes_boxplot (texture_data, "texture31")

pes_boxplot (texture_data, texture31)

Сохранение текущей среды для дальнейшего анализа.

save.image (файл = 'PlantLeafEnvironment.RData')

Рекомендации

  1. Чарльз Малла, Джеймс Коуп и Джеймс Оруэлл, «КЛАССИФИКАЦИЯ РАСТИТЕЛЬНЫХ ЛИСТОВ С ИСПОЛЬЗОВАНИЕМ ВЕРОЯТНОЙ ИНТЕГРАЦИИ ФОРМЫ, ОСОБЕННОСТИ ФОРМЫ И КРАЯ», ссылка на сайт
  2. 100 Набор Листьев Растений
  3. Матрица корреляции: краткое руководство
    1. Связанный пост

      1. Анализ данных протеомики (1/3): сбор и очистка данных
      2. Доступ к веб-данным (JSON) в R с использованием httr
      3. Zomato Web Scraping с BeautifulSoup в Python
      4. Обработка огромного набора данных с помощью Python
      5. Поиск популярной индийской платформы для блогов с помощью Web Scraping на Python

      связанные с

      R-bloggers.com предложения ежедневные обновления по электронной почте около р новости и учебные пособия на такие темы, как: Наука о данных , Большие данные, R рабочих мест визуализация ( ggplot2 , присущи рефлективный, вербальный , карты , анимация ), программирование ( RStudio , Sweave , Латекс , SQL , Затмение , мерзавец , Hadoop , Web Scraping ) статистика ( регрессия , PCA , Временные ряды , торговый ) и многое другое ... Если вы зашли так далеко, почему бы не подписаться на обновления с сайта? Выберите свой вкус: Эл. почта , щебет , RSS , или же facebook ...