首先说一下,该数据集来源于网络。Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。数据来源:http://archive.ics.uci.edu/ml/datasets/Iris
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl
from sklearn.ensemble import RandomForestClassifier
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
if __name__ == "__main__":
iris_feature = '花萼长度', '花萼宽度', '花瓣长度', '花瓣宽度'
path = 'iris.data' # 数据文件路径
data = pd.read_csv(path, header=None)
x_prime = data[list(range(4))]
y = pd.Categorical(data[4]).codes
feature_pairs = [[0, 1], [0, 2], [0, 3], [1, 2], [1, 3], [2, 3]]
for _, pair in enumerate(feature_pairs):
x = x_prime[pair]
clf = RandomForestClassifier(n_estimators=100, criterion='entropy', max_depth=4)
clf.fit(x, y)
# 训练集上的预测结果
y_hat = clf.predict(x)
c = np.count_nonzero(y_hat == y) # np.count_nonzero(a)统计a中为True的个数
print('特征:', iris_feature[pair[0]], '和', iris_feature[pair[1]],"对类别的影响")
print('预测正确数目:', c)
print('准确率: %.2f%%' % (100 * float(c) / float(len(y))), "\n")
结果如下:
特征: 花萼长度 和 花萼宽度 对类别的影响
预测正确数目: 126
准确率: 84.00%
特征: 花萼长度 和 花瓣长度 对类别的影响
预测正确数目: 145
准确率: 96.67%
特征: 花萼长度 和 花瓣宽度 对类别的影响
预测正确数目: 146
准确率: 97.33%
特征: 花萼宽度 和 花瓣长度 对类别的影响
预测正确数目: 144
准确率: 96.00%
特征: 花萼宽度 和 花瓣宽度 对类别的影响
预测正确数目: 145
准确率: 96.67%
特征: 花瓣长度 和 花瓣宽度 对类别的影响
预测正确数目: 145
准确率: 96.67%