结果
![](https://img-blog.csdnimg.cn/5035f670e834416eb6565d47535129e5.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5p-z5a625bGx5aS05Y-355-_5bel,size_20,color_FFFFFF,t_70,g_se,x_16)
代码
from sklearn.datasets import load_iris
import numpy as np
from collections import defaultdict
from operator import itemgetter
from sklearn.model_selection import train_test_split
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
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_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=[]
for current_value in values:
predictors[current_value],error=train_feature_value(X, y_true, feature_index, current_value)
errors.append(error)
return predictors,sum(errors)
def Training(Xd_train, Yd_train):
all_predictors={}
errors={}
for feature_index in range(Xd_train.shape[1]):
predictor,error=train_on_feature(Xd_train,Yd_train,feature_index)
all_predictors[feature_index]=predictor
errors[feature_index]=error
best_feature,minimum_error=sorted(errors.items(),key=itemgetter(1),reverse=False)[0]
model={'feature':best_feature,'predictor':all_predictors[best_feature]}
return model
def predict(Xd_test, model):
feature_index=model['feature']
predictor=model['predictor']
y_predicted=np.array([predictor[int(sample[feature_index])] for sample in Xd_test])
return y_predicted
dataset=load_iris()
X=dataset.data
Y=dataset.target
attribute_means=X.mean(axis=0)
X_d=np.array(X>=attribute_means,dtype='int')
Xd_train,X_test,Yd_train,Y_test=train_test_split(X_d,Y,random_state=14)
model=Training(Xd_train, Yd_train)
print("The predict model:{0}".format(model))
y_predicted=predict(X_test, model)
accuracy=np.mean(y_predicted==Y_test)*100
print("The test accuracy is {:.1f}%".format(accuracy))