用KNN预测facebook签到位置模型的训练

本文介绍了通过B站黑马教学视频学习如何入门实践KNN算法,包括数据下载、数据处理(如数据筛选、时间特征转换、特征选择)、特征工程(标准化)、模型训练过程(包括训练集划分、标准化处理、网格搜索优化KNN模型),以及模型评估的方法。
摘要由CSDN通过智能技术生成

参照b站黑马教学视频,自己入门练习

数据下载:

百度网盘:链接:https://pan.baidu.com/s/1WSHqf06brFVy-5lYUI2Idg
提取码:ss52

实现模型的训练一般的流程便是

# 导包

# 导入数据

# 数据处理

# 特征工程

# KNN算法预估流程

# 模型评估

导包

import pandas as pd # 使用其文件操作
from sklearn.preprocessing import StandardScaler # 用来实现数据标准化
from sklearn.neighbors import KNeighborsClassifier # 预估器
from sklearn.model_selection import GridSearchCV # 网格搜索和交叉验证
from sklearn.model_selection import train_test_split # 可将数据分为训练集和测试集

导入数据

data = pd.read_csv('train.csv')  
# 数据处理


# 1)偷懒:减少数据(练习专属)
data = data.copy()
data = data.query("x < 2.5 & x > 2 & y < 1.5 & y > 1.0")
# 2)把时间特征转换成更有意义的年月日
time = pd.to_datetime(data["time"], unit="s")
t = pd.DatetimeIndex(time)
data["day"] = t.day
data["weekday"] = t.weekday
data["hour"] = t.hour
# 3)过滤签到次数少的地方
place_count = data.groupby("place_id").count()["row_id"]
data_final = data[data["place_id"].isin(place_count[place_count>3].index.values)]
# 4)筛选特征值和目标值
x = data_final[["x","y","accuracy","day","weekday","hour"]] 
y = data_final["place_id"]



# 特征工程:标准化

# 数据集划分
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=1) 
#random_state是种子,一样的种子表示一样的分法

# 标准化 
# 实例化一个预估器
transfer = StandardScaler()
# 把数据标准化
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test) 

# 注:以上x_test是用transform方法,是应为fit_transform方法实际上可以分为两个方法,  一个是fit,一个是transform,fit是用来计算数据的标准差和平均数,transform是用来  转化数据的,在第一次使用fit_transform时,transfer里面已经通过fit得到了x_train  的标准差和平均值了,为了数据标准化更加真实,所以x_test也要用一样的标准差和平均值,  这就是x_test使用transform的原因

# KNN算法预估流程
# 实例化一个预估器
estimator = KNeighborsClassifier()

#使用网格搜索和CV优化
estimator = GridSearchCV(estimator=estimator, param_grid={"n_neighbors": [3, 5, 7, 9]}, cv=3)# 第一个参数是一个预估器;第二个参数表示的是需要进行网格搜索的所有K值,值为字典或者列表;第三个参数是交叉验证的折数

estimator.fit(x_train, y_train) # 这个是输入训练的特征值和目标值,然后训练模型


# 模型评估
# 方法一:查看预测的目标值
y_predict = estimator.predict(x_test)
print("y_predict:\n", y_predict)

# 方法二:直接查看准确率
score = estimator.score(x_test, y_test)
print("准确率为:", score)

# 查看优化后端最佳参数
print("最佳参数:", estimator.best_params_)
print("最佳结果:", estimator.best_score_)
print("最佳估计器:", estimator.best_estimator_)
print("最佳验证结果:", estimator.cv_results_)

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值