算法实现

​
from sklearn.datasets import load_iris
import numpy as np
from collections import defaultdict
from operator import itemgetter
dataset = load_iris() #导入数据
x = dataset.data #x是样本数据,y是分类标签,0,1,2各50个,代表三种鸢尾花
y = dataset.target
n_sample,n_feature = x.shape # n_sample记录样本数据的个数,n_feature记录样本的特征数,即n_sample行n_feature列
# print(x)
attribute_means = x.mean(axis=0) #获取特征的平均值,当axis为0,表示取该列的平均值,此处数据预处理,将原始特征编码为0-1
#print(attribute_means)
x_d = np.array(x>=attribute_means,dtype='int')
#print(x_d)# train_feature_value 统计数据样本 x 中 y_true 类中第 feature_index 个特征值为 value(0或者1) 的实例个数,用来训练特征值
#遍历数据样本 x ,对于每一个特征 feature_index 的取值 value ,统计在不同类别 y 中出现的次数,出现最多的类别为该特征标识的类别,其他类别出现的个数,为错误率
#比如,规定特征 feature_index (花萼) 的value (长度) 为0,返回出现最多的类别为 Setosa ,以及错误率 36(在 Versicolour 和 Virginica 类别中出现的次数)
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] += 1# print(calss_counts[y])sorted_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_countin class_counts.items()if class_value != most_frequent_class]error = sum(incorrect_predictions)return most_frequent_class,error# train_on_feature 通过调用上面的函数(对指定的特征值进行训练,如 0 ),得到0和1两个特征值的训练模型
#结果返回的是指定特征Teature_index为0和1时候相关性最高的类别和错误率(错误率为0和1的总和,这里不明白)
def train_on_feature(x,y_true,feature_index):#x表示数据集,y_true表示类别数组,feature_index表示特征值values = set(x[:,feature_index]) # 实际上这里values只有0和1两个取值predictors = {}errors = []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#--------------以上为定义的训练模型--------------
#--------------分割25%为测试集,75%为训练--------
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(x_d,y,random_state=14)
all_predictors = {}
errors = {}
for feature_index in range(x_train.shape[1]):#遍历每一个标签值,这里的范围是数据集的列数predictors,total_error = train_on_feature(x_train,y_train,feature_index)all_predictors[feature_index] = predictors #得到每一个特征标注的种类,以及错误率errors[feature_index] = total_error# errors 字典的形式为{特征索引,错误数}。以下根据错误数进行排序,取最小错误的特征索引和该特征对应的错误
best_feature,best_error = sorted(errors.items(),key=itemgetter(1))[0]
print(best_feature,best_error)print(all_predictors)
model = {'feature':best_feature,'predictor':all_predictors[best_feature]}
print(model)#预测函数
def predict(x_test,model):varible = model['feature']predictor = model['predictor']y_predicted = np.array([predictor[(sample[varible])] for sample in x_test])return y_predicted
y_predicted = predict(x_test,model)
print(x_test)
print(y_test)
print(y_predicted)
accurancy  = np.mean(y_predicted == y_test) * 100
print('准确率是 %s'%(accurancy))#按照给出来的规则​

结果:从已知的数据中,以特征0预测种类1,特征1预测种类2,准确率为65.79%

