Python数据挖掘入门与实践-OneR分类算法

OneR算法

OneR算法是根据已有的数据中,具有相同特征值的个体最可能属于哪个类别进行分类。
在本例中,只需选区Iris是个特征中分类效果最好的一个作为分类依据。

使用OneR算法对植物进行分类

离散化

数据集的特征为连续值,把连续值转变为类别行,这个过程叫作离散化。

1、准备数据集

每条数据集中给出了四个特征:sepal length,sepal width,petal length,petal width,可以从sklearn-learn使用该数据集

from sklearn.datasets import load_iris
import numpy as np
dataset = load_iris()
print(dataset.DESCR)
X = dataset.data
y = dataset.target

2、数据处理

使用离散化算法确定数据,通过确定一个阈值,将低于该阈值的特征值置为0,高于阈值的置为1,设每个特征的阈值为所有特征的均值,计算方法如下:

attribute_means = X.mean()

进行类型转换

X_d = np.array(X >= attribute_means, dtype='int')

3、实现OneR算法

通过OneR算法,我们将计算按照每个特征进行分类的错误率,然后选区错误率最低的特征作为分类准则,
首先创建函数,参数分别是数据集,类别数组,选好的特征索引值,特征值

from collections import defaultdict
from operator import itemgetter
def train_feature_value(X, y_true, feature_index, value):class_counts = defaultdict(int)for sample, y in zip(X, y_true):if sample[feature_index] == value:class_counts[y] += 1sorted_class_counts = sorted(class_counts.items(),key=itemgetter(1), reverse=True)most_frequent_class = sorted_class_counts[0][0]incorrect_predictions = [class_count for class_value,class_count in class_counts.items() if class_value != most_frequent_class]error = sum(incorrect_predictions)return most_frequent_class, error

对于任意一项特征,遍历其中每一个特征值使用上述函数计算错误率。

def train_on_feature(X, y_true, feature_index):values = set(X[:,feature_index])#字典predictors作为预测器,字典的键位特征值,值为类别#errors表示每个特征值的错误率predictors = {}errors = []#调用函数记录每个特征值可能的类别,计算错误率并保存到predictor中for current_value in values:most_frequent_class, error = train_feature_value(X,y_true, feature_index, current_value)predictors[current_value] = most_frequent_classerrors.append(error)total_error = sum(errors)return predictors, total_error

4、测试算法

切割数据集

from sklearn.cross_validation import train_test_split
Xd_train, Xd_test, y_train, y_test = train_test_split(X_d, y, random_state=14)

接下来计算所有特征值的目标类别(预测器)

all_predictors = {}
errors = {}
for feature_index in range(Xd_train.shape[1]):predictors, total_error = train_on_feature(Xd_train,y_train,feature_index)all_predictors[feature_index] = predictorserrors[feature_index] = total_error

找出错误率最低的特征,作为分类准则

best_feature, best_error = sorted(errors.items(), key=itemgetter(1))[0]

对预测器进行排序,找出最佳特征并创建model模型,创建函数通过遍历数据集中每条数据完成预测

model = {'feature': best_feature,'predictor': all_predictors[best_feature]}def predict(X_test, model):feature = model['feature']predictor = model['predictor']y_predicted = [predictor[int(sample[feature])] for sample in X_test]return y_predicted

比较结果和实际类别进行预测,得出正确率

y_predicted = predict(Xd_test, model)
accuracy = np.mean(y_predicted == y_test) * 100
print("The test accuracy is {:.1f}%".format(accuracy))

写在最后

OneR算法的思路很简单,但是整个编程过程对于新手来说比较复杂,还是需要加强算法和数据结构方面的练习。

