KNN算法预测Facebook用户签到位置

前言

facebook给定了一个数据集,然后预测用户可能签到的位置。

流程

思路流程如下:#1获取数据 #2数据处理 #3特征工程,标准化 #4KNN算法预估流程 #5模型选择与调优 #6模型评估

1获取数据

import pandas as pd
import time

data=pd.read_csv("facebook-v-predicting-check-ins/train.csv")
print("先看一下读取进来的data:\n{}".format(data))

在这里插入图片描述

print("看一下data的描述信息data.info:")
data.info()

在这里插入图片描述

#'place_id'是我们要预测的target 看一下数据分布情况
print(data['place_id'].value_counts())

在这里插入图片描述

2数据处理

#2 1)缩小数据范围,为了节省时间,只选取x在(2-2.5)y在(1-1.5)之间的数据
data=data.query("x>2 & x<2.5 & y>1 & y<1.5")
print("经过筛选之后的data:\n{}".format(data)) 

在这里插入图片描述

print("看一下data的描述信息data.info:")
data.info()

在这里插入图片描述

3特征工程

#2)处理一下时间,将时间特征处理成有意义的时间
timeValue=pd.to_datetime(data['time'],unit="s")#转换成时间戳,单位为秒
print("看一下timeValue:\n{}\n及其类型:{}及其维度:{}".format(timeValue,type(timeValue),timeValue.shape))

在这里插入图片描述

date=pd.DatetimeIndex(timeValue)
#转换成一些时间信息添加到原来的表中
data["day"]=date.day
data["weekday"]=date.weekday
data["hour"]=date.hour
print("看一下添加了几列之后的data:\n{}".format(data))

在这里插入图片描述
在这里插入图片描述

data_final=data[data["place_id"].isin(place_count[place_count > 3].index.values)]
print("得到了所有的place_id都大于3次的data_final:\n{}".format(data_final))

在这里插入图片描述

#筛选特征值与目标值,x表示特征值,y表示目标值
x=data_final[['x','y','accuracy','day','weekday','hour']]
y=data_final['place_id']
#数据集划分
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y)
from sklearn.preprocessing import StandardScaler
#3特征工程:标准化
transfer=StandardScaler()
x_train=transfer.fit_transform(x_train)
x_test=transfer.transform(x_test)

4KNN模型

#4实例化一个KNN算法预估器
estimator=KNeighborsClassifier()#n_neighbors=3这个K值就没有必要要了

5模型选择与调优

from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV
#加入网格搜索与交叉验证
#参数准备与模型训练
param_dict={
    
    "n_neighbors":[3,5,7,9,11]}
estimator=GridSearchCV(estimator,param_grid=param_dict,cv=3)
estimator.fit(x_train,y_train)

6模型评估

#5.模型评估 评估一个分数
score=estimator.score(x_test,y_test)
print("评估的分数为:{}".format(score))
print('最佳参数:',estimator.best_params_)
print('最佳结果',estimator.best_score_)
print('最佳估计器',estimator.best_estimator_)

在这里插入图片描述

总结

(如果您发现我写的有错误,欢迎在评论区批评指正)。

猜你喜欢

转载自blog.csdn.net/qq_27328197/article/details/113880935