使用sklearn中的Iris植物分类数据集进行特征检验与预测分析
来源:互联网 发布:php 字符串拼接变量 编辑:程序博客网 时间:2024/04/30 01:11
import numpy as npfrom sklearn.datasets import load_irisfrom collections import defaultdictfrom operator import itemgetterfrom sklearn.cross_validation import train_test_splitdataset=load_iris()#X代表数据集的样子,每个sample中有四个值分别代表萼的长度和花瓣的长度X=dataset.data#Y中数据个数等于X中数据的sample数量,代表X中sample数量所属于0/1/2/3中的哪一种品种Y=dataset.target#print(Y)#print(X)n_samples,n_features=X.shape#返回的是数据集的总数量# print(X)#计算平均值,用于分类attribute_means=X.mean(axis=0)#计算的是每一列的平均值#print(attribute_means)#将数据集中大于平均数的置为1.小于的置为0c_X=np.array(X>attribute_means,dtype='int')# print(c_X)#分类问题,根据上面的数据集Y,我们知道150种植物被分成了三组,即三个种类。我们遍历这三类植物的特征,在某一个特征(比如花瓣长度)的特征值为0的情况下,#如果A类有20个,B类有60个,C类有20个,那么上面花瓣长度特征值为0的个体最可能属于B类植物,但是这个特征值的计算,错误率是40%,#首先根据需要创建出一个计算特征值错误率的函数def train_feature_value(X,Y,feature,value):#四个参数分别是数据集,类别数组,特征索引(每种植物的第几个特征)和特征值 class_counts=defaultdict(int) for sample,y in zip(X,Y): #如果当前种类植物的当前个体的特征的特征值等于给定的特征值,那么认为此类植物符合规则,数量加一 if sample[feature]==value: class_counts[y]+=1 #计算完成后,统计该特征下,哪种植物的计数最多 sorted_class_counts=sorted(class_counts.items(),key=itemgetter(1),reverse=True) #找出最多的种类 most_frequent_class=sorted_class_counts[0][0] #X现在是只包含0,1类型的矩阵,X.shape=(150,4),是150个数量每一种有四种特征 n_samples=X.shape[1] #统计出错的数量 error=sum([class_count for class_value,class_count in class_counts.items() if class_value!=most_frequent_class]) #然后返回该特征主要指向哪一个品种,与错误率# return ('最多的品种是{0}类植物,错误数是{1}'.format(most_frequent_class,error)) return most_frequent_class, error#定义一个遍历某特征的特征值的函数def train(X,Y,feature):#参数分别是数据集,类别集,特征索引 n_samples,n_features=X.shape#数据集的行和列 assert 0 <=feature <n_features #通过一个set集合,来获取不重复的特征值 values=set(X[:,feature]) #定义一个预测字典,用来保存每一个特征值出现的次数 predictors=dict() #定义一个错误列表,用来保存每一个特征值的错误率 errors=[] for value in values: most_frequent_class,error=train_feature_value(X,Y,feature,value) predictors[value]=most_frequent_class errors.append(error) #然后计算总错误率和预测器 total_error=sum(errors) return (predictors,total_error) #过拟合:当我们用训练集用做测试集的时候,通常会发生过拟合,即它在训练集中的表现特别好,但是碰到新的数据集时表现会很差。#为了防止过拟合,我们将一整个数据集分成训练集和测试集,sklearn给我们提供了一个分割数据集和训练集的函数,我们就会取得两个数据集X_train,X_test,Y_train,Y_test=train_test_split(c_X,Y,random_state=14)#如果random_state变成None时,就是真正的随机# print('训练集X:',X_test)# print('测试集X:',X_test)# print('训练集Y:',Y_train)# print('测试集Y:',Y_test)#然后遍历物种的每一样特征all_predicts={}errors={}for feature_index in range(X_train.shape[1]):#四种特征 predictors,total_error=train(X_train, Y_train, feature_index) all_predicts[feature_index]=predictors errors[feature_index]=total_error#找出错误无虑最低的特征best_feature,best_error=sorted(errors.items(),key=itemgetter(1),reverse=True)[0]#创建model,作为测试的标准model={ 'feature':best_feature, 'predictor':all_predicts[best_feature]}print('******',model)#定义测试函数开始测试def Test(X_test,model): feature=model['feature'] predictor=model['predictor'] Y_predictor=np.array([predictor[int(sample[feature])] for sample in X_test]) return Y_predictorY_predictor=Test(X_test,model)accuracy=np.mean(Y_predictor==Y_test)*100print(accuracy)
阅读全文
0 0
- 使用sklearn中的Iris植物分类数据集进行特征检验与预测分析
- 数据挖掘-oneR算法-Iris数据集分析-使用oneR算法进行分类预测(五)
- 数据挖掘-K-近邻分类器-Iris数据集分析-使用K-近邻分类器进行分类预测(四)
- 基于IRIS(鸢尾花)数据集使用sklearn的特征工程练习
- iris数据集进行KNN分类
- 使用不同的SVM对iris数据集进行分类并绘出结果
- c#神经网络,实现对Iris数据集进行分类
- 机器学习(九)使用sklearn库进行数据分析_——文本特征处理
- 大数据入门——Iris数据集类别预测(K近邻分类器:KNN)
- 特征选择——卡方检验(使用Python sklearn进行实现)
- iris数据集的读取,训练,预测
- 85、使用TFLearn实现iris数据集的分类
- 利用KNC对iris数据进行分裂及预测
- 机器学习(八)使用sklearn库进行数据分析_——特征处理之过滤、包裹、嵌入型
- Iris数据集可视化分析
- Python获取sklearn库中iris数据写入本地csv文件,可视化展示数据并进行分类、聚类实验以及结果可视化
- 使用Weka进行数据挖掘(Weka教程七)Weka分类/预测模型构建与评价
- python机器学习sklearn数据集iris介绍
- ubuntu 14.04 下FTP服务器的搭建--锁定用户目录,解决vsftpd: refusing to run with writable root inside chroot()
- 【C++】模板函数总结!!!
- 代码开光,永无BUG
- 棋盘 最小移出步数
- 实现一个函数判断year是不是闰年
- 使用sklearn中的Iris植物分类数据集进行特征检验与预测分析
- Rabin-Karp指纹字符串查找算法(c++)
- HTML
- 使用函数实现两个数的交换。
- hdu-1418-抱歉
- java设计模式六大原则
- 多线程--锁机制+synchronized的用法
- 基于Dragonboard 410c的总线控制之UART(二)
- 实现一个函数,判断一个数是不是素数。