<hr> Общая информация
Срок сдачи: 3 июня 2017, 23:59 <br>
При отправлении ДЗ на почту hse.minor.dm+2@gmail.com
указывайте фамилию в названии файла, а тему письма оформляйте в следующем виде:<br>
** [ИАД-2] {Фамилия} {Имя} ДЗ{Номер} **<br>
Сопровождайте ваш код изображеними, комментариями и выводами. <br> Иммейте ввиду, что на некоторые задачи нет единственного верного и полного ответа. Чем больше информации вы сможете извлечь, аргументированных выводов сформулировать, тем лучше.
Используйте данный Ipython Notebook при оформлении домашнего задания. <hr>
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import os
%matplotlib inline
plt.style.use('ggplot')
plt.rcParams['figure.figsize'] = (12,8)
# Для кириллицы на графиках
font = {'family': 'Verdana',
'weight': 'normal'}
plt.rc('font', **font)
Задание основано на Kaggle соревновании Leaf Classification.
Помните Iris? Данные, с которыми вам предстоит работать в этом задании концептуально похожи на ирисы.
Дана информация о 990 листьях, каждый из которых был сорван с одного из 99 видов растений. Необходимо построить модель, которая могла бы определить, к какому растению относится каждый лист.
Загрузите файл table_data.csv
.
В нем вы можете найти
DATA_DIR = os.path.join('data')
IMG_DIR = os.path.join(DATA_DIR, 'images')
filepath = os.path.join(DATA_DIR, 'table_data.csv')
table_data = pd.read_csv(filepath)
table_data.head()
id | species | margin1 | margin2 | margin3 | margin4 | margin5 | margin6 | margin7 | margin8 | ... | texture55 | texture56 | texture57 | texture58 | texture59 | texture60 | texture61 | texture62 | texture63 | texture64 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | Acer_Opalus | 0.007812 | 0.023438 | 0.023438 | 0.003906 | 0.011719 | 0.009766 | 0.027344 | 0.0 | ... | 0.007812 | 0.000000 | 0.002930 | 0.002930 | 0.035156 | 0.0 | 0.0 | 0.004883 | 0.000000 | 0.025391 |
1 | 2 | Pterocarya_Stenoptera | 0.005859 | 0.000000 | 0.031250 | 0.015625 | 0.025391 | 0.001953 | 0.019531 | 0.0 | ... | 0.000977 | 0.000000 | 0.000000 | 0.000977 | 0.023438 | 0.0 | 0.0 | 0.000977 | 0.039062 | 0.022461 |
2 | 3 | Quercus_Hartwissiana | 0.005859 | 0.009766 | 0.019531 | 0.007812 | 0.003906 | 0.005859 | 0.068359 | 0.0 | ... | 0.154300 | 0.000000 | 0.005859 | 0.000977 | 0.007812 | 0.0 | 0.0 | 0.000000 | 0.020508 | 0.002930 |
3 | 5 | Tilia_Tomentosa | 0.000000 | 0.003906 | 0.023438 | 0.005859 | 0.021484 | 0.019531 | 0.023438 | 0.0 | ... | 0.000000 | 0.000977 | 0.000000 | 0.000000 | 0.020508 | 0.0 | 0.0 | 0.017578 | 0.000000 | 0.047852 |
4 | 6 | Quercus_Variabilis | 0.005859 | 0.003906 | 0.048828 | 0.009766 | 0.013672 | 0.015625 | 0.005859 | 0.0 | ... | 0.096680 | 0.000000 | 0.021484 | 0.000000 | 0.000000 | 0.0 | 0.0 | 0.000000 | 0.000000 | 0.031250 |
5 rows × 194 columns
random_seed
, который необходимо будет использовать при всех случаях использования генератора случайных чиселspecies
из исходных данных - вы должны получить одномерный numpy массив с метками классов от 0 до 98X
запишите значения признаков margin, shape, texture - вы должны получить многомерный numpy массивfrom sklearn.preprocessing import LabelEncoder
random_seed = ...
File "<ipython-input-7-7d539db50ee7>", line 1 random_seed = ... ^ SyntaxError: invalid syntax
# Your Code Here
from sklearn.model_selection import StratifiedShuffleSplit
# Your Code Here
На кросс-валидации по обучающей выборке сравните качество и скорость
StratifiedKFold
с 4 фолдами для оценки качестваaccuracy
# Your Code Here
В папке images
лежат 1584 изображения различного размера, названные в соответствии с id из файла table_data.csv
.
filepath = os.path.join(IMG_DIR, '33.jpg')
img = plt.imread(filepath)
img.shape
(357, 700)
plt.imshow(img, cmap='Greys')
plt.grid(None)
Необходимо
table_data
Пункт 1. можно сделать двумя способами:
В результате этого задания вы должны получить получить массив изображений IMG_train и IMG_test для обучающей и контрольной выборки.
from scipy.misc import imresize
img_resized = imresize(img, (100, 100))
plt.imshow(img_resized, cmap='Greys')
plt.grid(None)
# Your Code Here
n_components=2, perplexity=[5,10,20,30,50], method='exact', n_iter=5000, learning_rate=500
.scatter-plot
графиков с точками, расскашенными в цвет своего класса (для наглядности в plt.scatter
укажите cmap=plt.cm.Paired
)# Your Code Here
Составьте Pipeline
из PCA и предиктивной модели
# Your Code Here
С помощью GridSearchCV
или RandomizedSearchCV
подберите параметры для случайного леса
StratifiedKFold
на 4х фолдахaccuracy
# Your Code Here
# Your Code Here
За это задание можно получить 2 дополнительных балла, но сделать его надо безукоризненно =)
Сейчас мы попробуем использовать данные с изображений и табличные данные, которые затем пойдут на вход случайному лесу. Далее надо будет подобрать оптимальные гиперпараметры случайного леса с помощью кросс-валидации
# Your Code Here
Наш Pipeline условно изображен на рисунке ниже:
Из объединенных данных в матрице А
PCA
В результате в переменную model вы должны записать весь Pipeline из шагов 1-4
А
можно использовать FunctionTransformer
(см. пример ниже)FeatureUnion
from sklearn.preprocessing import FunctionTransformer
from sklearn.pipeline import FeatureUnion
def select_col_idx(X, col_idx=[1]):
return X[:, col_idx]
trans = FunctionTransformer(select_col_idx, kw_args={'col_idx': [2,3]})
trans.fit_transform(A_train)
array([[ 0.007812, 0.044922], [ 0.054688, 0.005859], [ 0.039062, 0.046875], ..., [ 0.033203, 0.003906], [ 0.033203, 0.001953], [ 0.03125 , 0.023438]])
# Your Code Here
# Your Code Here