iBit

导航

2、分类问题示例

基本概念:

只关注类别这个变量,把一条条数据划分为不同的类

目标:根据已知类别的数据集,经过训练得到一个分类模型,再用模型对类别未知的数据进行分类。

过程思路:

1、准备数据集

  • Iris植物分类数据集(scikit-learn库里内置的该数据集,可直接导入)
  • 四个特征:sepal length、sepal width、petal length、petal width         
  • 三种类别:Iris Setosa、Iris Versicolour、Iris Virginica
  • 这里分类的目的是根据植物的特征推测它的种类
  • 数据集各特征值为连续型,也就是有无数可能的值。
  • 我们即将使用的算法使用类别型(离散型),不同数字表示不同类别。因此需要把连续值转变为类别型,这个过程叫离散化
  • 简单离散化算法:确定一个阈值,将低于该阈值的特征值置为0,高于阈值置为1。阈值设定为该特征所有特征值的均值。  特征值:0(低于阈值)、1(高于阈值)
  • 得到一个数组,数组第一项是第一个特征的均值,以此类推。
  • 将数据集打散,把连续的特征值转化为类别型,打散后的数据集用于后面的训练和测试。

2、实现OneR算法

  • 思路:根据已有数据中,具有相同特征值的个体最可能属于哪一类别进行分类——只选取分类效果最好的一个用作分类依据。
  • 过程:遍历每个特征的每个取值(如0或1),统计在各个类别中出现的次数,找到它出现次数最多的类别,并统计它在其它类别中出现的次数。
  • 计算每个特征值的错误率:各个取值的错误率相加。选取错误率最低的特征作为唯一的分类准则(OneR)
  • 实现:
  • 创建一个函数用于预测类别,并给出错误率
    • 导入defaultdict(创建字典) 和itemgetter(排序)
    • 创建函数声明,参数:数据集、类别数组、选好的特征索引值、特征值
    • 遍历数据集中每一条数据,统计具有给定特征值(0或1)的个体在各个类别出现的次数。
    • 对字典进行排序,找到最大值。
    • 计算该条规则的错误率(在其它类别中出现的次数)
    • 返回待预测个体的类别和错误率

          创建一个函数

    • 对于某项特征,遍历其每一个特征值,使用上一个函数得到预测结果和每一个特征值的错误率。
    • 把所有错误率累加起来,得到该特征的总错误率。
    • 创建函数声明,参数:数据集、类别数组、选好的特征索引值
    • 找出给定的特征共有几种不同的取值——以数组的形式返回特征索引值所指的列,用set将数组转化为集合。
    • 创建字典用作预测器predictors:字典的键为特征值,值为类别(比如:键为0,值为2表示特征值为0的个体属于类别2)
    • 创建error列表,存储每个特征值的错误率。
    • 主干部分:遍历选定特征的每个不同的特征值,用上一个定义的函数找出每个特征值最可能的类别,计算错误率,并分别保存在预测器predictors和error列表中。
    • 计算总错误率,返回预测器及总错误率。

3、测试算法:

posted on 2019-10-08 21:38  iBit  阅读(563)  评论(0)    收藏  举报