1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > K-近邻算法(分类算法)

K-近邻算法(分类算法)

时间:2022-09-16 08:24:45

相关推荐

K-近邻算法(分类算法)

一、算法概述

来源:KNN算法最早是由Cover和Hart提出的一种分类算法。

注:K-近邻算法:需要做标准化处理。

K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:在特征空间中,如果一个样本附近的k个最近(即特征空间中最邻近)样本的大多数属于某一个类别,则该样本也属于这个类别。

用官方的话来说,所谓K近邻算法,即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例(也就是上面所说的K个邻居), 这K个实例的多数属于某个类,就把该输入实例分类到这个类中。

1、距离计算公式

二、sklearn k-近邻算法API

sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm='auto')

n_neighbors:int,可选(默认=5),k_neighbors查询默认使用的邻居数algotithm:{‘auto’,'ball_tree',‘kd_tree’,'brute'},可选用计算最近邻居的算法:‘ball_tree’将会选用 BallTree,‘kd_tree’将使用KDTree。‘auto’将尝试根据传递给fit方法的值来决定最适合的算法。(不同实现方式影响效率)

三、预测入住位置

数据来源:链接:/s/1Ph-N1HEDlVxeD3jYjpNedA 提取码:vwi8

这项比赛的目的是预测一个人想签到哪个地方。为了比赛的目的,Facebook创建了一个人工世界,由10万乘10公里的正方形中的100,000多个地方组成。对于给定的一组坐标,您的任务是返回最可能的位置的排名列表。数据被制作成类似于来自移动设备的位置信号,从而使您具有处理真实数据(复杂的数值和嘈杂的值)所需的风味。不一致和错误的位置数据可能会破坏Facebook Check In等服务的体验。

在本案例中,将根据用户的位置,准确性和时间戳来预测用户正在检查的业务。

1、查看档案说明信息

2、具体处理流程

有无特征工程处理(标准化)区别:会影响到预测的准确率(做了标准化,准确率会提高)

from sklearn.model_selection import train_test_splitfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn.preprocessing import StandardScalerimport pandas as pddef knncls():"""k-近邻预测用户签到位置:return: None"""#读取数据(获取)file_path = "E:\python\pyData\\facebook-v-predicting-check-ins\\train.csv"data = pd.read_csv(file_path)print(data.info())#处理数据#1、缩小数据的范围(按照x,y),查询数据进行筛选data = data.query("x > 1.0 & x < 1.25 & y > 2.5 & y < 2.75")#2、处理时间数据time_value = pd.to_datetime(data['time'], unit='s')print(time_value)time_value = pd.DatetimeIndex(time_value) #把日期格式转换成字典格式print(time_value)print("*"*100)#构造一些新特征data['day'] = time_value.daydata['hour'] = time_value.hourdata['weekday'] = time_value.weekdaydata = data.drop(['time'], axis=1) #1代表列;把时间戳特征删除#把签到数量少于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)]#取出数据当中的特征值和目标值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)#特征工程(标准化)std = StandardScaler()#对测试集和训练集的特征值进行标准化x_train = std.fit_transform(x_train)x_test = std.fit_transform(x_test)#进行算法流程knn = KNeighborsClassifier(n_neighbors=5) #实例化#fit、predict、scoreknn.fit(x_train, y_train)#得出预测结果y_predict = knn.predict(x_test)print("预测的目标签到位置为:", y_predict)#得出准确率print("预测的准确率:", knn.score(x_test, y_test))return Noneif __name__ == '__main__':knncls()

不做特征化处理(标准化)结果:

做特征处理(标准化)结果:

四、K-近邻算法总结

1、K值取多大?有什么影响?

K值取很小:容易受异常点的影响K值取很大:容易受K值数量(类型)的影响

2、优缺点明确

优点:

简单,易于理解,无需估计参数,无需训练

缺点:

懒惰算法,对测试样本分类时的计算量大,内存开销大必须指定K值,K值选择不当,则分类精度不能保障

注:算法实例化中传入的参数叫做超参数,如n_neighbors

3、使用场景

小数据场景,几千~几万样本,具体场景、具体业务去测试

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。