机器学习---k近邻算法---预测facebook签到

步骤分析

具体步骤:
1.获取数据集
2.基本数据处理
2.1 缩小数据范围
2.2 选择时间特征
2.3 去掉签到较少的地方
2.4 确定特征值和目标值
2.5 分割数据集
3.特征工程 – 特征预处理(标准化)
4.机器学习 – knn+cv
5.模型评估

代码实现

1.获取数据集

from sklearn.model_selection import GridSearchCV
import pandas as pd
# 获取数据集
facebook = pd.read_csv("train.csv")

在这里插入图片描述

2.基本数据处理

缩小数据范围

# 缩小数据范围 (计算速度快)
facebook_data = facebook.query("x>2.0 & x<2.5 & y>2.0 & y<2.5")

选择时间特征

# unit="s" 转化为时间类型
time = pd.to_datetime(facebook_data["time"], unit="s")
# unit="s" 转化为时间类型
time = pd.DatetimeIndex(time) 
facebook_data["day"] = time.day 
facebook_data["hour"] = time.hour 
facebook_data["weekday"] = time.weekday 

对时间进行处理后的数据集:
在这里插入图片描述

去掉签到较少的地方

# 去掉次数 比较少的地方 
place_count = facebook_data.groupby("place_id").count()
# 次数大于3的id
place_count = place_count[place_count["row_id"]>3]
# place_count.index 是签到次数多于三次的place id    通过isin()是则留下  
# 实际上相当于跳出签到超过3次的地理位置 
facebook_data = facebook_data[facebook_data["place_id"].isin(place_count.index)]

筛选打卡次数大于三数据集:
在这里插入图片描述

确定特征值和目标值

# 特征值
x = facebook_data[["x", "y", "accuracy", "day", "hour", "weekday"]]
# 目标值
y = facebook_data["place_id"]

分割数据集

x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=22)

3.特征工程 – 特征预处理(标准化)

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

4.机器学习 – knn+cv

# 实例化一个估计器
estimator = KNeighborsClassifier()
# 调用gridsearchCV
param_grid = {"n_neighbors": [1, 3, 5, 7, 9]}
estimator = GridSearchCV(estimator, param_grid=param_grid, cv=5)
# 模型训练
estimator.fit(x_train, y_train)

5.模型评估

# 基本评估方式
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)

在这里插入图片描述

# 使用交叉验证后的评估方式
print("在交叉验证中验证的最好结果:\n", estimator.best_score_)
print("最好的参数模型:\n", estimator.best_estimator_)
print("每次交叉验证后的验证集准确率结果和训练集准确率结果:\n",estimator.cv_results_)

在这里插入图片描述

数据集

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值