机器学习算法_knn(福利)(代码片段)

xiu123 xiu123     2022-12-23     701

关键词:

这两天翻了一下机器学习实战这本书,算法是不错,只是代码不够友好,作者是个搞算法的,这点从代码上就能看出来。可是有些地方使用numpy搞数组,搞矩阵,总是感觉怪怪的,一个是需要使用三方包numpy,虽然这个包基本可以说必备了,可是对于一些新手,连pip都用不好,装的numpy也是各种问题,所以说能不用还是尽量不用,第二个就是毕竟是数据,代码样例里面写的只有几个case,可是实际应用起来,一定是要上数据库的,如果是array是不适合从数据库中读写数据的。因此综合以上两点,我就把这段代码改成list形式了,当然,也可能有人会说我对numpy很熟悉啊,而且作为专业的数学包,矩阵的运算方面也很方便,我不否定,那我这段代码恐怕对你不适合,你可以参考书上的代码,直接照打并理解就好了。

knn,不多说了,网上书上讲这个的一大堆,简单说就是利用新样本new_case的各维度的数值与已有old_case各维度数值的欧式距离计算


欧式距离这里也不说了,有兴趣可以去翻我那篇python_距离测量,里面写的很详细,并用符号展示说明,你也可以改成棋盘距离或街区距离试试,速度可能会比欧式距离快,但还是安利欧式距离。


有一点没搞明白的就是,对坐标进行精度化计算这块,实测后确定使用直接计算无论是错误率还是精度,处理前都要比处理后更准确,可能原代码使用小数点的概率更高些吧,也许这个计算对于小数计算精度更有帮助


闲话一些,不多也不少,下面上代码,代码中配有伪代码,方便阅读,如果还看不太明白可以留言,我把详细注释加上

 

以下是代码中使用颜色,选用html的16进制RGB颜色,在应用时将其转换为10进制数字计算,old_case选取红色圈,new_case选取橙色圈

紫色(茄子颜色)

技术分享图片

绿色(黄瓜颜色)

技术分享图片

黄色(香蕉颜色)

技术分享图片

淡绿(西葫芦颜色)

技术分享图片

代码见下

#!/usr/bin//python
# coding: utf-8

‘‘‘
1、获取key和coord_values,样例使用的是list,但是如果真正用在训练上的话list就不适合了,建议改为使用数据库进行读取
2、对坐标进行精度化计算,这个其实我没理解是为什么,可能为了防止错误匹配吧,书上是这样写的
3、指定两个参数,参数一是新加入case的坐标,参数二是需要匹配距离最近的周边点的个数n,这里赢指定单数
4、距离计算,使用欧式距离
  新加入case的坐标与每一个已有坐标计算,这里还有优化空间,以后更新
  计算好的距离与key做成新的key-value
  依据距离排序
  取前n个case
5、取得key
  对前n个case的key进行统计
  取统计量结果最多的key即是新加入case所对应的分组
6、将新加入的values与分组写成key-value加入已有的key-value列队
输入新的case坐标,返回第一步......递归
‘‘‘

import operator

def create_case_list():
  # 1代表黄瓜,2代表香蕉,3代表茄子,4代表西葫芦
  case_list = [[25,3,73732],[27.5,8,127492],[13,6,127492],[16,13,50331049],[17,4,18874516],[22,8,13762774],[14,1,30473482],[18,3,38338108]]
  case_type = [1,1,2,2,3,3,4,4]
  return case_list,case_type

def knn_fun(user_coord,case_coord_list,case_type,take_num):
  case_len = len(case_coord_list)
  coord_len = len(user_coord)
  eu_distance = []
  for coord in case_coord_list:
    coord_range = [(user_coord[i] - coord[i]) ** 2 for i in range(coord_len)]
    coord_range = sum(coord_range) ** 0.5
    eu_distance.append(coord_range)
  merage_distance_and_type = zip(eu_distance,case_type)
  merage_distance_and_type.sort()
  type_list = [merage_distance_and_type[i][1] for i in range(take_num)]
  class_count = 
  for type_case in type_list:
    type_temp = type_case:1
    if class_count.get(type_case) == None:
      class_count.update(type_temp)
    else: class_count[type_case] += 1
  sorted_class_count = sorted(class_count.iteritems(), key = operator.itemgetter(1), reverse = True)
  return sorted_class_count[0][0]

