задний план
Titanic: Machine Learning from Disaster - Kaggle
Мне рекомендовали следить за этой игрой 2 года назад, но когда я открыл эту страницу, я был ослеплен и не знал, как начать.
Через два года снова откройте эту страницу и ясно увидитеTitanic Tutorial - Kaggle, вы можете сделать это совершенно глупо. Что тогда ослепило меня~
Target
use machine learning to create a model that predicts which passengers survived the Titanic shipwreck
Data
Titanic: Machine Learning from Disaster - Kaggle
- train.csv
- Survived: 1=yes, 0=No
- test.csv
- gender_submission.csv: for prediction
- PassengerId: those from test.csv
- Survived: final result
Guide to help start and follow
Learning Model
Выдержки из пояснений веб-сайта будут подробно рассмотрены позже.
- random forest model
- constructed of several "trees"
- that will individually consider each passenger's data
- and vote on whether the individual survived.
- Then, the random forest model makes a democratic decision:
- the outcome with the most votes wins!
- constructed of several "trees"
sklearn.ensemble.RandomForestClassifier
используется в конкурсе «Титаник».RandomForestClassifier
алгоритм, прежде чем узнать об этом алгоритме, я заметилsklearn
в этом классе алгоритма находится вensemble
В модуле английский не очень, не знаюensemble
Что значит? Поэтому я хочу знать сначалаensemble
ensemble
Определение словаря:a number of things considered as a group
Звучит как комбинация.
Искал его, в ML естьensemble learning
, перевод в основном "интегрированное обучение", см.С чего начать ансамблевое обучение? - Знаю почтиУпоминалось, что существует три общих структуры ансамблевого обучения:bagging
,boosting
иstacking
.
отСправочник по API — документация scikit-learn 0.22.1Также видно, что эти фреймворки имеют соответствующие алгоритмы.
Random Forest
даbagging
Алгоритм в рамках. Здесь просто постарайтесь сначала понять это, а другие фреймворки встретятся позже. Но прежде чем мы это поймем, мы должны сначала понятьEnsemble Learningчто именно?
In statistics and machine learning, ensemble methods use multiple learning algorithms to obtain better predictive performance than could be obtained from any of the constituent learning algorithms alone.
Это объяснение воспринимается буквально, объединяя несколько алгоритмов для получения более высокой производительности прогнозирования, что лучше, чем использование любого из них по отдельности.
мешочная рама
sklearn.ensemble.BaggingClassifier — документация scikit-learn 0.22.1
A Bagging classifier is an ensemble meta-estimator that fits base classifiers each on random subsets of the original dataset and then aggregate their individual predictions (either by voting or by averaging) to form a final prediction.
Суть в следующем:
- Произвольная выборка подмножества выборок из исходного набора данных
- Обучите классификатор на этом подмножестве образцов
- Повторите вышеуказанные шаги несколько раз
- Затем объедините прогнозы каждого классификатора (среднее или голосование)
- сформировать окончательный прогноз
Проблема в следующем:
- Сколько раз выбирать подмножество, т.е. сколько классификаторов делать?
- Каков алгоритм случайного выбора?
- Каковы преимущества и недостатки усреднения и голосования при интегрировании результатов каждого классификатора?
- Как обучать отдельные классификаторы?
я не знаю~
упомянутый ранееRandom Forest
даbagging
Алгоритм для фреймворка. Теперь давайте посмотрим, как этот алгоритм отвечает на некоторые из моих вопросов.
Алгоритм случайного леса
1.11 Методы ансамбля — документация scikit-learn 0.22.1
The prediction of the ensemble is given as the averaged prediction of the individual classifiers.
Прежде всего ясно, что этот алгоритм является средним значением каждого классификатора. Лес чего? Природа - это лес деревьев, и дерево здесь относится кdecision trees, так что алгоритм на самом делеaveraging algorithms based on randomized decision trees
random forest builds multiple decision trees and merges them together to get a more accurate and stable prediction.
Random forest
Дерево решений строится для каждого классификатора, а затем объединяется.
Как разделяется классификатор? Или возьмите код Титаника в качестве примера, чтобы попытаться понять:
from sklearn.ensemble import RandomForestClassifier
y = train_data["Survived"]
features = ["Pclass", "Sex", "SibSp", "Parch"]
X = pd.get_dummies(train_data[features])
model = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=1)
model.fit(X, y)
-
y
: это множество людей, переживших катастрофу в обучающей выборке -
features
: характерное значение этих людей, например пол, класс класса - X: генерировать фиктивные данные, зачем их использовать
get_dummies
вместо прямого использованияtrain_data[features]
Шерстяная ткань?
попробуй использовать напрямуюtrain_data[features]
, результат печати X таков:
Pclass Sex SibSp Parch
0 3 male 1 0
1 1 female 1 0
Если вы продолжите моделировать этот X, вы получите сообщение об ошибке:
ValueError: could not convert string to float: 'male'
Очевидно, поскольку поле Sex имеет строковый тип, а модель должна иметь тип float, его нельзя использовать напрямую.train_data[features]
Тотget_dummies()
Роль также ясна, то есть преобразовать эти поля строкового типа в типы с плавающей запятой. Как видно из результатов печати ниже, поле Sex разделено на два поля Sex_male, Sex_female, значения которых равны 0 и 1 соответственно.
Pclass SibSp Parch Sex_female Sex_male
0 3 1 0 0 1
1 1 1 0 1 0
2 3 0 0 1 0
3 1 1 0 1 0
4 3 0 0 0 1
.. ... ... ... ... ...
886 2 0 0 0 1
887 1 0 0 1 0
888 3 1 2 1 0
889 1 0 0 0 1
890 3 0 0 0 1
-
RandomForestClassifier(n_estimators=100, max_depth=5, random_state=1)
- Что означают эти параметры?
- n_estimators : количество деревьев решений
- max_depths: максимальная глубина дерева решений
-
random_state: Управляет генератором случайных чисел (вообще-то я не совсем понимаю, относится ли это random к случайной выборке?), его можно использовать вместе с другими параметрами, такими как перемешивание. Также упоминается, что это число использует контролируемый случайный алгоритм, так что его многократное выполнение все равно дает один и тот же результат каждый раз?
- To make a randomized algorithm deterministic (i.e. running it multiple times will produce the same result), an arbitrary integer random_state can be used
- Что означают эти параметры?
Как отрегулировать параметры, см.parameter tuning guidelines
Random Forest
сценарии применения
Поскольку это алгоритм классификатора, он, естественно, подходит для многих сценариев применения классификации; существуют также сценарии для задач регрессии.
эта статьяThe Random Forest Algorithm: A Complete Guide - Built InПриводится аналогия с практическим примером:
- Вы решаете, куда поехать, спросите у друзей
- Друг спрашивает, что вам понравилось и не понравилось в ваших предыдущих поездках
- На этой основе даются некоторые предложения
- Это дает пищу для вашего решения
- Те же шаги, вы идете спросить другого друга
- и еще один друг
- ...
Точно так же, если вы получили несколько предложений, вы колеблетесь, какое из них принять и т. д., вы облюбовали несколько домов и решаете, какой из них выбрать, кажется, что вы можете применить этот алгоритм, чтобы попробовать его.
Выучил какой-то незнакомый код
- pandas.DataFrame.head: возвращает первые несколько строк данных в наборе данных, параметр равен n, по умолчанию n=5.
test_data = pd.read_csv("/kaggle/input/titanic/test.csv")
test_data.head()
men = train_data.loc[train_data.Sex == 'male']["Survived"]
rate_men = sum(men)/len(men)