Python数据挖掘入门与实践-OneR分类算法
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分类算法相关推荐
- 《python数据挖掘》和《python数据挖掘入门与实践》两本书读后感
这些天花了很多时间来学习数据挖掘这门课程,有很多心得和感悟,所以写下这篇博客来表达自己读完这两本书的感受! 首先推荐大家通过这两本书来入门数据挖掘这个领域,python数据挖掘这本书较容易,还花了很大 ...
- Python数据挖掘入门与实践---用决策树预测获胜球队
数据集来源:1. 2013-14 NBA Schedule and Results 2.2013年 NBA 赛季排名情况 参考书籍:<Python数据挖掘入门与实践> 1.加载数据集: ...
- 《python数据挖掘入门与实践》决策树预测nba数据集
前言: 学到决策树预测球队输赢时,按照书中网址去下载数据集,无奈怎么也没下载成功.即使下载了excel文件也是破损的.咱可是学了python的银,那好吧,我就把它爬取下来.(资源在下面) 代码: '' ...
- 改写《python数据挖掘入门与实践》第九章Gutenberg书籍下载代码
@数据挖掘 改写<python数据挖掘入门与实践>第九章Gutenberg书籍下载代码 可能是gutenberg网站改版的缘故,随书附带的getdata.py代码执行会报错. 个人将其进行 ...
- python_tweets.json (python数据挖掘入门与实践数据集下载)
最近在看python数据挖掘入门与实践一书,书不错,有个不好的地方是,书上所用的数据集,有几个测试数据在网上非常不好找 下面几个资源是我自己整理出来的,上传到CSDN,有需要的朋友可以下载 leagu ...
- 数据挖掘入门读物《Python数据挖掘入门与实践》豆瓣评分[7.70]
好书推荐.视频分享,公众号"读书ReadBook"与您一起进步 下载地址-- 1.点击阅读原文或者地址 https://ebooklist.mobi/2019/05/20/6465 ...
- Python数据挖掘入门与实践pdf
下载地址:网盘下载 内容简介 · · · · · · 本书作为数据挖掘入门读物,介绍了数据挖掘的基础知识.基本工具和实践方法,通过循序渐进地讲解算法,带你轻松踏上数据挖掘之旅.本书采用理论与实践相结 ...
- Python数据挖掘入门与实践 彩图 pdf
下载地址:网盘下载 内容简介 · · · · · · 本书作为数据挖掘入门读物,介绍了数据挖掘的基础知识.基本工具和实践方法,通过循序渐进地讲解算法,带你轻松踏上数据挖掘之旅.本书采用理论与实践相结 ...
- python 数据挖掘 简书_[Python数据挖掘入门与实践]-第一章开启数据挖掘之旅
1.数据挖掘简介(略) 2.使用Python和IPython Notebook 2.1.安装Python 2.2.安装IPython 2.3.安装scikit-learn scikit-learn是用 ...
最新文章
- [C# 网络编程系列]专题六:UDP编程
- ng-options渲染的第一项为空的解决办法
- 让关键词排名更稳定提升的优化技巧有哪些?
- JS合并数组的几种方法及优劣比较
- 《一只孤独的船》莱蒙托夫
- idea 配置jdk版本_JDK 11 安装过程(同时已安装了JDK 8)以及Intellij IDEA 配置
- 第六十三期:微软与阿里云合作推出“开放应用模型(OAM)”
- 如何使用oracle ebs,Oracle EBS进行集成的实际操作步骤
- Java利用二维数组判断节假日_《剑指offer》面试题3 二维数组中的查找 Java版
- 部署web应用程序到tomcat
- jquery 中多条件选择器,相对选择器,层次选择器的区别
- 力扣559. N 叉树的最大深度(JavaScript)
- php form 后台函数,Discuz!开发之后台表单生成函数介绍
- Java 容器类练习题(一)
- BZOJ3653: 谈笑风生
- Android-Parcelable理解与使用(对象序列化)
- Python实现桌面程序:PyQt5 + QtDesigner -- 界面设计与逻辑编写
- 管家婆 打开经营历程 Date exceeds maximum of 19-12-31报错解决
- 3、ORBSLAM闭环检测终局之战之sim3计算流程,确定是否检测到闭环
- 蓝桥杯学习记录||1264. 动态求连续区间和 | 线段树