1.导入iris植物数据集,包含150个sample。X是一个4元组,包含特征:sepal length、 sepal width、 petal length、 petal width。Y是每个sample的分类情况,分类有三种情况(0,1,2)表示。
from sklearn.datasets import load_iris
dataset=load_iris()
X=dataset.data
Y=dataset.target
2.将连续的数据离散化。以平均值做阈值。
attribute_mean= X.mean(axis=0)
X_d=np.array(X>=attribute_mean,dtype=’int’)
from collections import defaultdict
from operator import itemgetter
3.实现OneR算法。
X是特征集,y_ture是分类信息,feature_index表示用第几个特征来分类,value表示特征值。(zip()函数:将两个元组一一对应)
train_feature_value函数统计了y类中第feature_index个特征值为value的sample个数
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