可是有个别地点使用numpy搞数组

这段时间翻了弹指间机器学习实战那本书,算法是没错,只是代码远远不足自身,小编是个搞算法的,那一点从代码上就能够看出来。然则多少地点选取numpy搞数组,搞矩阵,总是感到奇怪,三个是急需运用三方包numpy,纵然这几个包为主可以说必备了,然而对于一些菜鸟,连pip都用不好,装的numpy也是各类主题素材,所以说能不用依然尽量不用,第4个便是毕竟是数额,代码样例里面写的唯有几个case,不过实在选择起来,一定是要上数据库的,即使是array是不合乎从数据库中读写多少的。由此综合上述两点,我就把这段代码改成list格局了,当然,也也许有人会说自家对numpy很熟练啊,並且作为规范的数学包,矩阵的演算方面也很方便,小编不否定,那本身这段代码大概对你不相符,你能够参照他事他说加以考察书上的代码,直接照打并驾驭就好了。

knn,相当的少说了,英特网书上讲那一个的一大堆,轻松说就是应用新样本new_澳门太阳集团城网址,case的各维度的数值与已有old_澳门太陽城集团登录网址,case各维度数值的欧式距离计算

欧式距离这里也不说了,有意思味能够去翻自家那篇python_离开衡量可是有个别地点使用numpy搞数组。可是有个别地点使用numpy搞数组。可是有个别地点使用numpy搞数组。,里面写的很详细,并用符号显示表达,你也可以改成棋盘距离或街区距离试试,速度大概会比欧式距离快,但依然安利欧式距离。

可是有个别地点使用numpy搞数组。有点没搞领悟的便是,对坐标进行精度化总计那块,实地衡量后分明使用直接总计无论是错误率依旧精度,管理前都要比拍卖后更可相信,只怕原代码使用小数点的票房价值越来越高些吧,恐怕这么些总括对于小数计算精度更有支持

聊天一些,非常少也十分的多,下边上代码,代码中配有伪代码,方便阅读,倘若还看不老子@楚能够留言,作者把详细注明加上

 

可是有个别地点使用numpy搞数组。以下是代码中利用颜色,选择html的16进制CR-VGB颜色,在利用时将其转移为10进制数字总计,old_case采纳青古铜色圈,new_case选择酱色圈

玳瑁红(紫茄颜色)

澳门太阳集团城网址 1

均红(唐瓜颜色)

澳门太阳集团城网址 2

香艳(西贡蕉颜色)

澳门太阳集团城网址 3

白灰(西葫芦颜色)

澳门太阳集团城网址 4

代码见下

#!/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

测量试验结果,效果还不赖

澳门太阳集团城网址 5

You may also like...

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图