def auto_norm(case_list):
  case_len = len(case_list[0])
  min_vals = [0] * case_len
  max_vals = [0] * case_len
  ranges = [0] * case_len
  for i in range(case_len):
    min_list = [case[i] for case in case_list]
    min_vals[i] = min(min_list)
    max_vals[i] = max([case[i] for case in case_list])
    ranges[i] = max_vals[i] - min_vals[i]
  norm_data_list = []
  for case in case_list:
    norm_data_list.append([(case[i] - min_vals[i])/ranges[i] for i in range(case_len)])
  return norm_data_list,ranges,min_vals

def main():
  result_list = [黄瓜,香蕉,茄子,西葫芦]
  dimension1 = float(input(长度是: ))
  dimension2 = float(input(弯曲度是: ))
  dimension3 = float(input(颜色是: ))
  case_list,type_list = create_case_list()
  #norm_data_list,ranges,min_vals = auto_norm(case_list)
  in_coord = [dimension1,dimension2,dimension3]
  #in_coord_len = len(in_coord)
  #in_coord = [in_coord[i]/ranges[i] for i in range(in_coord_len)]
  #class_sel_result = knn_fun(in_coord,norm_data_list,type_list,3)
  class_sel_result = knn_fun(in_coord,case_list,type_list,3)
  class_sel_result = class_sel_result - 1
  return result_list[class_sel_result]

if __name__ == __main__:
  a = main()
  print 这货是: %s %a

测试结果,效果还不赖

技术分享图片






机器学习-knn算法(代码片段)

从KNN算法步入机器学习殿堂本文中介绍的机器学习算法中的一种监督学习的算法:KNN算法,全称是K-NearestNeighbor,中文称之为K近邻算法。它是机器学习可以说是最简单的分类算法之一,同时也是最常用的分类算法... 查看详情

监督学习算法_k-近邻(knn)分类算法_源代码

