Найти тему
Вечный джун

Обучение на Титанике. Деревья? Они то тут причём?

1 часть, 2 часть, 3 часть, 4 часть, 5 часть...

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

y = titanic_data.Survived
X = X.drop(['Survived'], axis=1)

Оставить от 2 колонок в ответе для теста только 1.

gender_submission = gender_submission['Survived']

И произвести с test те же самые действия, что и с titanic_data в прошлой статье(разве что придётся заполнять не Embarked, а Fare и не стандартным значением, а средним(просто потому что у подавляющего большинства примерно одна цена, а отсутствует всего одно значение).

test = test.drop(['PassengerId','Name','Cabin','Ticket'], axis=1)
test = test.fillna({'Age':test.Age.median(),'Fare':test.Fare.median()})
test = pd.get_dummies(test)
-2

Сейчас обучим модель на дереве и не будем подбирать параметры, а уже начиная с леса будем использовать GridSearchCV(сейчас мы просто смотрим как всё будет работать).

clf = tree.DecisionTreeClassifier()
clf.fit(X, y)
clf.score(test, gender_submission)

Итого у меня получилось

0.7511961722488039

-3

И это вполне не плохо для дерева без настройки параметров. Хотя бы лучше чем 0.5, но стоит проверить на precision и recall потому что он ведь может просто сказать всем, что они погибли и получить немалую точность.

from sklearn.metrics import precision_score, recall_score
precision_score(gender_submission, clf.predict(test))
recall_score(gender_submission, clf.predict(test))

precision дал всего навсего 0.6304347826086957, а recall 0.7631578947368421. И если сравнить кол-во предсказаний "Выжил" с реальными значениями, то почему-то окажется, что их больше. То есть наша модель говорит почти половине людей "Выжил"...

-4