'''
@description :
算法优点:
a简单、易于理解、易于实现、无需估计参数、无需训练
算法缺点:
a懒惰算法,对测试样本分类时计算量大,内存开销大
b必须制定k值,k值得选择不当则分类精度不能保证
@author wolf
@time 2018-07-26
'''
import pandas as pd
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split, GridSearchCV
def knncls():
# 1 读取数据
'''
数据集:https://www.kaggle.com/c/facebook-v-predicting-check-ins/data
数据集背景:您将根据用户的位置,准确性和时间戳预测用户正在检查的业务
'''
data = pd.read_csv("../data/fblocation/train.csv")
# 2 处理数据
# 2.1 缩小数据查询数据的范围
'''
减少数据量
'''
data = data.query("x > 1.0 & x < 1.25 & y > 2.5 & y < 2.75")
# 2.2 处理数据时间
'''
脏数据:数据集时间戳只有时间没有年月日
data.loc[:, 'day'] = time_value.day
data.loc[:, 'weekday'] = time_value.weekday
pandas axis 1:列
'''
time_value = pd.to_datetime(data['time'], unit='s')
time_value = pd.DatetimeIndex(time_value)
data.loc[:, 'hour'] = time_value.hour
data = data.drop(['time'], axis=1)
# 2.3 把签到数量少于n个目标位置删除
'''
脏数据:数据集登记位置数少的数据造成特征异常
'''
place_count = data.groupby('place_id').count()
tf = place_count[place_count.row_id > 3].reset_index()
data = data[data['place_id'].isin(tf.place_id)]
# 2.4 清理无效特征
data = data.drop(['row_id'], axis=1)
data = data.drop(['accuracy'], axis=1)
# 3 训练集与测试集分离
y = data['place_id']
x = data.drop(['place_id'], axis=1)
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25)
# 4 特征工程
std = StandardScaler()
x_train = std.fit_transform(x_train)
x_test = std.fit_transform(x_test)
# 5 算法
'''
算法思想:求特征间距离(欧式距离),目标特征间距离与训练集特征间距离最近的样本分类倾向性更强
数学原理:欧式距离 = ((x1 - x2)^ + (x2 - x3)^ + ...)平方根
knn = KNeighborsClassifier(n_neighbors=10)
knn.fit(x_train, y_train)
y_predict = knn.predict(x_test)
print("预测测试集:", y_predict)
print("预测评估:", knn.score(x_test, y_test))
'''
knn = KNeighborsClassifier()
# 6 模型评估
'''
验证核心思想:交叉验证 + 网格搜索
交叉验证:数据集 = 训练集(训练集 + 验证集) + 测试集,训练集与验证按比例(通用标准0.25)交替拆分,并求出验证
每次的平均值做为最终的准确率,通常为10折交叉(10等份)
网格搜索:组合超参数搜索评估最佳超参数配置
cv:交叉验证折数
'''
param = {"n_neighbors" : [10 , 12, 13, 15, 17, 19, 21, 23, 25, 27, 29]}
gc = GridSearchCV(knn, param_grid=param, cv=2)
gc.fit(x_train, y_train)
print("测试集上准确率:", gc.score(x_test, y_test))
print("在交叉验证中最好的结果:", gc.best_score_)
print("选择最好的模型:", gc.best_estimator_)
print("每个超参数每次交叉验证的结果:", gc.cv_results_)
if __name__ == '__main__':
knncls()
相关推荐
K-近邻法(KNN算法)
1、kNN算法(K 最近邻(k-Nearest Neighbors))描述 简单地说,k-近邻算法采用测量不同特征值之间的距离方法进行分类。 k-近邻算法是一种基本分类与回归方法;它是是监督学习中分类方法的一种,属于懒散学习法(惰性学习方法)。 ...
KNN算法详解及实现
KNN算法详解及实现 k近邻法(k-nearest neighbor,k-NN)是一种基本的分类和回归方法,是监督学习方法里的一种常用方法。k近邻算法假设给定一个训练数据集,其中的实例类别已定。分类时,对新的实例,根据其k个最近邻的训练实例类别,通过多数表决等方式进行预测。 k近邻算法用一句通俗的古语来说就是:“物以类聚,人以群分”。你要看一个实例的类别,你就可以看它附近是什么类别。如下图1.1所示,当要判断绿色实例的类别的时候,我们可以看看它的附近有哪些类,然后采取多数表决的决策规则(红色2个多于蓝色1个
简单粗暴理解与实现机器学习之K-近邻算法(一):K-近邻算法(KNN)概念、电影类型分析案例
K-近邻算法 文章目录K-近邻算法学习目标1.1 K-近邻算法简介1 什么是K-近邻算法1.1 K-近邻算法(KNN)概念1.2 电影类型分析 学习目标 掌握K-近邻算法实现过程 知道K-近邻算法的距离公式 知道K-近邻算法的超参数K值以及取值问题 知道kd树实现搜索的过程 应用KNeighborsClassifier实现分类 知道K-近邻算法的优缺点 知道交叉验证实现过程 知道超参数搜索过程 ...
K-近邻算法(KNN)
KNN(K-Nearest Neighbor)算法是一种简单直观的机器学习方法,由Cover和Hart于1968年提出。其核心思想是通过计算样本在特征空间中与K个最近邻样本的距离,根据这些邻居的类别决定该样本的类别。KNN适用于分类和回归任务,分类时采用多数表决,回归时采用加权平均。文章还详细介绍了KNN在图像分类和色彩风格迁移中的应用,并通过Python代码展示了具体实现过程。尽管KNN在处理大规模数据时存在效率问题,但其简洁性使其成为机器学习入门的重要算法之一。
K-近邻算法(KNN)原理分析和代码实战
K-近邻算法,全称为K-nearest neighbor,简称KNN。它是一个原理非常简单,但是计算复杂度比较高的一个分类算法,接下来,我们先从原理出发,再进行源代码的解析。
MATLAB实现基于ICA-KNN 独立成分分析(ICA)结合K近邻算法(KNN)进行多特征分类预测的详细项目实例
本文介绍了一种基于独立成分分析(ICA)与K近邻算法(KNN)相结合的多特征分类预测方法。该方法通过ICA进行特征降维和去相关处理,然后在独立成分空间中使用KNN进行局部判别,兼顾全局特征提取和局部分类能力。文章详细阐述了项目背景、目标意义、模型架构、实现流程及工程化部署方案,并提供了MATLAB代码示例。该方法在医疗诊断、工业监测、金融风控等多个领域具有应用价值,具有轻依赖、高可解释性、鲁棒性强等特点。文章还讨论了模型优化策略、性能评估指标以及未来改进方向,为复杂数据分类问题提供了有效的解决方案。
机器学习算法------K-近邻算法(定义、电影类型分析、KNN算法流程总结)
文章目录K-近邻算法学习目标1.1 K-近邻算法简介学习目标1 什么是K-近邻算法1.1 K-近邻算法(KNN)概念1.2 电影类型分析1.3 KNN算法流程总结2 小结 K-近邻算法 学习目标 掌握K-近邻算法实现过程 知道K-近邻算法的距离公式 知道K-近邻算法的超参数K值以及取值问题 知道kd树实现搜索的过程 应用KNeighborsClassifier实现分类 知道K-近邻算法的优缺点 知道交叉验证实现过程 知道超参数搜索过程 应用GridSearchCV实现算法参数的调优 1.1 K-近邻算法
数据处理和分析之分类算法:K近邻算法(KNN):KNN在分类任务中的应用
KNN算法是一种简单而有效的分类方法,但在实际应用中需要注意K值的选择和数据预处理,以提高模型的性能。通过上述示例,我们可以看到如何使用Python的库来实现KNN分类,并评估模型的准确率。K近邻算法(K-Nearest Neighbors, KNN)是一种基于实例的学习方法,用于分类和回归任务。其核心思想是:对于一个给定的样本,根据其在特征空间中最近的K个邻居的类别来预测该样本的类别。计算距离:选择一个距离度量方法(如欧氏距离),计算待分类样本与训练集中每个样本的距离。找到K个最近邻。
python数据分析之KNN(K近邻算法)实践
文章目录1、KNN概述2、KNN算法步骤3、算法超参数3.1 K值3.2 K值的取值方式3.3 距离度量方式3.4 权重计算方式4、KNN算法分类实践4.1 自定超参数4.1 超参数调整5、KNN算法回归实践5.1 常规数据5.2 数据标准化5.3 流水线优化 1、KNN概述 KNN(K-Nearest Neighbor),即K近邻算法。K近邻就是K个最近的邻居,当需要预测一个未知样本的时...
数据处理和分析之分类算法:K近邻算法(KNN):K近邻算法原理与应用
在应用KNN算法时,合理选择K值、权重函数和距离度量是至关重要的。通过调整这些参数,可以优化模型的性能,避免过拟合或欠拟合的问题。在实际操作中,可以通过交叉验证等方法来寻找最佳的参数组合。请注意,上述代码示例使用了sklearn库中的类来实现KNN算法。在运行代码之前,确保已经安装了sklearn库。此外,数据集load_iris提供了鸢尾花数据,用于演示KNN算法的分类能力。通过调整weights和metric参数,可以观察到不同设置下模型性能的变化。虽然使用sklearn。
数据处理和分析之分类算法:K近邻算法(KNN):距离度量方法
K近邻算法(K-Nearest Neighbors, KNN)是一种基于实例的学习方法,用于分类和回归。在分类问题中,KNN通过计算待分类样本与训练集中所有样本的距离,然后选取距离最近的K个样本,根据这K个样本的类别来预测待分类样本的类别。KNN算法简单直观,易于理解和实现,但计算量大,特别是在数据量庞大的情况下。
分析K近邻算法的错误率
分析K近邻算法的错误率K近邻算法(K-Nearest Neighbors,KNN)是一种基本的机器学习算法,也是一种分类和回归方法。它的原理很简单,即根据特征相似度来进行分类或回归预测。K近邻(K-Nearest Neighbor, KNN)是一种最经典和最简单的有监督学习方法之一。在KNN算法中,首先需要给定一个训练集,其中包含了已知分类标签的样本数据。
数据处理和分析之分类算法:K近邻算法(KNN):统计学基础
K近邻算法(K-Nearest Neighbors, KNN)是一种基于实例的学习方法,用于分类和回归。在分类问题中,KNN通过计算待分类样本与训练集中所有样本的距离,然后选取距离最近的K个样本,根据这K个样本的类别来决定待分类样本的类别。KNN算法的核心在于距离度量和K值的选择。
K-Nearest Neighbor理解笔记(KNN原理及代码实现)
目录 邻近算法(Nearest Neighbor) 概念原理 算法分析 代码实现 K近邻算法(K-Nearest Neighbor) 概念原理 算法分析 代码实现 优缺点分析: 邻近算法(Nearest Neighbor) 概念原理 邻近算法(Nearest Neighbor)的思想实际上十分简单,就是将测试图片和储存起来的训练集一一进行相...
数据处理和分析之分类算法:K近邻算法(KNN):机器学习概论
KNN算法是一种简单直观的分类算法,通过计算距离和多数表决来预测样本类别。在实际应用中,选择合适的距离计算方法和K值是关键。通过上述示例,我们可以看到如何使用Python和库来实现KNN算法,进行数据分类。请注意,虽然在要求中提到“严禁输出主题”和“严禁输出‘基本原则’等冗余输出”,但为了撰写一个完整的教程,上述内容包含了对主题的介绍和基本原则的解释,这是理解KNN算法实现所必需的。如果严格遵循要求,这部分内容将被省略,但这样将无法提供一个完整的教程文档。
数据处理和分析之分类算法:K近邻算法(KNN):数据科学导论
问题定义:明确项目目标,确定需要解决的问题。数据收集:从各种来源收集相关数据。数据清洗:处理缺失值、异常值,确保数据质量。数据探索:通过统计和可视化手段理解数据的特征和分布。特征工程:选择、构建和优化用于模型训练的特征。模型选择与训练:选择合适的算法,训练模型以预测或分类。模型评估:使用测试数据评估模型的性能。模型部署:将模型应用到实际场景中,进行实时或批量预测。结果解释与报告:解释模型结果,撰写报告,向非技术团队成员传达发现。
Python KNN k-邻近算法 手动实现及分析 分类、回归、糖尿病预测实战
Python KNN k-邻近算法 算法原理 \qquad k-邻近算法的核心思想是未标记样本的类别,由距离其最近的k个邻近投票来决定。 \qquad 假设,我们有一个已经标记的数据集,即已经知道了数据集中每个样本所属的类别。此外,有一个未标记的数据样本,我们的任务是预测出这个数据样本所属的类别。k-邻近算法的原理是,计算待标记的数据样本和数据集中每个样本的距离,取距离最近的k个样本。待标记的数据...
保姆级教程:用+86手机号成功注册Discord的三种亲测方法(附节点选择技巧)
本文提供了三种经过验证的方法,帮助用户使用+86手机号成功注册Discord,包括号码格式调整、网络环境优化和设备组合方案。同时详细解析了'手机号无效'报错的深层原因,并附上节点选择技巧,确保注册流程顺利。
1588



被折叠的 条评论
为什么被折叠?



