机器学习基础之《分类算法(4)—案例:预测facebook签到位置》

一、背景

1、说明

2、数据集

row_id:签到行为的编码

x y:坐标系,人所在的位置

accuracy:定位的准确率

time:时间戳

place_id:预测用户将要签到的位置

3、数据集下载

https://www.kaggle.com/navoshta/grid-knn/data

国内下不了,无法收验证码,还是在csdn用积分下一个别人上传的

二、流程分析

1、获取数据

2、数据处理

目的:

特征值

目标值

a.缩小数据范围

根据坐标缩小范围

2 < x < 2.5

1 < y < 1.5

b.时间戳

time -> 年月日时分秒

早上签到,可能是公园、通勤的路上

周六签到,可能在商场、在家睡觉

c.过滤签到次数少的地点

d.数据集划分

3、特征工程

标准化

4、KNN算法预估器流程

5、模型选择与调优

6、模型评估

三、代码

1、day02_facebook_demo

python 复制代码
import pandas as pd

# 1、获取数据
data = pd.read_csv("./FBlocation/train.csv")

data.head()

# 2、基本的数据处理
# 1)缩小数据范围
data = data.query("x < 2.5 & x > 2 & y < 1.5 & y > 1")

data

# 2)处理时间特征
time_value = pd.to_datetime(data["time"], unit="s")

time_value.values

date = pd.DatetimeIndex(time_value)

data["day"] = date.day

data["weekday"] = date.weekday

data["hour"] = date.hour

data

# 3、过滤掉签到次数少的地点
place_count = data.groupby("place_id").count()["row_id"]

place_count[place_count > 3].head()

data_final = data[data["place_id"].isin(place_count[place_count > 3].index.values)]

data_final.head()

# 筛选特征值和目标值
# 特征值
x = data_final[["x", "y", "accuracy", "day", "weekday", "hour"]]
# 目标值
y = data_final["place_id"]

x.head()

y.head()

# 数据集划分
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
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV

# 3、特征工程:标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
# 用训练集的平均值和标准差对测试集的数据来标准化
# 这里测试集和训练集要有一样的平均值和标准差,而fit的工作就是计算平均值和标准差,所以train的那一步用fit计算过了,到了test这就不需要再算一遍自己的了,直接用train的就可以
x_test = transfer.transform(x_test)
# 4、KNN算法预估器
estimator = KNeighborsClassifier()
# 加入网格搜索和交叉验证
# 参数准备
param_dict = {"n_neighbors": [1, 3, 5, 7, 9, 11]}
estimator = GridSearchCV(estimator, param_grid=param_dict, cv=10)
estimator.fit(x_train, y_train)
# 5、模型评估
# 方法1:直接比对真实值和预测值
y_predict = estimator.predict(x_test)
print("y_predict:\n", y_predict)
print("直接比对真实值和预测值:\n", y_test == y_predict)
# 方法2:计算准确率
score = estimator.score(x_test, y_test)
print("准确率为:\n", score)
#最佳参数:best_params_
print("最佳参数:\n", estimator.best_params_)
#最佳结果:best_score_
print("最佳结果:\n", estimator.best_score_)
#最佳估计器:best_estimator_
print("最佳估计器:\n", estimator.best_estimator_)
#交叉验证结果:cv_results_
print("交叉验证结果:\n", estimator.cv_results_)

2、运行结果

相关推荐
辰尘_星启8 分钟前
【机器学习】反向传播如何求梯度(公式推导)
人工智能·深度学习·机器学习·强化学习·梯度下降·反向传播
我.佛.糍.粑32 分钟前
Shusen Wang推荐系统学习 --召回 矩阵补充 双塔模型
人工智能·学习·机器学习·矩阵·推荐算法
苦瓜汤补钙1 小时前
论文阅读:WildGS-SLAM:Monocular Gaussian Splatting SLAM in Dynamic Environments
linux·论文阅读·机器学习
智算菩萨1 小时前
传统机器学习在信用卡交易预测中的卓越表现:从R²=-0.0075到1.0000的华丽转身
人工智能·机器学习·r语言
大连好光景3 小时前
L1正则化 VS L2正则化
人工智能·深度学习·机器学习
国家不保护废物3 小时前
深度学习
人工智能·深度学习·机器学习
今天炼丹了吗3 小时前
RTDETR融合[WACV 2025]SEM-Net中的模块
python·深度学习·机器学习
深度学习机器18 小时前
OCRFlux-3B:开源 OCR + LLM 模型的新标杆,支持跨页表格合并
人工智能·机器学习·语言模型·ocr
大千AI助手19 小时前
TinyBERT:知识蒸馏驱动的BERT压缩革命 | 模型小7倍、推理快9倍的轻量化引擎
人工智能·深度学习·机器学习·自然语言处理·bert·蒸馏·tinybert
Ao00000020 小时前
脑电分析入门指南:信号处理、特征提取与机器学习
人工智能·机器学习·信号处理