数据挖掘实践 —— OneR 分类算法相关推荐

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

    Python数据挖掘入门与实践-OneR分类算法 OneR算法 OneR算法是根据已有的数据中,具有相同特征值的个体最可能属于哪个类别进行分类. 在本例中,只需选区Iris是个特征中分类效果最好的一个 ...

  2. 数据挖掘-决策树ID3分类算法的C++实现

    数据挖掘课上面老师介绍了下决策树ID3算法,我抽空余时间把这个算法用C++实现了一遍. 决策树算法是非常常用的分类算法,是逼近离散目标函数的方法,学习得到的函数以决策树的形式表示.其基本思路是不断选取 ...

  3. python分类算法_python数据挖掘中的分类算法有哪些?

    一直以来,对于机器学习领域,Python都是人们津津乐道的话题,大家知道我们在用python学习机器技术时候,用到的方法内容和一般情况下的是一样的吗?想必,了解过的小伙伴一定是知道有哪些的,不知道的小 ...

  4. 数据挖掘学习——决策树分类算法理论(包含Iris实战)

    目录 1.决策树分类算法概述及相关公式 (1)基本思路 (2)熵公式 (3)基尼(Gini)系数公式 2.ID3算法 3.C4.5算法 4.CART算法 5.各类决策树分类算法比较 6.过拟合与决策树 ...

  5. python的分类算法有哪些_python数据挖掘中的分类算法有哪些?

    一直以来,对于机器学习领域,Python都是人们津津乐道的话题,大家知道我们在用python学习机器技术时候,用到的方法内容和一般情况下的是一样的吗?想必,了解过的小伙伴一定是知道有哪些的,不知道的小 ...

  6. python数据分类_Python数据挖掘实践—KNN分类

    # -*- coding: UTF-8 -*- import math import csv import random import operator '''@author:hunter@time: ...

  7. 编程实践--决策树分类算法--隐形眼镜材质分类

    第二个自己亲手敲出来的机器学习算法~ 任务描述: 数据集来自:<机器学习实战> 手写数字识别任务 决策树算法 思路: (1)计算信息增益,得到每一步的最好特征. (2)树结构. 数据集及代 ...

  8. 数据挖掘分类算法的学习总结

    一.中文摘要 大数据时代的我们每时每刻都在产生海量数据,如何快速准确获取其中有价值的数据一直是亟待解决的问题.数据挖掘技术的应运而生为该问题提供了解决手段,作为数据挖掘核心内容之一的分类算法同样发挥了 ...

  9. 基于Spark的机器学习实践 (九) - 聚类算法

    0 相关源码 1 k-平均算法(k-means clustering)概述 1.1 回顾无监督学习 ◆ 分类.回归都属于监督学习 ◆ 无监督学习是不需要用户去指定标签的 ◆ 而我们看到的分类.回归算法 ...

最新文章

  1. 使用Lingobit Localizer汉化.net程序(Translate .net program using Lingobit Localizer)
  2. CVPR 2021 | CoCosNet v2解锁“高配版”图像翻译
  3. 避免软件失败的7个关键实践——来自项目管理群的讨论
  4. python中字符串str的strip()方法
  5. opencart配置United States Postal Service快递
  6. Cisco AP1240多SSID配置简解
  7. angularJs内置指令63个
  8. 2003-2019年全国30省市分地区能源消费结构数据集(煤炭占比)
  9. 无线路由器的DNS服务器怎么设置,无线路由器DNS的设置方法
  10. DPDK NFV 性能提升
  11. RTSP支持MPEG-4格式监控
  12. PAT甲级-1118 Birds in Forest (25 分)
  13. E4A影视APP源码电视盒子酷点TV版4.5 后端对接苹果cms
  14. abs绝对位置指令 三菱plc_三菱FX系列PLC方便指令的使用方法
  15. [编程题] 翻转数列--附详细分析思路
  16. 【测试用例】文本框测试用例
  17. sql server和mysql都装_mysql和sql server可以同时安装吗
  18. 【C/C++面试必备】声明和定义的区别
  19. 中科院上海药物所等揭示AMPK促进DNA双链损伤修复的新机制
  20. 58同城2018秋招前端笔试试题

热门文章

  1. ConvE,知识图谱嵌入(KGE)论文复现(Ubuntu 20.04)
  2. Mybatis系列全解(八):Mybatis的9大动态SQL标签你知道几个?提前致女神!
  3. IOS开发入门(6)-自动布局(1)
  4. java语言签到定位系统_百度地图定位签到功能
  5. 电脑某一个文件夹嵌套太多,导致无法删除的解决方法
  6. 2021年职业病防治法宣传周宣传资料
  7. 一元二次求解matlab程序,规范MATLAB编程实例——求解一元二次方程
  8. 补单平台开发搭建源码_补单系统开发搭建IDEA导入jdk8源码学习(报错解决方案)
  9. Python 中创建 PostgreSQL 数据库连接池
  10. mysql innodb 缓冲池_mysql8 参考手册--配置多个InnoDB缓冲池实例