Набор данных sk-learn Facebook для прогнозирования мест регистрации
Цель этой игры — предсказать, где человек войдет в систему. Для этого конкурса Facebook создал виртуальный мир, включающий около 100 000 мест, занимающих 100 квадратных километров размером 10 на 10 километров.
Для заданного набора координат наша задача будет предсказывать следующее место регистрации пользователя на основе местоположения пользователя, точности, метки времени и т. д. Данные сделаны так, чтобы напоминать данные о местоположении с мобильных устройств.
Собственные значения: «x», «y», «точность», «день», «час», «день недели».
Целевое значение: place_id
В этом примере используются статистические данные на Facebook для обучения модели в соответствии с такими функциями, как координаты местоположения и время регистрации, и, наконец, получается идентификатор целевого местоположения. Отношение тренировочного набора к тестовому набору составляет 8:2.
При обучении модели данных первым шагом является предварительная обработка данных.
Сузить диапазон данных: Поскольку набор данных содержит более 2000 Вт данных, программа будет работать очень медленно, поэтому диапазон данных следует соответствующим образом сузить.Если конфигурация компьютера достаточна или сервер арендован, пожалуйста, не стесняйтесь~ Выберите функции времени: время в данных для разделения дня, часа, выходных Удалите места с меньшим количеством чекинов: устраните специальные места с небольшим значением, чтобы уменьшить переобучение. Определение собственных значений и целевых значений Разделить набор данных
Перекрестная проверка: разделите полученные данные обучения на наборы для обучения и проверки. На следующем рисунке приведен пример: данные разделены на 4 части, одна из которых используется в качестве проверочного набора. Затем он проверяется 4 раза (группы), каждый раз меняя набор проверки. То есть получаются результаты 4-х групп моделей, а за итоговый результат берется среднее значение. Также известна как 4-кратная перекрестная проверка. В этом примере cv=5, это 5-кратная перекрестная проверка.
def facebook_demo():
"""
sk-learn Facebook数据集预测签到位置
:return:
"""
# 1、获取数据集
facebook = pd.read_csv('/Users/maxinze/Downloads/机器学xiday2资料/02-代码/FBlocation/train.csv')
# 2.基本数据处理
# 2.1 缩小数据范围
# 选择(2,2.5)这一范围的数据,使用 query
facebook_data = facebook.query("x>5.0 & x<6 & y>5.0 & y<6.0")
# 2.2 选择时间特征
# 提取时间
time = pd.to_datetime(facebook_data["time"], unit="s")
time = pd.DatetimeIndex(time)
# 加一列day
facebook_data["day"] = time.day
# 加一列hour
facebook_data["hour"] = time.hour
# 加一列weekday
facebook_data["weekday"] = time.weekday
# 2.3 去掉签到较少的地方
# 分组聚类,按数目聚类
place_count = facebook_data.groupby("place_id").count()
# 选择签到大于3的
place_count = place_count[place_count["row_id"] > 3]
# 传递数据
facebook_data = facebook_data[facebook_data["place_id"].isin(place_count.index)]
# facebook_data.shape()
# 2.4 筛选特征值和目标值
# 特征值
x = facebook_data[["x", "y", "accuracy", "day", "hour", "weekday"]]
# 目标值
y = facebook_data["place_id"]
# 2.5 分割数据集(数据集划分) 参数特征值, 目标值
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=22)
# 3.特征工程--特征预处理(标准化)
# 3.1 实例化一个转换器
transfer = StandardScaler()
# 3.2 调用fit_transform
# 特征训练集
x_train = transfer.fit_transform(x_train)
# 特征测试集
x_test = transfer.fit_transform(x_test)
# 4.机器学习--knn+cv
# 4.1 实例化一个估计器
estimator = KNeighborsClassifier()
# 4.2 调用gridsearchCV
# param_grid = {"n_neighbors": [1, 3, 5, 7, 9]}
param_grid = {"n_neighbors": [5, 7, 9]}
estimator = GridSearchCV(estimator, param_grid=param_grid, cv=3 )
# 4.3 模型训练
estimator.fit(x_train, y_train)
# 5.模型评估
# 5.1 基本评估方式
score = estimator.score(x_test, y_test)
print("最后预测的准确率为:\n", score)
y_predict = estimator.predict(x_test)
print("最后的预测值为:\n", y_predict)
print("预测值和真实值的对比情况:\n", y_predict == y_test)
# 5.2 使用交叉验证后的评估方式
print("在交叉验证中验证的最好结果:\n", estimator.best_score_)
print("最好的参数模型:\n", estimator.best_estimator_)
print("每次交叉验证后的验证集准确率结果和训练集准确率结果:\n", estimator.cv_results_)
return None
Поскольку для запуска кода используется только часть данных, точность теста после обучения модели не очень высока, если вы можете использовать все данные для запуска кода.