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

# 导包

# 导入数据

# 数据处理

# 特征工程

# KNN算法预估流程

# 模型评估

接下来便实现以上流程

实现该模型训练我们需要导入一下的函数

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

然后导入数据

# 导入数据

data = pd.read_csv('train.csv')  

# read_csv()是pandas里面的一个函数,用于读取.cvs文件,这里接的是相对路径,也可以是绝对路径

(ps:这里仅仅是解决训练模型,所以并没有导入test.cvs文件)

作者这里提供下载这两个数据:(文件挺大的,别用流量下载哇)

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

对于数据处理,由于是练习,所以我添加了一个减少数据量,实际中,数据量越多越好

接下来便是把数据集里面的时间戳变为更好理解的年月日;

而对于签到少的地方可以去除,因为签到少的地方不具有代表性;

然后就是把数据集里面的特征值与目标值分离出来

# 数据处理

# 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算法预估流程

# 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_)

整体下来,我们就完成了一个超级基础的:用KNN算法实现预测facebook签到位置模型的训练辣!

(ps:该随笔是作者一边学习一边写的,里面有一些自己的拙见,如果有错误或者哪里可以改正的话,还请大家指出并批评改正!)

基础版本:用KNN算法实现预测facebook签到位置模型的训练(内含数据集下载)的更多相关文章

  1. knn算法之预测数字

    训练算法并对算法的准确值准确率进行估计 #导入相应模块 import numpy as npimport pandas as pdimport matplotlib.pyplot as plt%mat ...

  2. 吴裕雄--天生自然python机器学习实战:K-NN算法约会网站好友喜好预测以及手写数字预测分类实验

    实验设备与软件环境 硬件环境:内存ddr3 4G及以上的x86架构主机一部 系统环境:windows 软件环境:Anaconda2(64位),python3.5,jupyter 内核版本:window ...

  3. 机器学习--最邻近规则分类KNN算法

    理论学习: 3. 算法详述        3.1 步骤:      为了判断未知实例的类别,以所有已知类别的实例作为参照      选择参数K      计算未知实例与所有已知实例的距离      选 ...

  4. KNN算法推理与实现

    Overview K近邻值算法 KNN (K - Nearest Neighbors) 是一种机器学习中的分类算法:K-NN是一种非参数的惰性学习算法.非参数意味着没有对基础数据分布的假设,即模型结构 ...

  5. 机器学习--kNN算法识别手写字母

    本文主要是用kNN算法对字母图片进行特征提取,分类识别.内容如下: kNN算法及相关Python模块介绍 对字母图片进行特征提取 kNN算法实现 kNN算法分析 一.kNN算法介绍 K近邻(kNN,k ...

  6. KNN算法原理及实现

    1.KNN算法概述 kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性.该方法在确定分类决策上只依据最邻近的一 ...

  7. 手动实现KNN算法

    手动实现KNN算法 计算距离 取k个邻近排序 距离(欧氏) 预习 import numpy as np # 数组运算是面向元素级别的 arr1 = np.array([1,2,3]) arr2 = n ...

  8. 《机学五》KNN算法及实例

    一.概述 [定义]如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别. 二.距离计算公式 两个样本的距离可以通过如下公式计算,又叫[欧式距 ...

  9. 机器学习-K近邻(KNN)算法详解

    一.KNN算法描述   KNN(K Near Neighbor):找到k个最近的邻居,即每个样本都可以用它最接近的这k个邻居中所占数量最多的类别来代表.KNN算法属于有监督学习方式的分类算法,所谓K近 ...

  10. 机器学习&深度学习基础(tensorflow版本实现的算法概述0)

    tensorflow集成和实现了各种机器学习基础的算法,可以直接调用. 代码集:https://github.com/ageron/handson-ml 监督学习 1)决策树(Decision Tre ...

随机推荐

  1. ffmpeg音视频基础学习

    ffmpeg音视频基础学习 从去年开始了解音视频,中间也由于项目的需要,学习过ffmpeg.live555.以及QTAV框架,一直没总结过,现在大致总结下音视频中的常见词汇,后续慢慢更新添加!博客也会 ...

  2. Python 函数及参数的使用

    函数 带名字的代码块,用于完成具体的工作 关键字def定义一个函数,定义函数名,括号内是需要完成任务所需要的信息,最后定义冒号结尾 缩进构成函数体 函数调用,依次指定函数名以及冒号括起来的必要信息 d ...

  3. c语言中的链接属性和存储类型

    链接属性 external属性: 不在代码块中的函数和变量在缺省情况下都属于external链接属性. 具有external属性的变量或者函数在其他源文件中无论被包含多少次,都指向同一个实体. #a. ...

  4. P1008 [NOIP1998 普及组] 三连击,置顶题解的问题

    题目链接: https://www.luogu.com.cn/problem/P1008 置顶题解 暴力,加简化的判断,数学原理,2个集合内所有数相加相乘结果一样,2个集合的内容一样(没错我自己编得, ...

  5. List 集合手动分页的方法总结

    前言 在工作中难免会遇到,将组装的集合数据进行分页处理,现在我将自己手动分页的三种方法进行总结,有不对的地方敬请大家批评指正! 一.数据准备 // 当前页 int pageIndex = 1; // ...

  6. 2021-03-31:给定一个数组arr,给定一个值v。求子数组平均值小于等于v的最长子数组长度。

    2021-03-31:给定一个数组arr,给定一个值v.求子数组平均值小于等于v的最长子数组长度. 福大大 答案2021-03-31: 这道题是昨天每日一题的变种.数组每个元素减v,然后求<=0 ...

  7. 2022-02-19:安装栅栏。 在一个二维的花园中,有一些用 (x, y) 坐标表示的树。由于安装费用十分昂贵,你的任务是先用最短的绳子围起所有的树。只有当所有的树都被绳子包围时,花园才能围好栅栏。

    2022-02-19:安装栅栏. 在一个二维的花园中,有一些用 (x, y) 坐标表示的树.由于安装费用十分昂贵,你的任务是先用最短的绳子围起所有的树.只有当所有的树都被绳子包围时,花园才能围好栅栏. ...

  8. 在Centos7上安装PXE装机环境来批量安装操作系统

    步骤 1:安装必要的软件包 首先,需要确保系统已安装 dhcp.tftp-server 和 httpd 等软件包.可以使用以下命令进行安装: yum install -y dhcp tftp-serv ...

  9. 【Java】按钮数组波纹效果

    简介 最近Java学到了布局管理器,看到GridLayout就很有意思,老师说可以做Excel表格什么的,心中突发奇想,于是就想做一个波纹状按钮效果(事后一想可能是我键盘光效的影响-.-),网上一搜, ...

  10. Windows 11 和 Rocky 9 Linux 平台 MySQL 8.0.33 简易安装教程

    目录 Windows 平台安装 MySQL Linux 平台 Rocky 9 安装 MySQL binary package rpm package yum 源 source package Wind ...