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、测试算法:
浙公网安备 33010602011771号