Форум сайта python.su
Решаю всеми известную задачку про “Титаник” с kaggle. Подробное описание здесь: https://www.kaggle.com/c/titanic
Решил ее получив результат 0.64 по тестовой выборке и сейчас пытаюсь улучшить этот результат учитывая все больше и больше факторов. Сейчас пытаюсь заполнить пустые значения возраста и для этого учитываю данные из тренировочной выборки и тестовой так же деля ее по группам(мужчины/женщины).
data_train = pd.read_csv('data/train.csv') data_test = pd.read_csv('data/test.csv') # Делаем замену пола: 0 - женский, 1 - мужской data_train['Sex'] = np.where(data_train['Sex'] == 'female', 0, 1) data_test['Sex'] = np.where(data_test['Sex'] == 'female', 0, 1) # Объединяем два dataframe из двух выборок тестовой и тренировочной # для получения усредненных результатов data = pd.concat([data_train, data_test], axis=0).groupby('PassengerId').sum() # Получаем медиану возраста для двух групп пассажиров: мужчины, женщины median_age_male = data[data.Sex == 1]['Age'].median() median_age_female = data[data.Sex == 0]['Age'].median() data_age_new_man = data_train[data_train.Sex == 1][['PassengerId', 'Age']].copy() data_age_new_woman = data_train[data_train.Sex == 0][['PassengerId', 'Age']].copy() data_age_new_man['Age'].fillna(median_age_male, inplace=True) data_age_new_woman['Age'].fillna(median_age_female, inplace=True) data_age_new = pd.concat([data_age_new_man, data_age_new_woman], axis=0).groupby('PassengerId').sum() # Получаем тренировочную выборку с непустыми полями возраста data = pd.concat([data_train, data_age_new], axis=0).groupby('PassengerId').median()
Офлайн
>>> data_train = pd.read_csv('train.csv') >>> data_test = pd.read_csv('test.csv') >>> data = pd.concat([data_train, data_test], axis=0) >>> mean_age = data.groupby('Sex')['Age'].mean() >>> data['Age'].fillna(data['Sex'].map(mean_age), inplace=True)
Отредактировано noob_saibot (Ноя. 29, 2017 11:02:30)
Офлайн
noob_saibotСпасибо, только исправил немного. Все же нам проставить возраст необходимо в тренировочной выборке. И правильнее будет считать медиану, а не среднее значение. А насчет groupby знал же что есть, но как то и не вспомнил про него. Еще раз спасибо.
data_train = pd.read_csv('data/train.csv') data_test = pd.read_csv('data/test.csv') data = pd.concat([data_train, data_test], axis=0) median_age = data.groupby('Sex')['Age'].median() data_train['Age'].fillna(data_train['Sex'].map(median_age), inplace=True)
Офлайн
SergeyChmutovМожно обоснование? Вы проверили распределение на нормальность и обнаружили тяжёлые хвосты? Или из чего исходили?
И правильнее будет считать медиану, а не среднее значение
Офлайн
noob_saibotЕсли построить гистограмму возраст/количество, то вид его (на мой взгляд) будет не совсем подходить под нормальное распределение.
Отредактировано SergeyChmutov (Ноя. 29, 2017 14:43:23)
Офлайн