K近邻算法04---案例:预测Facebook签到位置
作者:互联网
注: 这部分看博客注释与运行截图就差不多能理解啦,把代码复制到自己的编译器中分别运行,认真体会每一步。
一、代码截图和运行截图
二、全部代码
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV
# 读取数据
data = pd.read_csv('./data/FBlocation/train.csv')
# 1.获取数据 read_csv
# 2.数据基本处理 数据集划分,把时间戳提出成明显的时间特征(周几,几号,几点), 剔除签到人数少的place_id
# 3.特征工程 标准化
# 4.机器学习
# 4.1 创建模型
# 4.2 训练模型
# 5.模型评估 分类 准确率
# 2.数据基本处理
# 取一小部分数据演示
data = data.query('x>2 & x<2.5 & y>2 & y<2.5')
data.head()
# 把时间戳提出成为明显的时间特征(周几,几号,几点)特征提取 用户地址--》经纬度
time = pd.to_datetime(data['time'], unit='s')
time = pd.DatetimeIndex(time)
time
data['weekday'] = time.weekday
data['day'] = time.day
data['hour'] = time.hour
data.head()
# 最终目的:剔除签到人数少的place_id
# 第一步:统计place_id出现的次数 并且切出['row_id']这一列
temp = data.groupby('place_id')['row_id'].count()
# 第二步:找出temp>3的次数的index
res = temp[temp>3].index #temp的index就是place_id账号
res
# 第三步:找 data数据中 “place_id” 这一列中与 res 匹配的数据。 从而得出place_id大于3的数据
data[data['place_id'].isin(res)]
# 数据集划分
x = data[['x','y','accuracy','weekday','day','hour']]
y = data['place_id']
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)
# 3.特征工程 标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
# 4.机器学习
# 4.1 创建模型
estimator = KNeighborsClassifier(algorithm='kd_tree')
# 构建字典参数
param_dict = {'n_neighbors':[1,3,5]}
# 初始化GSCV估计器
estimator_gscv = GridSearchCV(estimator, param_dict, cv = 3)
# 4.2训练模型
estimator_gscv.fit(x_train, y_train)
# 5.模型评估
estimator_gscv.score(x_test, y_test)
# 获取最优模型
estimator_gscv.best_estimator_
# 获取最优超参数
estimator_gscv.best_params_
标签:04,签到,---,train,place,estimator,test,data,id 来源: https://blog.csdn.net/alovelypeach/article/details/122715793