1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > K-近邻算法案例——facebook签到位置预测

K-近邻算法案例——facebook签到位置预测

时间:2023-06-23 04:44:14

相关推荐

K-近邻算法案例——facebook签到位置预测

目录

学习目标

一 开发环境

二 项目介绍

2.1 数据集介绍

三 步骤分析

四 运行结果

学习目标

通过Facebook位置预测案例熟练掌握KNN算法

一 开发环境

首先来看看我的开发环境,用的东西还是比较简单的:

作者:嘟粥yyds

时间:01月01日

集成开发工具:PyCharm .1.3

集成开发环境:python 3.10.6

第三方模块:pandas、train_test_split、GridSearchCV、StandardScaler、KNeighborsClassifier

二 项目介绍

本次比赛的目的是预测一个人想去哪个地方签到。为了这次比赛的目的,Facebook创建了一个人造世界,由位于10公里乘10平方公里的10万多个地方组成。对于一组给定的坐标,您的任务是根据用户的位置,准确性和时间戳等预测用户下一次的签到位置。数据被捏造成类似于来自移动设备的位置信号,让您了解如何处理因不准确和嘈杂值而复杂的真实数据。不一致和错误的位置数据可能会破坏 Facebook 签到等服务的体验。

2.1 数据集介绍

数据介绍

文件说明 train.csv, test.csv

row id:签入事件的id

x y:坐标

accuracy: 准确度,定位精度

time: 时间戳

place_id: 签到的位置,这也是你需要预测的内容

官网:grid_knn | Kaggle

三 步骤分析

对于数据做一些基本处理(这里所做的一些处理不一定达到很好的效果,我们只是简单尝试,有些特征我们可以根据一些特征选择的方式去做处理) 获取数据

import pandas as pdfrom sklearn.model_selection import train_test_split, GridSearchCVfrom sklearn.preprocessing import StandardScalerfrom sklearn.neighbors import KNeighborsClassifier# 获取数据data = pd.read_csv("./FBlocation/train.csv")

基本数据处理

# 缩小数据范围: 2 < x < 2.5 1.0 < y < 1.5data = data.query("2 < x < 2.5 & 1.0 < y < 1.5")# 处理时间特征time_value = pd.to_datetime(data['time'], unit='s')date = pd.DatetimeIndex(time_value)data["day"] = date.daydata["weekday"] = date.weekdaydata["hour"] = date.hour# 过滤签到次数少的地点place_count = data.groupby("place_id").count()["row_id"]data_final = data[data["place_id"].isin(place_count[place_count > 10].index.values)]# 筛选特征值和目标值x = data_final[["x", "y", "accuracy", "day", "weekday", "hour"]]y = data_final["place_id"]# 数据集划分x_train, x_test, y_train, y_test = train_test_split(x, y)

特征工程——特征预处理(数据标准化)

# 特征工程: 标准化# 实例化一个转换器transfer = StandardScaler()# 调用fit_transformx_train = transfer.fit_transform(x_train)x_test = transfer.transform(x_test)

KNN算法预估器

estimator = KNeighborsClassifier()# 加入网格搜索与交叉验证# 参数准备param_dict = {"n_neighbors": [3, 5, 7, 9]}estimator = GridSearchCV(estimator, param_grid=param_dict, cv=10)estimator.fit(x_train, y_train)

模型评估

# 方法1: 直接比对真实值和预测值y_predict = estimator.predict(x_test)print(f"y_predict:\n{y_predict}")print(f"直接比对真实值的预测值\n{y_test == y_predict}")# 方法2: 计算准确率score = estimator.score(x_test, y_test)print(f"准确率为:{score}")# 查看最佳参数、最佳结果、最佳预估器、交叉验证结果print(f'最佳参数:{estimator.best_params_}')print(f'最佳结果:{estimator.best_score_}')print(f'最佳预估器:{estimator.best_estimator_}')print(f'交叉验证结果:\n{estimator.cv_results_}')

四 运行结果

y_predict:[7942373049 3439753948 3695846783 ... 1533408099 9764078387 4231692509]直接比对真实值的预测值647False23653459 False9418270True18798838 False22082936 False... 17532084True17184298 False7396514True29039029 False4841782TrueName: place_id, Length: 19683, dtype: bool准确率为:0.3756541177666006最佳参数:{'n_neighbors': 1}最佳结果:0.3501955594795536最佳预估器:KNeighborsClassifier(n_neighbors=1)交叉验证结果:{'mean_fit_time': array([0.03692357, 0.03621324, 0.03688304, 0.03587898, 0.03637552,0.03587977]), 'std_fit_time': array([5.26951207e-05, 4.69293380e-04, 8.19175090e-04, 8.12349756e-04,3.99485158e-04, 2.23938669e-06]), 'mean_score_time': array([0.39097706, 0.45584639, 0.49725358, 0.53362568, 0.56166697,0.59604867]), 'std_score_time': array([0.00194897, 0.0016437 , 0.003035 , 0.00178027, 0.00195941,0.00288296]), 'param_n_neighbors': masked_array(data=[1, 3, 5, 7, 9, 11],mask=[False, False, False, False, False, False],fill_value='?',dtype=object), 'params': [{'n_neighbors': 1}, {'n_neighbors': 3}, {'n_neighbors': 5}, {'n_neighbors': 7}, {'n_neighbors': 9}, {'n_neighbors': 11}], 'split0_test_score': array([0.35299497, 0.3339938 , 0.34603465, 0.34247828, 0.34009043,0.33440024]), 'split1_test_score': array([0.34798293, 0.33431562, 0.34274972, 0.34478203, 0.33949802,0.33401077]), 'split2_test_score': array([0.34960878, 0.33472208, 0.34534092, 0.34122549, 0.33736409,0.33426481]), 'mean_test_score': array([0.35019556, 0.33434383, 0.34470843, 0.3428286 , 0.33898418,0.33422528]), 'std_test_score': array([0.0020878 , 0.00029799, 0.00141368, 0.00147293, 0.00117083,0.00016144]), 'rank_test_score': array([1, 5, 2, 3, 4, 6])}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。