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

K-近邻算法之案例2:预测facebook签到位置

时间:2018-11-24 09:31:12

相关推荐

K-近邻算法之案例2:预测facebook签到位置

K-近邻算法之案例2:预测facebook签到位置

1 数据集介绍 【天池,人工智能比赛网址】

数据介绍:将根据用户的位置,准确性和时间戳预测用户正在查看的业务。

train.csv,test.csv row_id:登记事件的IDxy:坐标准确性:定位准确性 时间:时间戳place_id:业务的ID,这是您预测的目标

官网:/navoshta/grid-knn/data

2 步骤分析

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

1 缩小数据集范围 DataFrame.query()

2 选取有用的时间特征

3 将签到位置少于n个用户的删除

分割数据集

标准化处理

k-近邻预测

3 代码过程

1.获取数据集

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

2.基本数据处理

# 2.基本数据处理# 2.1 缩小数据范围facebook_data = facebook.query("x>2.0 & x<2.5 & y>2.0 & y<2.5")# 2.2 选择时间特征time = pd.to_datetime(facebook_data["time"], unit="s")time = pd.DatetimeIndex(time)facebook_data["day"] = time.dayfacebook_data["hour"] = time.hourfacebook_data["weekday"] = time.weekday# 2.3 去掉签到较少的地方place_count = facebook_data.groupby("place_id").count()place_count = place_count[place_count["row_id"]>3]facebook_data = facebook_data[facebook_data["place_id"].isin(place_count.index)]# 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_transformx_train = transfer.fit_transform(x_train)x_test = transfer.fit_transform(x_test)

机器学习--knn+cv

# 4.机器学习--knn+cv# 4.1 实例化一个估计器estimator = KNeighborsClassifier()# 4.2 调用gridsearchCVparam_grid = {"n_neighbors": [1, 3, 5, 7, 9]}estimator = GridSearchCV(estimator, param_grid=param_grid, cv=5)# 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_)

运行结果:

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