因为自己想学着去写机器学习的源码,所以我最近在学习《机器学习实战》这本书。《机器学习实战》是利用Python2完成的机器学习算法的源代码,并利用机器学习方法来对实际问题进行分析与处理。(《机器学习实战》豆瓣读... 查看详情

机器学习分类算法--k近邻算法knn(代码片段)

...应用数学知识少(近乎为零)效果好(缺点?)可以解释机器学习算法使用过程中很多细节问题更完整的刻画机器学习应用的流程 importnumpyasnpimportmatplotlib.pyplotasplt实现我们自己的kNN创建简单测试用例raw_data_X=[[3.39353 查看详情

机器学习knn算法实现手写板字迹识别(代码片段)

文章目录【机器学习】KNN算法实现手写板字迹识别1.前言2.实验背景3.测试过程3.1手写板及测试数据的制作3.2加载训练数据并进行KNN模型搭建3.3结果预测4.总结【机器学习】KNN算法实现手写板字迹识别1.前言​上篇博客通过KNN算法... 查看详情

机器学习-k-近邻算法(代码片段)

...邻算法(k-nearestneighborsalgorithm),又称为KNN算法,是这学期机器学习课教的第一个算法,也是我接触的第一个机器学习算法。学习之后的感触便是:机器学习和我想象的有点不一样KNN是真滴简单(? ̄△ ̄)?算法介绍KNN属于有监督的分... 查看详情

机器学习算法(knn)(代码片段)

KNN简介KNN(k-NearestNeighbor)算法的思想总结一下:就是在数据和标签已知的情况下,输入测试数据,将测试数据的特征与训练集中对应的特征进行相互比较,找到训练集中与之最为相似的前K个数据,则该测试数据对应的类别就是K个... 查看详情

转:机器学习算法原理解析-分类(代码片段)

...KNN概述K最近邻(k-NearestNeighbor,KNN)分类算法是最简单的机器学习算法。KNN算法的指导思想是“近 查看详情

机器学习算法原理解析——分类(代码片段)

...KNN概述K最近邻(k-NearestNeighbor,KNN)分类算法是最简单的机器学习算法。KNN算法的指导思想是“近朱者赤,近墨者黑”,由你的邻居来推断你的类型。本质上,KNN算法就是用距离来衡量样本之间的相似度。1.2算法图示从训... 查看详情

机器学习之路--knn算法(代码片段)

    机器学习实战这本书是基于python的,如果我们想要完成python开发,那么python的开发环境必不可少:(1)python3.52,64位,这是我用的python版本(2)numpy1.11.3,64位,这是python的科学计算包,是python的一个矩阵类型,... 查看详情

人工智能之knn算法(代码片段)

...-kNN.html基于python实现的KNN算法邻近算法(k-NearestNeighbor)是机器学习中的一种分类(classification)算法,也是机器学习中最简单的算法之一了。虽然很简单,但在解决特定问题时却能发挥很好的效果。因此,学习kNN算法是机器学习... 查看详情

机器学习实战☛k-近邻算法(k-nearestneighbor,knn)(代码片段)

机器学习实战☛k-近邻算法(K-NearestNeighbor,KNN)文章目录机器学习实战☛k-近邻算法(K-NearestNeighbor,KNN)k-近邻算法概述原理简介k-近邻算法一般流程伪代码与实现示例:使用kNN改进约会网站的配对效... 查看详情

机器学习:knn的超参数(代码片段)

...个数/预测数据集样本总数 二、超参数超参数:运行机器学习算法前需要指定的参数;kNN算法中的超参数:k、weights、P;一般超参数之间也相互影响;调参,就是调超参数; 1)问题  #以kNN算法为例平票:如果k个点中,... 查看详情

机器学习-knn-寻找最好的超参数(代码片段)

一、超参数和模型参数超参数:在算法运行前需要决定的参数模型参数:算法运行过程中学习的参数-kNN算法没有模型参数-kNN算法中的k是典型的超参数  寻找好的超参数领域知识经验数值实验搜索二、通过sklearn中的数据集进... 查看详情

pyhon3实现机器学习经典算法knn(代码片段)

一、KNN概述   K-(最)近邻算法KNN(k-NearestNeighbor)是数据挖掘分类技术中最简单的方法之一。它具有精度高、对异常值不敏感的优点,适合用来处理离散的数值型数据,但是它具有  非常高的计算复杂度和空间复杂度... 查看详情

机器学习-knn算法(鸢尾花分类实战)(代码片段)

文章目录简介代码复现sklearn库调用前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。简介K近邻(KNearestNeighbors,KNN)算法是最简单的分类算法... 查看详情

knn(代码片段)

...-NearestNeighbor,KNN)算法,是著名的模式识别统计学方法,在机器学习分类算法中占有相当大的地位。它是一个理论上比较成熟的方法。既是最简单的机器学习算法之一,也是基于实例的学习方法中最基本的,又是最好的文本分类算... 查看详情

机器学习与数据挖掘系列算法之--knn的python实现(代码片段)

K近邻算法原理较为简单,不多介绍,直接上python实现,有什么疑问或错误的地方敬请指出探讨,谢谢。Knn.pyfromalgorithm.classification.common.PredictBaseimportPredictBasefromalgorithm.classification.commonimportUtils#author:chenhq#createdate:20... 查看详情

机器学习:7.机器学习---knn算法编程实战:红酒分类(代码片段)

第1关:分析红酒数据importnumpyasnpdefalcohol_mean(data):'''返回红酒数据中红酒的酒精平均含量:paramdata:红酒数据对象:return:酒精平均含量,类型为float'''#*********Begin*********#returnnp.mean(data['data'],axis=0)[0]#... 查看详情