kNN&决策树

kNN
k近邻算法(有效并易于掌握)

优点:精度高、对异常值不敏感、无数据输入假定。
缺点:计算复杂度高、空间复杂度高。

适用数据范围:数值型和标称型。

​原理:存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们只选择样本数据集中前k个最相似的数据,这就是k-近邻算法中k的出处,通常k是不大于20的整数。最后,选择k个最相似数据中出现次数最多的分类,作为新数据的分类。

流程
收集数据​-准备数据-分析数据-训练算法-测试算法-使用算法

​对未知类别属性的数据集中的每个点依次执行以下操作:
(1)计算已知类别数据集中的点与当前点之间的距离;
(2)按照距离递增次序排序;
(3)选取与当前点距离最小的k个点;
(4)确定前k个点所在类别的出现频率;
(5)返回前k个点出现频率最高的类别作为当前点的预测分类。

在这里插入图片描述tile()
重复某数组
argsort()
将元素从小到大排列,提取对应索引。
operator.itemgetter()
定义了一个函数,函数作用到对象上才能获取值,可用于排序,reverse参数接受False或True表示是否逆序
readlines()
以列表形式逐行读取文件
zeros()
创建一个全为0的矩阵
split()
通过指定分隔符对字符串进行切片
axis
最外面的括号代表着 axis=0,依次往里的括号对应的 axis 的计数就依次加 1(引用)

​决策树的一般流程
(1)收集数据:可以使用任何方法。
(2)准备数据:树构造算法只适用于标称型数据,因此数值型数据必须离散化。
(3)分析数据:可以使用任何方法,构造树完成之后,我们应该检查图形是否符合预期。
(4)训练算法:构造树的数据结构。
(5)测试算法:使用经验树计算错误率。
(6)使用算法:此步骤可以适用于任何监督学习算法,而使用决策树可以更好地理解数据的内在含义。
​划分数据集的大原则是:将无序的数据变得更加有序。
划分数据集之前之后发生的变化称为信息增益,我们就可以计算每个特征值划分数据集获得的信息增益,获得信息增益最高的特征就是最好的选择。
​集合信息的度量方式称为香农熵或者简称为熵。(熵定义为信息的期望值)
p(xi)是选择该分类的概率
在这里插入图片描述计算所有类别所有可能值包含的信息期望值(n是分类的数目)
在这里插入图片描述

import operator
from math import log

#计算给定数据的香农熵
def calcShannonEnt(dataSet):
    numEntires=len(dataSet)
    labelCounts={
   }
    for featVec in dataSet:
        currentLabel=featVec[-1]
        if currentLabe not in labelCounts.keys():
            labelCounts[currentLabel]=0
            labelCounts[currentLabel]+=1
        shannonEnt=0.0
        for key in labelCounts:
            prob=float(labelCounts[key])/numberEntries
            shannonEnt-=prob*log(prob,2)
        return shannonEnt
    
#某鉴定函数
def createDataSet():
    dataSet=[[1,1,'yes'],[1,1,'yes'],[1,0,'no'],[0,1,'no'],[0,1,'no']]
    labels=['no surfacing','flippers']
    return dataSet,labels

#按照给定特征划分数据集
def splitDataSet(dataSet,axis,value):
    retDataSet=[]
    if featVec[axis]==value:
        reducedFeatVec=featVec[:axis]
        reducedFeatVec.extend(featVec[axis+1:])
        retDataSet.append(reducedFeatVec)
    return retDataSet

#选择最好的数据划分方式
def chooseBestFeatureTOSplit(dataSet):
    numFeatures=len(dataSet[0])-1
    baseEntropy=calcShannonEnt(dataSet)
    bestInfoGain
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值