Python数据挖掘入门与实践-OneR分类算法相关推荐

  1. 《python数据挖掘》和《python数据挖掘入门与实践》两本书读后感

    这些天花了很多时间来学习数据挖掘这门课程,有很多心得和感悟,所以写下这篇博客来表达自己读完这两本书的感受! 首先推荐大家通过这两本书来入门数据挖掘这个领域,python数据挖掘这本书较容易,还花了很大 ...

  2. Python数据挖掘入门与实践---用决策树预测获胜球队

    数据集来源:1.  2013-14 NBA Schedule and Results 2.2013年 NBA 赛季排名情况 参考书籍:<Python数据挖掘入门与实践> 1.加载数据集: ...

  3. 《python数据挖掘入门与实践》决策树预测nba数据集

    前言: 学到决策树预测球队输赢时,按照书中网址去下载数据集,无奈怎么也没下载成功.即使下载了excel文件也是破损的.咱可是学了python的银,那好吧,我就把它爬取下来.(资源在下面) 代码: '' ...

  4. 改写《python数据挖掘入门与实践》第九章Gutenberg书籍下载代码

    @数据挖掘 改写<python数据挖掘入门与实践>第九章Gutenberg书籍下载代码 可能是gutenberg网站改版的缘故,随书附带的getdata.py代码执行会报错. 个人将其进行 ...

  5. python_tweets.json (python数据挖掘入门与实践数据集下载)

    最近在看python数据挖掘入门与实践一书,书不错,有个不好的地方是,书上所用的数据集,有几个测试数据在网上非常不好找 下面几个资源是我自己整理出来的,上传到CSDN,有需要的朋友可以下载 leagu ...

  6. 数据挖掘入门读物《Python数据挖掘入门与实践》豆瓣评分[7.70]

    好书推荐.视频分享,公众号"读书ReadBook"与您一起进步 下载地址-- 1.点击阅读原文或者地址 https://ebooklist.mobi/2019/05/20/6465 ...

  7. Python数据挖掘入门与实践pdf

    下载地址:网盘下载 内容简介  · · · · · · 本书作为数据挖掘入门读物,介绍了数据挖掘的基础知识.基本工具和实践方法,通过循序渐进地讲解算法,带你轻松踏上数据挖掘之旅.本书采用理论与实践相结 ...

  8. Python数据挖掘入门与实践 彩图 pdf

    下载地址:网盘下载 内容简介  · · · · · · 本书作为数据挖掘入门读物,介绍了数据挖掘的基础知识.基本工具和实践方法,通过循序渐进地讲解算法,带你轻松踏上数据挖掘之旅.本书采用理论与实践相结 ...

  9. python 数据挖掘 简书_[Python数据挖掘入门与实践]-第一章开启数据挖掘之旅

    1.数据挖掘简介(略) 2.使用Python和IPython Notebook 2.1.安装Python 2.2.安装IPython 2.3.安装scikit-learn scikit-learn是用 ...

最新文章

  1. [C# 网络编程系列]专题六:UDP编程
  2. ng-options渲染的第一项为空的解决办法
  3. 让关键词排名更稳定提升的优化技巧有哪些?
  4. JS合并数组的几种方法及优劣比较
  5. 《一只孤独的船》莱蒙托夫
  6. idea 配置jdk版本_JDK 11 安装过程(同时已安装了JDK 8)以及Intellij IDEA 配置
  7. 第六十三期:微软与阿里云合作推出“开放应用模型(OAM)”
  8. 如何使用oracle ebs,Oracle EBS进行集成的实际操作步骤
  9. Java利用二维数组判断节假日_《剑指offer》面试题3 二维数组中的查找 Java版
  10. 部署web应用程序到tomcat
  11. jquery 中多条件选择器,相对选择器,层次选择器的区别
  12. 力扣559. N 叉树的最大深度(JavaScript)
  13. php form 后台函数,Discuz!开发之后台表单生成函数介绍
  14. Java 容器类练习题(一)
  15. BZOJ3653: 谈笑风生
  16. Android-Parcelable理解与使用(对象序列化)
  17. Python实现桌面程序:PyQt5 + QtDesigner -- 界面设计与逻辑编写
  18. 管家婆 打开经营历程 Date exceeds maximum of 19-12-31报错解决
  19. 3、ORBSLAM闭环检测终局之战之sim3计算流程,确定是否检测到闭环
  20. 蓝桥杯学习记录||1264. 动态求连续区间和 | 线段树

热门文章

  1. 单链表的简单操作与演示
  2. JavaWeb中 pojo、entity、Dao、bo的含义
  3. Qt编写自定义控件37-发光按钮(会呼吸的痛)
  4. Chrome浏览器录屏扩展插件
  5. 简单有一定效果的条纹噪声消除算法
  6. 大数据的应用场景都有哪些(交通篇)
  7. 与200位专家相约,看国内外最新研发经验
  8. 电商卖家们必须关注的几个数据
  9. ORA-01653: 表 xxx 无法通过 (在表空间 xxx 中) 扩展
  10. Ribo-seq的下游分析方法1-ORFquant以及RiboQC