您好,登录后才能下订单哦!
怎么实现一个KNN算法,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
教你如何自己实现KNN算法
KNN算法,也称为K邻近算法,可以解决回归和分类问题,但解决分类问题才是它的优势。
KNN算法的本质就是寻找与我们提供的数据相似的k个样本,然后判断这k个样本的标签,最后统计每个标签出现的次数,次数最多的标签,就会被当作我们提供的数据的标签。
先说说工作流程:
机器学习是基于数据的,所以要先将实物转换为向量、矩阵或张量的形式
通过欧式距离计算出测试样本与其他样本之间的距离
将距离按照小到大排序,并取前K个值
判断前K个值相应的标签,并进行统计
统计最多的标签即为预测结果
现在我们来动手实现一下
先导入所有需要导入的库或模块
# 导入sklearn自带的数据集from sklearn import datasets# 导入计数器,用于统计标签出现的次数from collections import Counter# 用于分割数据集from sklearn.model_selection import train_test_split# 用于计算欧式距离import numpy as np
其次,导入iris数据集,存储样本特征和标签
data = datasets.load_iris()# 将样本特征存储到XX = data['data']# 将样本标签存储到YY = data['target']
然后为了后期评估模型,这里将数据集分为训练集和测试集
X_train,X_test,Y_train,Y_test = train_test_split(X,Y,random_state=2000)
设置random_state为固定值,这样每次的运行结果就会一样,帮助我们判断过程出现的bug
再次,写一个计算距离的函数eus_dis
def eus_dis(instance1, instance2): '''计算两个样本之间的距离 instance1:array型 instance2:array型 ''' distance = np.sqrt(sum((instance1-instance2)**2)) return distance
接着,真正的开始实现KNN算法
def KnnClassify(X,Y,test,k): '''实现KNN算法 X:特征训练集-->array型 Y:标签训练集-->array型 test:特征测试集-->array型 k:邻近值-->int ''' # 计算样本之间的距离 distances = [eus_dis(x, test) for x in X] # 按照从小到大排序,并取前K个值,返回下标 kneighbors = np.argsort(distances)[:k] # 统计每个标签出现的次数 count = Counter(Y[kneighbors]) # 返回出现次数最多的标签 return count.most_common()[0][0]
最后我们来进行测试,观察其准确率
# 存储模型对特征测试集的预测结果predirect = [KnnClassify(X_train,Y_train,test,5) for test in X_test]# 计算预测结果与实际结果相等的个数count = np.count_nonzero((predirect==Y_test)==True)print("该模型的预测准确率为:%.3f" % (count/len(X_test)))
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。