# Загружаем трейновую выборку и ответы
import pandas as pd
raw_train_dataframe = pd.read_table('train.csv', sep=',')
train_dataframe = raw_train_dataframe.drop('id', axis=1)
import numpy as np
train_sample = train_dataframe.drop('label', axis=1).values
train_sample_answers = train_dataframe['label'].values

# Обучаемся
from sklearn.linear_model import LogisticRegression
classifier = LogisticRegression(random_state=42)
classifier.fit(train_sample, train_sample_answers)

# Загружаем тестовыую выборку
raw_test_dataframe = pd.read_table('test.csv', sep=',')
test_dataframe = raw_test_dataframe.drop('id', axis=1)
test_sample = test_dataframe.values

# Предсказываем
test_sample_answers = classifier.predict(test_sample).reshape(-1, 1)

# Пишем выходной файлик
submission = np.hstack([np.arange(1, len(test_sample_answers) + 1).reshape(-1, 1), test_sample_answers])
import csv
with open('submission.csv', 'w', newline='') as csvfile:
    writer = csv.writer(csvfile, delimiter=',')
    writer.writerow(['id', 'label'])
    writer.writerows(submission)

"""
Explanation: <span style="font-size: 14pt">MIPT, Advanced ML, Spring 2018</span>
<span style="font-size: 16pt"> HW #5: Linear Models 
<span style="color:blue; font-size: 12pt">Alexey Romanenko </span>,
<span style="color:blue; font-size: 12pt; font-family: 'Verdana'"> alexromsput@gmail.com</span>
<h1 align="center">Organization Info</h1>


Дедлайн 11 апреля 2018 02:59 для всех групп.
В качестве решения задания нужно прислать ноутбук с подробными комментариями (<span style='color:red'> без присланного решения результат контеста не будет засчитан </span>).
<span style='color:red'>Название команды в контесте должно соответствовать шаблону: НомерГруппы_Имя_Фамилия, например, 594_Ivan_Ivanov</span>.

Оформление дз: 
- Присылайте выполненное задание на почту ml.course.mipt@gmail.com
- Укажите тему письма в следующем формате ML2018_fall_&lt;номер_группы&gt;_&lt;фамилия&gt;, к примеру -- ML2018_fall_495_ivanov
- Выполненное дз сохраните в файл &lt;фамилия&gt;_&lt;группа&gt;_task&lt;номер&gt;.ipnb, к примеру -- ivanov_401_task5.ipnb
Вопросы:
- Присылайте вопросы на почту ml.course.mipt@gmail.com
- Укажите тему письма в следующем формате ML2018_fall Question &lt;Содержание вопроса&gt;


PS1: Используются автоматические фильтры, и просто не найдем ваше дз, если вы неаккуратно его подпишите.
PS2:  Просроченный дедлайн снижает максимальный вес задания по формуле, указнной на первом семинаре
PS3: Допустимы исправление кода предложенного кода ниже, если вы считаете

<h1 align="center">Check Questions </h1>

Ниже приводится список вопросов, с ответами на которые может быть полезно разобраться
для понимания темы.
1. Как выглядит решающее правило в линейной классификации? А зависимость, которой мы приближаем ответы в линейной регрессии?
2. Что такое функции потерь в задачах классификации и регрессии? Зачем они нужны?
3. Что такое регуляризаторы? Какими они бывают в задачах линейной классификации и регрессии? Зачем они нужны?
4. Как в общем виде выглядит оптимизационная задача в линейной классификации или линейной регрессии?
5. Как работает настройка весов в линейной модели с помощью SGD (Stochastic Gradient Decent)? Как выглядит правило обновления весов?
6. Учитывается ли коэффициент сдвига w0 в регуляризаторе? Почему?
7. Почему линейные модели рекомендуется применять к выборке с нормированными значениями признаков?
8. Как выглядит оптимизационная задача в логистической регрессии? А в SVM?
9. Выпишите и докажите формулу для весов в линейной регрессии (с квадратичной функцией потерь).
То же самое для гребневой регрессии.
10. Выпишите SGD для логистической регрессии с $l2$-регуляризацией и для SVM с линейным ядром.
11. В чем заключается идея ядер в SVM?
12. Какие преимущества и недостатки есть у линейных моделей?
13. На какие 3 матрицы раскладывается произвольная матрица при SVD? Что такое сингулярные числа
<h1 align="center">Contest 1 (40%)</h1>
 Ссылка на контест:  https://www.kaggle.com/t/68e2660e41d94d64a3c2251a1df16ab3
Критерии оценивания
Для того чтобы получить оценку нужно
* 1) прислать код вашей модели (можно использовать только линейные модели), которая выдает один из финальных сабмиттов.
* 2) чтобы получить
    - хор (5)  и выше нужно превзойти результат benchmark_1;
    - отл (8) и выше нужно превзойти результат benchmark_2;
* 3) Ваше имя в лидерборде должно иметь вид <НомерГруппы>_Имя_Фамилия, например: 594_Иван_Иванов. Если имя не будет соответствовать формату организаторы вправе снизить оценку.
End of explanation
"""


# your code here

"""
Explanation: Получилось так: бенчмарк 2 на прайвате 0.88593, у меня вот так:

<h1 align="center">Contest 2 (40%)</h1>
* Ссылка на контест: https://www.kaggle.com/t/2343d1882c6842258e3825b4a8a1e5a8
Критерии оценивания
Для того чтобы получить оценку нужно
* 1) Прислать код вашей модели, которая выдает один из финальных сабмиттов.
* 2) чтобы получить
    - хор (5)  и выше нужно превзойти результат benchmark_1;
    - отл (8) и выше нужно превзойти результат benchmark_2;
* 3) Ваше имя в лидерборде должно иметь вид <НомерГруппы>_Имя_Фамилия, например: 594_Иван_Иванов. Если имя не будет соответствовать формату организаторы вправе снизить оценку.
End of explanation
"""


