K-近邻算法

"""
   Author:Tom
   Date:2017-1-22
"""
import operator
import numpy as np

# class operator
def create_construct():
    group = np.array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])    #
    labels = ['Tom', 'Jeer', 'Sam', 'Tim']
    return group, labelst


# extend create_construct
# group: dimensional array
# label: tag array
def create_construct_m(group, label):
    return group, label


# open

def open_file(t):
    with open(t) as f:
        pass


#

# classfiy
# inX:input a new data
# dataset:collection
# label:target
# k: neighbour
def create_classfiy(inX, dataset, label, k):
    dataset_size = dataset.shape[0]                              # element of first of dataset stand for that ....
    dataset_tile = np.tile(inX, (dataset_size, 1)) - dataset     # gernate a common array with the dataset,(3,4) - (5,2)
    dataset_sq   = dataset_tile**2                                             #  (3 - 5, 4 -2) ** 2
    dataset_distance = dataset_sq.sum(axis = 1)                #   合并所有元素
    dataset_value = dataset_distance**0.5                            #  开方
    dataset_sorted = dataset_value.argsort()                        # sorted the el


    class_count = {}
    for i in range(k):
        label_val = label[dataset_sorted[i]]                               # iter the label
        class_count[label_val] = class_count.get(label_val, 0) + 1         # {'Tom':'1'}
        sort_class_count = sorted(class_count.iteritems(), key = operator.itemgetter(1), reverse = True)

        """
         iteritems(...)
            D.iteritems() -> an iterator over the (key, value) items of D

         sorted function  return list obj
            
          >>> inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)]
          >>> getcount = itemgetter(1)
          >>> map(getcount, inventory)
          [3, 2, 5, 1]
          >>> sorted(inventory, key=getcount)
          [('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)]

        """
        return 'My name is %s ' % sort_class_count[0][0]


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值