задний план
О Каггле
- www.kaggle.com/
- Это место, которое предоставляет вам идеальные данные, предоставляет вам практические сценарии применения и может работать с вашими друзьями в области интеллектуального анализа данных. ! !
Kaggle – это онлайн-платформа для экспериментов с данными, предназначенная для обучения, обмена и соревнования. Она похожа на KDD-CUP (Международное соревнование по открытию знаний и интеллектуальному анализу данных). Предприятия или исследователи могут публиковать на Kaggle справочную информацию, данные, индикаторы ожиданий и т. д. найти решения от ученых и энтузиастов данных со всего мира. Друзья, которые любят данные (дон) данные (шоу) майнинг (чжэ) майнинг (тэн), могут загружать/анализировать данные, использовать статистику/машинное обучение/интеллектуальный анализ данных и другие знания для построения моделей алгоритмов, получения результатов и отправки. награды за высокие рейтинги!
О катастрофе на Титанике
- Фоновая страница вопроса
- Скачать страницу данных
- фон титанической проблемы
- Это история о «валете и розе» или «ты прыгаешь, я прыгаю», которой всем промывали мозги с детства до взрослой жизни. Яхта затонула после столкновения с айсбергом. Пассажиры запаниковали, а второй капитан был «женщина и ребенок в первую очередь», поэтому модель не смотрела на ваше лицо, как на подбрасывание монеты, чтобы решить, спасены ли вы. Но есть определенная предыстория.Что касается приоритета женщин и детей,что еще стоит учитывать.Это проблема,которую мы решим в фиче-инжиниринге позже.
- Тренировочные и тестовые данные представляют собой некоторую личную информацию пассажиров и их выживаемость, попробуйте применить эти данные для построения подходящей модели для прогнозирования.
- Это проблема бинарной классификации (выжила или нет), в этой статье делается попытка использовать логистическую регрессию для решения проблемы.
- инструкция
- "Нет так называемых плюсов и минусов алгоритмов, и нет алгоритма машинного обучения с абсолютно высокой производительностью. Есть только более подходящие алгоритмы машинного обучения под конкретные сценарии, данные и особенности". , для XGBC, random forest, SVC пока не понятно, алгоритм, использованный в этой статье, представляет собой только логистическую регрессию.
Знакомство с данными
В разделе «Данные» мы увидим официальные файлы train.csv и test.csv, которые представляют собой обучающие и тестовые данные соответственно. Мы можем использовать virtualenv для создания «изолированной» среды приложения Python (виртуальной среды). Здесь вам не нужно учитывать версию исходной библиотеки системы, просто нужен pip для управления всем, что вам нужно использовать.
import pandas as pd
import numpy as np
from pandas import Series,DataFrame
data_train = pd.read_csv("./train.csv")
pd.DataFrame(data_train)
pandas — широко используемый пакет обработки данных python.Он считывает файлы csv в формат dataframe.В блокноте jupyter вы можете увидеть, как выглядят наши данные:
Мы можем думать об этом как о листе Excel с 12 столбцами и 891 строкой (представляя в общей сложности 891 пассажира в train_csv). Поле «Выживший» показывает, был ли спасен пассажир (1 — спасен, 0 — не спасен), а остальные — некоторая личная информация.
- PassageId => идентификатор пассажира
- Pclass => класс класса пассажира (1, 2, 3 класс)
- Имя => имя
- Секс => секс
- Возраст => возраст
- SibSp => количество братьев и сестер
- Парч => количество родителей и детей
- Билет => Информация о билете
- Тариф => Тариф
- Кабина => Информация о кабине
- Посадка => порт посадки
data_train.info()
Это дает мне некоторую базовую информацию о data_train, например, о 891 пассажире, но некоторые поля содержат неполные данные. Например, Age (возраст), Cabin (информация о салоне).
data_train.describe()
Какую информацию мы здесь видим? Спасено около 0,38 человека из среднего ряда, средний возраст пассажиров 29,7 года, средний тариф 32,20.
предварительный анализ данных
У каждого пассажира есть около 12 атрибутов, предоставленных нам.Только понимание данных в двух вышеперечисленных линиях операций не может дать нам идеи и идеи.Мы не знаем, какие из них полезны, а какие бесполезны для модели, так что наиболее важная функция инженерной связи. Мы знаем, что окончательный результат — «Выживший», и теперь нам нужно выяснить, какие внутренние отношения имеет окончательный «Выживший» с каждым атрибутом. Из уст первого помощника уже известно, что «женщин и детей надо рассматривать в первую очередь».
for x in data1_x:
if data1[x].dtype != 'float64' :
print('Survival Correlation by:', x)
print(data1[[x, Target[0]]].groupby(x, as_index=False).mean())
print('-'*10, '\n')
print(pd.crosstab(data1['Title'],data1[Target[0]]))
На этом графике мы видим, что 0,74 самки выжили по сравнению с 0,18 самца. Кривой друг из горшка с фруктами действительно уважает даму, и дама сначала хорошо практиковала это. Пол, несомненно, будет добавлен в качестве важной характеристики в окончательную модель. В P-классе вероятность быть спасенным намного выше у пассажиров, чей салон 1-го класса. Что ж, это тоже должно сказаться на конечном результате спасения (пассажиры с более высоким классом должны быть и богаче).
fig = plt.figure()
fig.set(alpha=0.2)
Survived_0 = data_train.Pclass[data_train.Survived == 0].value_counts()
Survived_1 = data_train.Pclass[data_train.Survived == 1].value_counts()
df=pd.DataFrame({'Survived':Survived_1, 'unSurvived':Survived_0})
df.plot(kind='bar', stacked=True)
plt.title("Survived status of all passenger classes")
plt.xlabel("passanger's level")
plt.ylabel("number")
plt.show()
Как мы видим из этого графика, очевидно, что если вы пассажир первого уровня, вероятность того, что вас спасут, будет высокой. Кстати, это тоже фича, которая в итоге повлияет на спасенный результат вывода.
data_train.Age[data_train.Pclass == 1].plot(kind='kde')
data_train.Age[data_train.Pclass == 2].plot(kind='kde')
data_train.Age[data_train.Pclass == 3].plot(kind='kde')
plt.xlabel("age")# plots an axis lable
plt.ylabel("dendity")
plt.title("Age distribution of passengers levels")
plt.legend(('first level', 'second level','third level'),loc='best')
Из возрастного распределения пассажиров каждого класса мы видим, что «разные классы/классы пассажиров могут быть связаны с богатством/статусом, и окончательная вероятность быть спасенными может быть разной», поэтому возраст также будет одной из причин, по которой повлиять на наш конечный результат.
Простая предварительная обработка данных
Мы прошлись по общим данным и имеем общее представление об интересующих атрибутах. Теперь нам нужно кратко обработать эти данные и подготовить их к моделированию машинного обучения. Начнем с наиболее заметных атрибутов данных, Салона и Возраста, потому что эти два элемента не включены в некоторую информацию о пассажирах, а отсутствующие данные окажут слишком большое влияние на следующий шаг.
Давайте сначала поговорим о Cabin, а пока давайте просто последуем тому, что мы только что сказали, в зависимости от того, есть ли данные в Cabin, и обработаем этот атрибут в два типа: Yes и No.
Скажем Возраст:
Обычно мы сталкиваемся с ситуацией отсутствия значения, у нас будет несколько общих способов справиться с этим.
- еслиДоля образцов с пропущенными значениями чрезвычайно высока, мы можем напрямуюсдатьсяТеперь, если он добавлен как функция, вместо этого он может вызвать шум, что повлияет на конечный результат.
- Если выборка пропущенных значений умеренная, а атрибутАтрибуты объектов с дискретными значениями(например, атрибуты категории), затем добавьте NaN в качестве новой категории к функциям категории.
- Если выборка пропущенных значений умеренная, а свойствоАтрибуты объекта с непрерывным значением, иногда мы будем рассматривать заданный шаг (например, возраст здесь, мы можем рассматривать каждые 2/3 года как шаг), а затем сделать егодискретность, затем добавьте NaN в качестве типа в категорию атрибута.
- В некоторых случаях количество пропущенных значений не особенно велико, поэтому мы также можем попытаться подогнать данные на основе существующих значений и добавить их.
В данном случае т.к. кабина не является одной из фич, влияющих на конечный результат. Таким образом, непосредственно рассмотрим другие функции, которые необходимо использовать (пол, уровень, уровень), и преобразуйте тип категории в числовые функции, мы можем использовать «get_dummies» pandas для завершения этой работы и подключить его к исходному «data_train» на
dummies_Embarked = pd.get_dummies(data_train['Embarked'], prefix= 'Embarked')
dummies_Sex = pd.get_dummies(data_train['Sex'], prefix= 'Sex')
dummies_Pclass = pd.get_dummies(data_train['Pclass'], prefix= 'Pclass')
df = pd.concat([data_train, dummies_Embarked, dummies_Sex, dummies_Pclass], axis=1)
df.drop(['Pclass', 'Name', 'Sex', 'Ticket', 'Embarked'], axis=1, inplace=True)
df
на! Мы успешно преобразовали эти категориальные атрибуты в числовые атрибуты 0, 1. Таким образом, кажется, что он почти завершен, но если вы посмотрите на два атрибута Age и Fare, изменения в значениях пассажиров об этих двух атрибутах слишком велики! ! Если вы знаете о логистической регрессии и градиентном спуске, вы будете знать, что разрыв масштаба между атрибутами слишком велик, что нанесет большой вред скорости сходимости (или даже отсутствию сходимости)... Итак, давайте воспользуемся модулем предварительной обработки в scikit- Сначала изучите. Выполните процесс для этих двух атрибутов (то есть охарактеризуйте более крупные изменения в [-1,1])
import sklearn.preprocessing as preprocessing
scaler = preprocessing.StandardScaler()
age_scale_param = scaler.fit(df['Age'])
df['Age_scaled'] = scaler.fit_transform(df['Age'], age_scale_param)
fare_scale_param = scaler.fit(df['Fare'])
df['Fare_scaled'] = scaler.fit_transform(df['Fare'], fare_scale_param)
df
Что ж, первичная обработка данных почти завершена.
моделирование
Мы извлекаем необходимые поля функций, конвертируем их в формат numpy и используем LogisticRegression в scikit-learn для моделирования.
from sklearn import linear_model
# 用正则取出我们要的属性值
train_df = df.filter(regex='Survived|Age_.*|SibSp|Parch|Fare_.*|Cabin_.*|Embarked_.*|Sex_.*|Pclass_.*')
train_np = train_df.as_matrix()
# y 即 Survival 结果
y = train_np[:, 0]
# X 即特征属性值
X = train_np[:, 1:]
# fit 到 RandomForestRegressor 之中
clf = linear_model.LogisticRegression(C=1.0, penalty='l1', tol=1e-6)
clf.fit(X, y)
clf
В ПОРЯДКЕ! ! ! После моделирования таким образом мы получаем модель, а затем просто обрабатываем test.csv через те же данные, чтобы получить результат прогнозирования.
Оптимизация системы
Подожди, ты думаешь, это конец? По сути, это только первый шаг, мы только что сделали базовую модель, все еще базовое, и нам еще нужно оптимизировать.
Однако в текущем сценарии не спешите делать это первым, наша базовая система все еще немного грубовата, а затем копать и копать сначала.
- Во-первых, два атрибута Name и Ticket были нами полностью отброшены (ну, собственно, из-за этих двух атрибутов почти каждая запись представляет собой совершенно другое значение, и мы не нашли очень прямого способа с этим разобраться) .
- Тогда мы думаем, что подбор возраста сам по себе может быть не очень надежной вещью, и мы не можем предсказать неизвестный возраст, хорошо подойдя по другим признакам. Другой, исходя из нашего повседневного опыта, маленькие друзья и пожилые люди могут получать больше заботы Таким образом, возраст как непрерывная величина, при заданном фиксированном коэффициенте, должен иметь положительную или отрицательную корреляцию с возрастом, что, по-видимому, отражает фактическая ситуация заботы на обоих концах, поэтому, возможно, для нас было бы более подходящим дискретизировать возраст и классифицировать его как атрибут категории по сегментам. (Вы можете пойти в kaggle, чтобы увидеть ядра великого бога)
Текст / joeCDC
любитель математики
редактировать /флуоресценция
Автор разрешил опубликовать эту статью, и авторские права принадлежат Chuangyu Frontend. Пожалуйста, укажите источник для перепечатки этой статьи. Ссылка на эту статью:известно Sec-Fed.com/2018-12-04-…
Если вы хотите подписаться на другие сообщения с передовой линии KnownsecFED, выполните поиск и подпишитесь на нашу общедоступную учетную запись WeChat: KnownsecFED. Добро пожаловать, чтобы оставить сообщение для обсуждения, мы ответим как можно скорее.
Спасибо за чтение.