文档章节

KNN

二胡艺
 二胡艺
发布于 2017/03/22 23:06
字数 456
阅读 23
收藏 0
KNN

一、K近邻算法(K-nearest neighbor)

算法:
输入:
$T = { (x_{1},y_{1}),(x_{2},y_{2}),..,(x_{n},y_{n})}$
其中,$x_{i} \in X \subseteq R^{n}$为特征向量,$y_{i} \in Y ={c_{1},c_{2},..,c_{k}}$为类别,$i=1,2,3,..,N$;实例x
输出:x所属类别y
(1). 根据距离度量,在训练集T中找出与$x$最近邻的$k$个点,涵盖这$k$个点的邻域为$N_{k}(x)$
(2). 在$N_{k}(x)$中根据分类决策规则(如多数表决)决定$x$的类别$y$:
$y = argmax_{c_{j}} \sum_{x_{i} \in N_{k}(x)} I(y_{i} = c_{j}),i=1,2,..,M;j=1,2,..,K$
其中$I$为指示函数,即当$y_{i} = c_{j}$时$I$为1,否则$I$为0。

import numpy as np

class KNN:
    def __init__(self,X,Y,k):
        self.K = k
        self.X = X
        self.Y = Y
    def predict(self,x):
        num_samples,feat_dim = self.X.shape
        dist = np.zeros((num_samples))
        for n in range(num_samples):
            dist[n] = self.__calc_dist(X[n,:],x)
        nsmallest_idx = self.__nsmallest(dist,self.K)
        rsp = [self.Y[k] for k in nsmallest_idx]
        yset = list(set(rsp))
        return yset[np.array([rsp.count(i) for i in yset]).argmax()]
    def __calc_dist(self,x1,x2):
        return np.sum((x1-x2)**2)
    
    def __nsmallest(self,x,n):
        return x.argsort()[0:n]
            

例2.贷款申请样本数据表

ID 年龄 有工作 有自己的房子 信贷情况 类别
1 青年 一般
2 青年
3 青年
4 青年 一般
5 青年 一般
6 中年 一般
7 中年
8 中年
9 中年 非常好
10 中年 非常好
11 老年 非常好
12 老年
13 老年
14 老年 非常好
15 老年 一般

试预测:$x = (老年,是,否,一般,是)$ 是否发放贷款

X = np.array([[1,0,0,0,0,1,0,0,0],[1,0,0,0,0,0,1,0,0],[1,0,0,1,0,0,1,0,1],
             [1,0,0,1,1,1,0,0,1],[1,0,0,0,0,1,0,0,0],[0,1,0,0,0,1,0,0,0],
             [0,1,0,0,0,0,1,0,0],[0,1,0,1,1,0,1,0,0],[0,1,0,0,1,0,0,1,1],
             [0,1,0,0,1,0,0,1,1],[0,0,1,0,1,0,0,1,1],[0,0,1,0,1,0,1,0,1],
             [0,0,1,1,0,0,1,0,1],[0,0,1,1,0,0,0,1,1],[0,0,1,0,0,1,0,0,0]])
Y = np.array([0,0,1,1,0,0,0,1,1,1,1,1,1,1,0])
x = np.array([[0,0,1,1,0,1,0,0,1]])

clf = KNN(X,Y,3)
print clf.predict(x)
1

© 著作权归作者所有

二胡艺
粉丝 4
博文 42
码字总数 12555
作品 0
镇江
程序员
私信 提问

暂无文章

Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
今天
6
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
今天
4
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
今天
7
0
从零基础到拿到网易Java实习offer,我做对了哪些事

作为一个非科班小白,我在读研期间基本是自学Java,从一开始几乎零基础,只有一点点数据结构和Java方面的基础,到最终获得网易游戏的Java实习offer,我大概用了半年左右的时间。本文将会讲到...

Java技术江湖
昨天
7
0
程序性能checklist

程序性能checklist

Moks角木
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部