<Python><有监督>kNN--近邻分类算法

有监督的kNN近邻算法:

(1)计算已知类别数据集中的点与当前点之间的距离

(2)按照距离递增次序排序

(3)选取与当前点距离最小的k个点

(4)确定前k个点所在类别的出现频率

(5)返回前k个点出现频率最高的类别作为当前点的预测分类

#数据样例

1 2:a

1 3:a

1 4:a

1 5:b

6 2:b

6 3:b

100 200:c

101 199:c

300 444:d

299 50:d

1000 10000:d

#版本0:纯python

"kNN"
from math import sqrt
from collections import Counter

distance=lambda a,b:sqrt(sum(map(lambda ai,bi:pow(ai-bi,2),a,b))) if len(a)==len(b) else "Error0:data length match fail"
distance2=lambda a,b:distance([int(i) for i in a.split()],[int(i) for i in b.split()])  # for strings
#print(distance2('1 2 4 7 8','2 5 5 6 110'))
readData=lambda file:{line.split(':')[0]:line.strip().split(':')[1] for line in open(file)}
#print(readData())

def judgeSpot(fileIn='test0.txt',x='1 2',num=5):
    distanceDict,data={},readData(fileIn)
    for k in data:
        distanceDict[str(distance2(x,k))]=data[k]
    # sortDistance=sorted(distanceDict.items(),key=lambda x:float(x[0]))[:num]
    # kindDict=[item[1] for item in sortDistance]
    return sorted(dict(Counter(item[1] for item in sorted(distanceDict.items(),key=lambda x:float(x[0]))[:num])).items(),key=lambda x:x[1],reverse=True)[0][0]
#print(judgeSpot('1000 10000','test0.txt'),)

def judgeSpot2(dataIn,x='1 2',num=5):
    distanceDict,data={},dataIn
    for k in data:
        distanceDict[str(distance2(x,k))]=data[k]
    # sortDistance=sorted(distanceDict.items(),key=lambda x:float(x[0]))[:num]
    # kindDict=[item[1] for item in sortDistance]
    return sorted(dict(Counter(item[1] for item in sorted(distanceDict.items(),key=lambda x:float(x[0]))[:num])).items(),key=lambda x:x[1],reverse=True)[0][0]
print(judgeSpot('test0.txt','1000 10000'),)

#Rate of Right
def rateRight(fileIn='test0.txt',num=5):
    countRight,data=0,readData(fileIn)
    for k in data:
        if judgeSpot2(data,k,num)==data[k]:
            countRight+=1
    return countRight/float(len(open(fileIn).readlines()))
print(rateRight())

#版本1:numpy版 (待实现)

搜索

复制

时间: 2024-10-11 15:39:45

<Python><有监督>kNN--近邻分类算法的相关文章

KNN邻近分类算法

K邻近(k-Nearest Neighbor,KNN)分类算法是最简单的机器学习算法了.它采用测量不同特征值之间的距离方法进行分类.它的思想很简单:计算一个点A与其他所有点之间的距离,取出与该点最近的k个点,然后统计这k个点里面所属分类比例最大的,则点A属于该分类. 下面用一个例子来说明一下: 电影名称 打斗次数 接吻次数 电影类型 California Man 3 104 Romance He’s Not Really into Dudes 2 100 Romance Beautiful Wo

K近邻分类算法

1 # -*- coding: utf-8 -*- 2 """ 3 Created on Thu Jun 28 17:16:19 2018 4 5 @author: zhen 6 """ 7 from sklearn.model_selection import train_test_split 8 import mglearn 9 import matplotlib.pyplot as plt 10 x, y = mglearn.dataset

K近邻分类算法实现 in Python

K近邻(KNN):分类算法 * KNN是non-parametric分类器(不做分布形式的假设,直接从数据估计概率密度),是memory-based learning. * KNN不适用于高维数据(curse of dimension) * Machine Learning的Python库很多,比如mlpy(更多packages),这里实现只是为了掌握方法 * MATLAB 中的调用,见<MATLAB分类器大全(svm,knn,随机森林等)> * KNN算法复杂度高(可用KD树优化,C中可以用

带监督的文本分类算法FastText

该算法由facebook在2016年开源,典型应用场景是"带监督的文本分类问题". 模型 模型的优化目标如下: 其中,$<x_n,y_n>$是一条训练样本,$y_n$是训练目标,$x_n$是normalized bag of features.矩阵参数A是基于word的look-up table,也就是A是词的embedding向量.$Ax_n$矩阵运算的数学意义是将word的embedding向量找到后相加或者取平均,得到hidden向量.矩阵参数B是函数f的参数,函数f

查看neighbors大小对K近邻分类算法预测准确度和泛化能力的影响

代码: 1 # -*- coding: utf-8 -*- 2 """ 3 Created on Thu Jul 12 09:36:49 2018 4 5 @author: zhen 6 """ 7 """ 8 分析n_neighbors的大小对K近邻算法预测精度和泛化能力的影响 9 """ 10 from sklearn.datasets import load_breast_canc

Python实战之KNN实现

Python实战之KNN实现 用Python来实现K近邻分类算法(KNN)已经是一个老生常谈的问题,网上也已经有诸多资料,不过这里我还是决定记录一下自己的学习心得. 1.配置numpy库 numpy库是Python用于矩阵运算的第三方库,大多数数学运算都会依赖这个库来进行,关于numpy库的配置参见:Python配置第三方库Numpy和matplotlib的曲折之路,配置完成后将numpy库整体导入到当前工程中. 2.准备训练样本 这里简单的构造四个点并配以对应标签作为KNN的训练样本: # =

KNN分类算法--python实现

一.kNN算法分析 K最近邻(k-Nearest Neighbor,KNN)分类算法可以说是最简单的机器学习算法了.它采用测量不同特征值之间的距离方法进行分类.它的思想很简单:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别. KNN算法中,所选择的邻居都是已经正确分类的对象.该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别.由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别

python机器学习基础教程-鸢尾花分类

一: 环境准备: 1.导入的库: import numpy as np import matplotlib.pyplot as plt import pandas as pd import mglearn 2.导入数据集 from sklearn.datasets import load_iris iris_dataset = load_iris() 二. 划分训练数据和测试数据 1. train_test_split: 将数据集打乱并进行拆分 from sklearn.model_select

Python数据挖掘—回归—KNN

概念 监督学习(Supervised Learning) 从给定标注的训练数据集中学习出一个函数,根据这个函数为新函数进行标注 无监督学习(Unsupervised Learning) 从给定无标注的训练数据中学习出一个函数,根据这个函数为所有数据标注 分类(Classification) 分类算法通过对已知类别训练数据集的分析,从中发现分类规则,以此预测新数据的类别,分类算法属于监督学习 KNN(K Nearest Neighbors) K近邻分类算法:KNN算法从训练集中找到和新数据最接近的